Implementação de pipelines



Documentos relacionados
Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Paralelismo a Nível de Instrução

Sequenciamento dinâmico

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I

Conflitos. Aula de Março de

ARQUITECTURA DE COMPUTADORES

Arquitetura de Computadores - Processadores Superescalares. por Helcio Wagner da Silva

RISC simples. Aula de Março de

Arquitetura de Computadores I

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

Arquitetura de Computadores I

Informática I. Aula 5. Aula 5-13/05/2006 1

Visão Geral de Pipelining

Pipelining - analogia

Exemplo: CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 CC9 ADD $s0, $t0, $t1 IF ID EX MEM WB SUB $t2, $s0, $t3 IF Stall Stall ID EX MEM WB

28/9/2010. Unidade de Controle Funcionamento e Implementação

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Caminho dos Dados e Atrasos

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Aula 14: Instruções e Seus Tipos

Modelo Cascata ou Clássico

ULA Sinais de Controle enviados pela UC

Figura 1 - O computador

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

MODOS DE ENDEREÇAMENTO

Microcontroladores e Interfaces 3º Ano Eng. Electrónica Industrial

ARQUITETURA DE COMPUTADORES

Desempenho de Computadores

Arquitecturas Alternativas. Pipelining Super-escalar VLIW IA-64

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

BARRAMENTO DO SISTEMA

Universidade Federal do Rio de Janeiro Pós-Graduação em Informática IM-NCE/UFRJ. Pipeline. Gabriel P. Silva. Microarquitetura de Alto Desempenho

Representação de Dados

Dadas a base e a altura de um triangulo, determinar sua área.

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8

Utilização do SOLVER do EXCEL

Componentes do Computador e. aula 3. Profa. Débora Matos

Geração de código intermediário. Novembro 2006

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Arquitetura de Computadores RISC x CISC. Gustavo Pinto Vilar

Sistemas de armazenamento

Interrupções. As interrupções são casos especiais de chamadas de procedimentos.

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Organização e Arquitetura de Computadores I

GIAE VERSÃO JUNHO DE 2011 MUITO IMPORTANTE

Tarefa Orientada 10 Obter informação a partir de uma tabela

ArchC. Wesley Nunes Gonçalves

Conjunto de instruções. O Conjunto de Instruções. Conjunto de instruções. Instruções típicas. Instruções típicas. Instruções típicas

a 1 x a n x n = b,

CAP. I ERROS EM CÁLCULO NUMÉRICO

Introdução às Linguagens de Programação

TIC Unidade 2 Base de Dados. Informação é todo o conjunto de dados devidamente ordenados e organizados de forma a terem significado.

FICHA ORIENTADA Nº1. Barra de fórmulas. Área de trabalho T E C N O L O G I A S D E I N F O R M A Ç Ã O E C O M U N I C A Ç Ã O

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados

COMPETÊNCIAS BÁSICAS EM TIC NAS EB1

ARQUITETURA DE COMPUTADORES

Arquitetura de Computadores. Ivan Saraiva Silva

Introdução ao Processamento Paralelo

Manual de Utilizador. Disciplina de Projecto de Sistemas Industriais. Escola Superior de Tecnologia. Instituto Politécnico de Castelo Branco

Tarefa Orientada 13 Agrupamento e sumário de dados

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

Índice. Tudo! (datapath de um ciclo)

Manual do GesFiliais

Manual Gespos Passagem de Dados Fecho de Ano

Arquitectura de Computadores RECUPERAÇÃO DO 1º TESTE

SISTEMAS DIGITAIS. Memórias. Prof. Guilherme Arroz Prof. Carlos Sêrro Alterado para lógica positiva por Guilherme Arroz.

Ferramenta de Testagem IECL Orientações para o Aluno (PT)

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Sistemas Computacionais II Professor Frederico Sauer

