UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Arquitectura de Computadores II Engenharia Informática (11545) Tecnologias e Sistemas de Informação (6621) Pipelining Fonte: Arquitectura de Computadores, José Delgado, IST, 2004 Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 1 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Processamento em Estágios (Pipelining) • A microprogramação é sequencial. A microprogramação divide o processamento de uma instrução em vários estágios: – Busca instrução (BI) – Descodifica instrução (DI) – Busca operandos (BO) – Executa instrução (EI) – Escreve resultado (ER) • O primeiro estágio de uma nova instrução (BI) só começa após o fim do último estágio da instrução anterior (ER). O processamento é sequencial. BI DI BO EI ER BI DI BO EI Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 ER BI DI BO EI ER 2 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática BI DI BO EI ER BI DI BO EI ER BI DI BO EI ER • Se cada estágio for efectuado por um bloco de hardware diferente, então é possível começar a tratar da instrução seguinte mal acabe o primeiro estágio da instrução corrente. BI DI BO EI BI DI BO EI BI ER DI BO EI BI » O tempo que cada instrução demora a executar mantém-se. Mas o processador completa uma instrução por cada ciclo de relógio! ER ER DI BO EI BI ER DI BO EI BI ER DI BO EI Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 ER 3 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • A latência (tempo de espera até que uma dada instrução acabe) mantém-se. O que melhora é o ritmo (número de instruções executadas por unidade de tempo). • Idealmente, o pipeline melhora o desempenho N vezes (N = número dos estágios do pipeline), mas: – Há estágios inactivos durante o enchimento/esvaziamento, causados por exemplo pelos saltos e chamadas de rotinas; – Nem todas as instruções necessitam dos estágios todos; – A frequência do relógio é limitada pelo estágio mais lento; – A sequência temporal foi alterada (escala de tempos sobreposta), o que cria problemas de dependências (ler um valor antes de ele ter sido produzido, por exemplo). Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 4 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Uma das assumpções básicas do pipeline é que todos os estágios demoram igual tempo a executar. • Se considerarmos uma arquitectura tipo 80x86: – Registo-memória (um dos operandos/resultado de uma instrução pode estar num registo ou em memória); – Formato de instruções altamente variável, com tamanhos entre 1 e 17 bytes; – Complexidade de instruções altamente variável, desde muito simples (incrementar um registo) até push dos registos todos, ou cópia de um vector em memória; – Conjunto de instruções extenso, complexo e cheio de excepções; Assim, facilmente se constata que esta assumpção não se verifica. Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 5 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Arquitecturas Complexas • Este tipo de arquitecturas é designado por CISC (Complex Instruction Set Computers) porque seguiu a filosofia de incluir no hardware o maior número de funcionalidades possível. • No entanto, verificou-se que: – Os compiladores não geravam, em muitos casos, as instruções mais complexas (preferindo sequências de instruções mais simples, mas gerais e mais fáceis de gerar) – A complexidade dos circuitos tinha como consequência: • as frequências de relógio eram limitadas pela complexidade dos circuitos • simples operações entre registos e acessos à memória demoravam vários ciclos de relógio Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 6 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Solução: filosofia RISC (Reduced Instruction Set Computer) – arquitectura simples: • Poucas instruções • Todas com o mesmo tamanho • Poucos formatos diferentes • Arquitectura (registo-registo, ou load-store) • Operações mais simples num só ciclo de relógio • Mais registos (para compensar a falta da memória nos operandos) – compilador mais inteligente, que tem de: • analisar melhor a semântica do programa (gestão dos registos) • se preocupar com detalhes da arquitectura (conflitos do pipeline) • gerar mais código do que num CISC (instruções mais simples...) • A ideia geral é de que o simples não deve ser mais lento por causa do complicado Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 7 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • RISC: Vantagens Arquitecturais • Estas características podem ser vistas num processador como o MIPS, que parece ter uma arquitectura muito “básica”; • Por exemplo, não há PUSH nem CALL, tem de ser o compilador a determinar se um dado valor deve ser guardado em memória, tem de gerar instruções para manipular o SP, … • Mas, por outro lado: – A unidade de controlo é MUITO mais simples – A arquitectura é facilmente adaptável à estrutura em pipeline (só as instruções terem o mesmo tamanho e os operandos estarem sempre nos registos...) Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 8 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Busca instrução M U X Descodifica instrução e obtém operandos Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço M U X Memória de dados 9 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Os registos não são edge-triggered. Permitem escrita na primeira metade do relógio e leitura na segunda (incluindo os dados escritos na primeira metade – read-after-write). • Memórias de instruções e de dados separados, para maior eficiência (na realidade, só as caches estão separadas – a ver mais tarde). • Os dados produzidos num estágio e usados no(s) seguinte(s) têm de ser propagados através dos registos, mesmo que estejam já disponíveis (porque os estágios seguintes estão ocupados). • Os elementos num estágio só podem usar as saídas dos registos de entrada nesse estágio. Exemplos: PC e endereço do registo a escrever com o resultado. Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 10 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Busca instrução Descodifica instrução e obtém operandos M U X Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 11 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Busca instrução Descodifica instrução e obtém operandos M U X Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 12 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Busca instrução Descodifica instrução e obtém operandos M U X Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 13 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Busca instrução Descodifica instrução e obtém operandos M U X Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 14 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Load Busca instrução M U X Descodifica instrução e obtém operandos Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 15 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Add Busca instrução M U X Load Descodifica instrução e obtém operandos Executa instrução M U X + +1 +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 16 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática Jmp Busca instrução M U X Add Descodifica instrução e obtém operandos Load Executa instrução M U X + +1 +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 17 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática ... Busca instrução M U X Jmp Descodifica instrução e obtém operandos Add Load Executa instrução Escreve resultado M U X + +2 PC EA DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 18 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática ... ... Jmp Add Busca instrução Descodifica instrução e obtém operandos Executa instrução Escreve resultado M U X M U X + +2 PC EA DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 19 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática ... Busca instrução M U X Descodifica instrução e obtém operandos Executa instrução M U X + +2 PC EA Escreve resultado DA ALU Memória de instruções Registos EB DB DE EE EA – Endereço registo A EB – Endereço registo B DA – Conteúdo registo A DB – Conteúdo registo B DE – Dado a escrever EE – Endereço do registo a escrever Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 M U X Endereço Memória de dados M U X 20 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática MOV R1, R2 ADD R3, R1 ADD R1, R3 R1 R2 BI R3 R3 + R1 DBO EI ER BI DBO EI ER BI DBO EI R1 R1 + R3 ER • As setas indicam as dependências entre instruções: – As caudas indicam onde os registos são escritos – As cabeças indicam onde os registos são lidos • Setas para trás indicam conflitos de dados • Formas de resolver o problema: – Atrasando as instruções seguintes – Disponibilizando os dados mais cedo (data forwarding) Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 21 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Atraso das instruçõoes: solução em software (implementada pelo compilador) inserir instruções “dummy”: MOV R1, R2 NOP ADD R3, R1 BI R1 R2 DBO EI ER BI DBO EI ER BI DBO EI ER BI DBO EI ER BI DBO EI R3 R3 + R1 NOP ADD R1, R3 Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 R1 R1 + R3 ER 22 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Atraso das instruçõoes: solução em hardware (implementada pela unidade de controlo do processador) inserir “bolhas” (desperdiçar ciclos do estágio do pipeline): MOV R1, R2 BI DBO EI ADD R3, R1 BI DBO ADD R3, R1 R3 R3 + R1 DBO EI ADD R1, R3 BI DBO ADD R1, R3 R1 R1 + R3 Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 BI Bolhas R1 R2 ER BI ER DBO EI ER 23 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Antecipação dos dados: Não esperar pelo “Escreve resultado” mas usar logo os dados (data forwarding) que já estão disponíveis no estágio de execução. MOV R1, R2 R1 R2 BI R3 R3 + R1 ADD R3, R1 DBO EI ER BI DBO EI ER BI DBO EI R1 R1 + R3 ADD R1, R3 ER Conflito Data forwarding Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 24 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Como fazer nas instruções cuja execução é complicada e demora mais do que um ciclo de relógio (isto é, combinar RISC com CISC)? Busca instrução Pré-descodificação Microsequenciador ROM de microprograma Descodificação e Busca operandos Executa Escreve resultado • Nestes casos o pipeline faz fetch da ROM de microprograma para executar uma instrução assembly. Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 25 UNIVERSIDADE DA BEIRA INTERIOR Faculdade de Engenharia Departamento de Informática • Conclusões: • A técnica de processamento em estágios (pipelining) permite aumentar bastante o desempenho, mas com alguns problemas: – Manter o pipeline cheio – Conflitos de dados e de controlo (porque o pipeline altera o sequenciamento de algumas operações) – Propagação de sinais (produzidos num ciclo de relógio e ser usados noutro estágio e/ou noutro ciclo de relógio) • Naturalmente, a tendência é simplificar o hardware e o controlo, com menos variantes (o pipeline é muito rígido em termos de temporizações). • Daqui surgiu a filosofia RISC, passando a caber ao compilador um papel mais importante na gestão do pipeline. O hardware ficou mais rápido. Nuno Pombo / Paulo Fazendeiro – Arquitectura Computadores II – 2014/2015 26