&XUVRGH,QWURGXomRDR (GLWRUGH3ODQLOKDV([FHO

AMBIENTE DE PROGRAMAÇÃO PYTHON

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

Arquitetura de Computadores

Organização de Unidades de Processamento

Algumas características especiais

A FÓRMULA DE CONVERSÃO ENTRE AS UNIDADES É: F = 1.8 C

Tarefa Orientada 12 Junção Externa, Auto-Junção e União

1. Ambiente de Trabalho

Usando o Excel ESTATÍSTICA. A Janela do Excel Barra de título. Barra de menus. Barra de ferramentas padrão e de formatação.

Organização Básica do Computador

Projeto de Máquinas de Estado

Sistemas Processadores e Periféricos Aula 5 - Revisão

Representando Instruções no Computador

APROG - Civil. Excel. Técnicas de pesquisa de informação em tabelas. Instituto Superior de Engenharia do Porto

Linguagem de Montagem Funcionamento de CPU e Assembly Rudimentar

OPERADORES E ESTRUTURAS DE CONTROLE

Unidade 10: A Unidade Lógica Aritmética e as Instruções em Linguagem de Máquina Prof. Daniel Caetano

Computação Paralela. Desenvolvimento de Aplicações Paralelas João Luís Ferreira Sobral Departamento do Informática Universidade do Minho.

Facturação Guia do Utilizador

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Pipelines. João Canas Ferreira. Mar-Abr Contém figuras de: Computer Organization & Design, D. A Patterson e J. L. Hennessy, 2 a ed. (cap.

Primeiros "computadores" digitais. Execução de um programa. Consolas. Primórdios dos computadores. Memória interna. Computadores com memória interna

A máscara de sub-rede pode ser usada para dividir uma rede existente em "sub-redes". Isso pode ser feito para:

Aritmética Binária e. Bernardo Nunes Gonçalves

Transcrição:

Implementação de pipelines João Canas Ferreira Novembro de 2005 Contém figuras de Computer Architecture: A Quantitative Approach, J. Hennessey & D. Patterson, 3ª. ed., MKP JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 1/18 Assuntos 1 Implementação da arquitectura MIPS 2 Tratamento de instruções multiciclo JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 2/18

Implementação sem pipeline 1. (IF) IR MEM[PC]; NPC PC+4 O registo IR guarda a instrução durante os restantes ciclos de relógio. 2. (ID) A Regs[rs]; A Regs[rt]; Imm campo imediato de IR (sign-extended) 3. (EX) Depende do tipo de instrução: Referência a memória: ALUOutput A + Imm; Instrução reg-reg: ALUOutput A op B; Instrução reg-imm: ALUOutput A op Imm; Salto condicional: ALUOutput NPC + (Imm<< 2); Cond (A==0); 4. (MEM) Depende do tipo de instrução: Referência a memória: LMD Mem[ALUOutput] ou MEM[ALUOutput] B; Salto condicional (BEQZ) : if (Cond) PC ALUOutput; 5. (WB) Escrita de resultados: Instrução reg-reg: Regs[rd] ALUOutput; Instrução reg-imm: Regs[rt] ALUOutput; Instrução load: Regs[rt] LMD; JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 3/18 3.1. Os três formatos de instruções são R (três registos), I (2 registos e um valor imediato de 16 bits) e J (valor imediato de 26 bits). Formato R 31 26 21 16 11 6 op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Formato I 31 26 21 16 op rs rt imediato 6 bits 5 bits 5 bits 16 bits Formato J 31 26 21 16 op endereço 6 bits 26 bits op: opcode; rs, rt, rd: registos; shamt: usado apenas com instruções de deslocamento; funct: operação aritmética a efectuar (soma, subtracção, etc.). 3.2. Instruções tipo R: rs: 1º operando, rt: 2º operando, rd: destino. 3.3. Instruções do tipo I: rs: 1º operando ou especificação do endereço; rt: destino ou 2º operando (store). 3.4. (Ciclo 1) O registo IR é usado para guardar a instrução durante os próximos 4 ciclos. 0 0 0 3

Implementação sem pipeline : diagrama JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 4/18 4.1. (Ciclo 2) Descodifica a instrução e acede aos registos indicados pelos campos rs e rt. O acesso é feito mesmo para instruções que não usam esses campos. Neste último caso, o valor lido não será utilizado no tratamento posterior da instrução. Os 16 bits menos significativos (correspondentes a um deslocamento relativo em instruções que contenham um por exemplo, saltos condicionais) são convertidos para 32 bits e guardados no registo temporário Imm. 4.2. (Ciclo 3) Este é o primeiro ciclo de relógio em que o processamento depende do tipo de instrução. Para acessos a memória (leituras ou escritas), calcula-se o endereço efectivo. Para instruções aritméticas, efectua-se o referido cálculo. Para saltos: a ALU é usada para calcular o endereço do destino do salto. O valor do registo A (estabelecido no ciclo anterior) é comparado com zero para determinar se o salto é tomado (apenas consideramos uma instrução de salto BEQZ). 4.3. (Ciclo 4) Neste ciclo, realiza-se o acesso a memória. O processamento de saltos também é terminado nesta fase. É neste ciclo que o registo PC é actualizado. 4.4. (Ciclo 5) Neste ciclo, o resultado da execução (ciclo 3) ou da leitura de memória (realizada no ciclo 4) é guardado no registo de destino (rd). Instruções de escrita em memória e de salto não têm nada a fazer neste ciclo. 4

Implementação com pipeline : diagrama JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 5/18 5.1. Para construir uma pipeline introduzem-se registos (elementos de memória) entre os andares. Cada registo é actualizado no flanco ascendente do sinal de relógio com os valores produzidos pelo andar à sua esquerda. Durante o ciclo seguinte, esses valores constituem os dados de entrada do andar à sua direita. 5.2. Cada registo é designado pelos nomes combinados dos andares associados. Assim, o registo ID/EX está colocado entre os andares de descodificação e de execução. 5.3. O registo PC pode ser considerado como o registo de entrada do primeiro andar. 5.4. O multiplexador de selecção do PC foi movido do quarto para o primeiro andar, já que o PC deve ser actualizado a cada ciclo. 5.5. Qualquer valor produzido num andar da pipeline e requerido num andar posterior (i.e., à sua direita) deve ser colocado no registo de saída do andar de origem e passado de registo em registo até ao andar onde é necessário. Por exemplo, o número do registo de destino (rd) de uma instrução do tipo R é determinado no andar de ID e deve ser propagado até ao andar de WB, que é o andar em que é usado para aceder ao banco de registos. 5

Sequenciamento de operações: pormenores JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 6/18 6.1. Cada registo de pipeline está dividido em secções. O formato do nome de cada secção é <andar1/andar2.secção>, em que <secção> é quase sempre o nome do registo usado na versão non-pipelined. 6.2. Nesta implementação, instruções de salto demoram 4 ciclos (este valor será reduzido para 2 na implementação tratada no acetato 10), instruções do tipo store demoram 4 ciclos e todas as outras 5 ciclos. 6.3. O tratamento de instruções nos dois primeiros andares é independente do tipo de instrução. O facto de a especificação dos registos ter a mesma posição em todas as instruções (que usam esses registos) é vital para permitir a leitura de registos no segundo andar. Se tal não acontecesse, a leitura dos operandos (registos) só poderia ser feita mais tarde. 6.4. Para controlar esta pipeline apenas é necessário controlar os quatro multiplexadores indicados no acetato 5. 6

Detecção de conflitos Condições de detecção: JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 7/18 7.1. A estratégia de de tratamento de dependências é a seguinte: usar forwarding para evitar conflitos sempre que possível; quando tal não for possível, protelar. Este acetato mostra o tipo de situações que podem surgir. As situações que requerem tratamento são as indicadas nas linhas 2 e 3 da primeira tabela. As situações da linha 2 requerem um protelamento, as da linha 3 podem ser resolvidas por forwarding (ver acetato 8). 7.2. A tabela mostra que que apenas é necessário comparar o registo de destino de uma instrução e os registos-fonte (rs e rt) das duas instruções seguintes (apenas da instrução seguinte na situação da linha 2). 7.3. A tabela inferior identifica todas as situações em que uma instrução do tipo load é seguida de uma instrução que usa o valor lido de memória. A instrução de load está em execução, i.e., está a ser processada no andar 3 em função dos valores do registo ID/EX; a instrução que eventualmente levará a protelamento está no andar 2 (registo IF/ID). Em Português, a primeira condição teria a seguinte formulação: A instrução seguinte (i.e., do andar 2) é do tipo R e o seu registo rs é o mesmo registo que é usado para guardar o resultado do load, i.e., o registo rt associado à instrução em ID/EX. 7

Condições de forwarding JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 8/18 8.1. A detecção das situações de que requerem forwarding é feita de forma semelhante à da detecção de protelamento, excepto que agora existem 10 casos diferentes, conforme indicado na tabela. 8.2. Existe ainda um caso não contemplado na tabela: múltiplas instruções seguidas que modificam o mesmo registo. Neste caso, é necessário garantir que forwarding de MEM/WB só é activado se não existir simultaneamente forwarding de EX/MEM. Para estudar esta situação, considere, por exemplo, a seguinte sequência: 1. DADD R1, R2, R3 2. DADDI R1, R1, #2 3. DSUB R4, R3, R1 8.3. Extra: Como implementar o protelamento? (acetato anterior) 1. Alterar o conteúdo de ID/EX para o código de uma instrução que não faça nada (no-op). No caso do MIPS, a instrução DADD R0, R0, R0 é usada; a sua codificação tem todos os bits a zero. 2. Não alterar o conteúdo de IF/ID, nem de PC. 8

Implementação de forwarding JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 9/18 9.1. A implementação de forwarding requer mais três entradas em cada um dos multiplexadores que alimentam a ALU. 9.2. Os três novos percurso alimentam a(s) entrada(s) da ALU a partir: 1. da saída da ALU (guardado em EX/MEM); 2. do valor da ALU que transitou para MEM/WB (i.e., a saída da ALU correspondente à instrução precedente); 3. do valor lido de memória (guardado em MEM/WB). 9

Tratamento de saltos: organização JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 10/18 10.1. Até aqui ainda não foi referido como tratar os saltos condicionais. Em princípio, é preciso protelar até se determinar se o salto é tomado e qual o endereço de destino (para o que é preciso somar o deslocamento relativo incluído na instrução ao valor actual do PC). Como o processamento da instrução de salto demora quatro ciclos, seria necessário protelar o processador durante três ciclos. 10.2. Devido à elevada frequência de ocorrência das instruções de salto condicional, é importante reduzir este impacto. A solução indicada na figura mostra como implementar o tratamento de saltos condicionais em 2 ciclos, admitindo que apenas estamos inetressados em comparações com zero (instruções BEQZ e BNEZ). Para tal foi necessário usar mais um somador (visto a ALU já não poder ser usada para calcular o endereço de destino). Além disso, o novo endereço não é registado em ID/EX, mas usado directamento para actualizar o PC ainda no ciclo ID. 10

Tratamento de saltos: operações Andar IF ID EX MEM Instrução de salto IF/ID.IR MEM[PC]; IF/ID.NPC,PC (if ((IF/ID.opcode == salto) & (Regs[IF/ID.IR 6..10 ] op 0)) {IF/ID.NPC+sign-extend(IF./ID.IR[imm]<<2)} else {PC+4};) ID/EX.A Regs[rs];ID/EX.A Regs[rt]; ID/EX.IR IF/ID.IR; ID/EX.Imm sign-extend(if/id.ir[imm]); Cálculo do endereço de destino e da condição de salto são feitos para todas as instruções. Esta abordagem reduz a penalidade do salto de 3 ciclos para 1. Saltos incondicionais requerem um somador adicional (26 bits). JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 11/18 11.1. A actualização do PC é feita no andar IF usando valores produzidos em ID (e não em EX, como anteriormente), poupando assim dois ciclos: um por não produzir os dados em EX; outro por o novo PC não passar pelo registo ID/EX, mas ainda servir para alterar o PC nesse mesmo ciclo. 11.2. Como implementar o protelamento neste caso: simplesmente converter a instrução lida a seguir à instrução de salto numa instrução nula (no-op) (ao ser guardada em IF/ID). A operação de fetch seguinte já irá ler da posição correcta. 11.3. Nesta implementação, o processador protela sempre um ciclo a seguir a uma instrução de salto (condicional ou não). Seria possível melhorar a implementação para apenas anular a instrução já lida nos casos em que o salto fosse tomado. 11

Tratamento de instruções multiciclo Unidades funcionais adicionais EX int EX VF/int mul IF ID MEM WB EX VF soma EX VF/nt div As unidade de execução não são pipelined. JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 12/18 12.1. Este acetato mostra a forma mais simples de tratar operações cuja execução seja demorada. Para evitar que o ciclo de relógio tenha que ser alongado para executar essas operações, permite-se que uma instrução gaste mais que um ciclo no estado de execução. Além disso, também é conveniente dispor de unidades de execução separadas para os diferentes tipos de operações. 12.2. A abordagem geral consiste em repetir fase de execução tantas vezes quantas as necessárias. Neste contexto, a detecção de conflitos torna-se mais complicada: uma instrução não pode passar de ID para EX (i.e., não pode ser emitida) se necessitar de uma unidade em uso (o que é fácil de detectar) ou se provocar um conflito de dados. Antes de analisar a forma como essa detecção pode ser feita, é útil generalizar a pipeline indicada acima de forma a permitir que as unidades de execução também sejam, elas próprias, pipelined. 12

Tratamento de instruções multiciclo Latência e intervalos de repetição Em geral, (algumas das) unidades de execução multi-ciclo também devem ser transformadas em pipeline. Também deve ser possível ter múltiplas instruções em execução para aproveitar todos os recursos disponíveis. latência número de ciclos entre a instrução que produz um resultado e a instrução que a usa; intervalo de repetição número mínimo de ciclos entre a emissão de duas instruções de um dado tipo. Unidade funcional Latência Intervalo ALU (inteiros) 0 1 Memória de dados 1 1 Somador VF 3 1 Multiplicador (VF e int.) 6 1 Divisor (VF e int.) 24 25 JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 13/18 13.1. Consequência da definição de latência: A maioria das instruções consome os seus operandos no início do ciclo EX. Para estas instruções, a latência é igual ao número de andares (contados após o primeiro andar de EX) necessários para produzir o resultado pretendido (ver tabela do acetato). 13.2. A principal excepção à observação anterior é constituída pelas operações de store, que consome um dos seus operandos um ciclo mais tarde (a latência vem reduzida de um ciclo para o operando que representa o valor a guardar, mas não para o operando que especifica o endereço de memória). 13.3. Para obter uma frequência de operação maior (i.e., reduzir o ciclo de relógio) é preciso diminuir a quantidade de processamento feito em cada ciclo, o que implica que a execução requer mais ciclos, o que por sua vez aumenta a latência. Conclusão: frequência de relógio maior implica maior latência (para uma mesma tecnologia de implementação). 13.4. Os acessos a memória usam a unidade inteira para cálculo do endereço. Acessos a memória demoram sempre o mesmo tempo, seja para dados inteiros ou de vírgula flutuante. 13

Tratamento de instruções multiciclo Unidades com pipeline JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 14/18 14.1. Esta organização (que corresponde à tabela do acetato anterior) suporta múltiplas instruções em execução simultaneamente. A unidade de divisão não é pipelined (a unidade inteira também não, mas esta apenas necessita de um ciclo). 14.2. Na ausência de saltos, esta organização permite manter o débito de uma instrução por ciclo, desde que não existam conflitos de dados ou estruturais, nem sejam usadas instruções de divisão. Qualquer uma destas situação faz com que o CPI desça abaixo de 1 (o valor máximo). 14.3. A principal implicação da introdução de unidades de execução de latência diferente é que agora podem surgir conflitos RAW que não podem ser resolvidos por forwarding (como anteriormente). Também podem surgir conflitos WAW (que não surgiam antes). 14.4. Podem surgir igualmente outros tipos de conflitos estruturais. Em particular, instruções de divisão podem encontrar a unidade de divisão já em uso. 14

Conflitos RAW Instruções independentes: Tratamento de instruções multiciclo A instrução S.D protela um ciclo extra para que a sua fase MEM não entre em conflito com a instrução ADD.D. Este conflito é estrutural. Poderia ser resolvido com uma unidade adicional para cálculo de endereços (um somador). JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 15/18 15.1. A tabela superior mostra a operação da nova organização para instruções independentes (logo, não surgem conflitos do tipo RAW). As etiquetas em itálico indicam andares em que são consomidos operandos, enquanto as etiquetas a negrito indicam os andares que produzem dados. 15.2. Pode ocorrer um conflito estrutural no acesso ao banco de registos para escrita (fases MEM e WB), já que mais que uma instrução pode terminar a execução no mesmo ciclo (i.e., ficar pronta a passar para o estado MEM). Por exemplo, na tabela inferior a última instrução protela um ciclo adicional (ciclo 16) para não escrever o seu resultado ao mesmo tempo que a instrução ADD.D. 15.3. A tabela inferior mostra a ocorrência de protelamentos devido à diferença de latência entre as unidades de execução. Por exemplo, a intrução de soma tem de esperar 6 ciclos pelo resultado da multiplicação. Este atraso não pode ser resolvido por forwarding, já que o resultado pretendido apenas está calculado no ciclo 12. 15

Conflitos WAW Tratamento de instruções multiciclo No ciclo 11, três instruções tentam escrever nos registos. Este não é o pior caso. Não existe nenhum conflito estrutural irresolúvel no ciclo 10, porque apenas a instrução L.D usa de facto a memória. JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 16/18 16.1. A tabela não mostra directamente um conflito WAW. 16.2. A tabela ilustra uma situação hipotética (i.e., que não ocorrerá com detecção de conflitos) em que três instruções passariam simultaneamente ao estado MEM. Na implementação estudada, trata-se de um conflito estrutural. Contudo, este conflito não é intrinsecamente irresolúvel, já que apenas uma instrução acede de facto a memória. Contudo, a sua resolução dependeria da possibilidade de escrever mais que um valor no banco de registos simultaneamente. Tal seria de facto possível com uma implementação mais sofisticada do banco de registos, o que não se justifica neste caso, já que o número de conflitos WAW é previsivelmente baixo. 16.3. Caso a instrução L.D fosse iniciada um ciclo mais cedo, existiria de facto um conflito WAW na escrita de F2. 16

Tratamento de instruções multiciclo Detecção de conflitos Assumindo que a detecção de conflitos é feita no andar ID, três tipos de verificações são necessários. Conflito estrutural Esperar até a unidade funcional pretendida estar livre (para divisões) e garantir o acesso ao porto de escrita do banco de registos. Conflito RAW Esperar até que os registos-fonte não estejam etiquetados como destinos de um cálculo pendente que não esteja terminado quando o seu resultado for necessário. Estas verificações dependem do tipo de operandos envolvido. Conflito WAW Determinar se alguma instrução em A1,..., A4, D, M1,..., M7 tem o mesmo destino que a instrução em ID (se esta usar o unidade inteira). Se esse for o caso, protelar. JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 17/18 17.1. Nos exemplos usados, assumir sempre que a deteção de conflitos é efectuadao no andar ID. Ou seja: o sistema de deteção de conflitos deve detectar conflitos entre a instrução em ID e qualquer instrução já em execução, i.e., a ser processada num andar posterior (mais à direita nos diagramas). 17.2. As condições indicadas acima não são necessárias, mas são suficientes e relativamente simples. 17.3. Os conflitos WAW serão raros na prática. 17

Tratamento de instruções multiciclo Desempenho de vírgula flutuante JCF, 2005 AAC (FEUP/LEIC) Implementação de pipelines 18/18 18.1. A figura mostra o número médio de ciclos de protelamento atribuídos a operações de vírgula flutuante (i.e., ciclos de protelamento introduzidos quando uma instrução de VF estava no andar de ID). A figura inclui dados para uma unidade adicional (comparação), de complexidade similar à unidade de soma. 18.2. Por exemplo, o número médio de ciclos de protelamento para somas é de 1.7 ciclos (cerca de 56% da sua latência de 3 ciclos). 18.3. Como é de esperar, o número de ciclos de protelamento provocados por uma instrução é directamente proporcional à sua latência. (Já que esta determina quantas instruções já emitidas podem estar em conflito com uma dada instrução.) 18.4. Apenas os resultados sobre os conflitos estruturais (divisão) dependem da taxa de ocorrência das instruções. Os outros dependem apenas da latência das operações e das dependências de dados. 18.5. Os conflitos estruturais de divisão são raros, já que a taxa de ocorrência deste tipo de instruções é baixa. 18