Execução concorrente de instruções: Pipelines
João Canas Ferreira
Novembro de 2006
Contém figuras de “Computer Architecture: A Quantitative Approach”, J. Hennessey & D. Patterson, 3ª. ed., MKP
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 1/40
Assuntos
1 Execução concorrente de instruçõesConceito e finalidadeDependências entre instruções
2 Fundamentos da operação de pipelinesO que são pipelinesPipeline de 5 andares
3 Resolução de conflitosConflitos estruturaisConflitos de dadosConflitos de controlo
4 Tratamento de instruções complexas
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 2/40
Execução concorrente de instruções Conceito e finalidade
O modelo sequencial de computação
No modelo sequencial de computação, a execução de um programaprocessa-se do seguinte modo:
1. O CPU obtém uma instrução de memória.
2. A operação é efectuada.
3. É determinado o endereço da próxima instrução. Repetir a partir de 1.
Os efeitos observáveis da execução incluem a alteração de registos ouposições de memória, a alteração de flags, geração de excepções, etc.
Numa implementação que corresponda directamente ao modelo apenas sepode aumentar o desempenho tornando a execução da operação mais rápida.
Para ultrapassar esse limite é preciso executar instruções parcial outotalmente em simultâneo.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 3/40
Notas:
3.1. O modelo sequencial permite atribuir de uma forma simples um “significadooperacional” a um programa. Tem a grande vantagem e ser relativamente próximode uma possível implementação em hardware (com a unidade de controloimplementada por uma máquina de estados) e do modelo formal de máquina deTuring. Tem a desvantagem de impor uma ordem na execução de instruções cujanecessidade não decorre logicamente do algoritmo a implementar.
3.2. No passo 3, a determinação da próxima instrução a executar é feita geralmente deforma implícita: trata-se da instrução que reside na posição a seguir à dainstrução executada antes. Apenas as instruções de controlo de fluxo indicamexplicitamente a origem da próxima instrução (o “alvo” do salto).
3.3. São concebíveis conjuntos de instruções em que cada instrução especifique oendereço da seguinte (i.e., cada instrução é uma instrução de controlo de fluxo).Muitos esquemas de microcódigo usam uma arquitectura desse tipo.
3
Execução concorrente de instruções Conceito e finalidade
Execução concorrenteConcorrência parcial: A execução de uma instrução é dividida em fases. Nummesmo instante, diferentes instruções podem estar em diferentes fases dasua execução.Problema: Dado um programa, identificar que instruções podem serexecutadas concorrentemente, sem alterar os efeitos do programa.Efeitos do programa: Sequência de alterações visíveis do estado da memóriae do processador.Existem muitas técnicas para detectar e aproveitar o paralelismo entreinstruções (i.e. a capacidade de executar instruções concorrentemente). Essatécnicas caem em duas categorias gerais:
1. técnicas dinâmicas — o processador detecta o paralelismo durante aexecução do programa (Pentium III e 4, PowerPC G4);
2. técnicas estáticas — o paralelismo é detectado antes da execução pelocompilador (IA-64, sistemas embutidos).
Não se trata de uma divisão estanque; algumas técnicas podem seradoptadas nos dois domínios.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 4/40
Notas:
4.1. As técnicas estáticas obrigam à recompilação dos programas para cada modelodiferente do compilador, mesmo que o conjunto de instrução não mude. Quando acompatibilidade binária é importante, apenas as técnicas dinâmicas pode serusadas. Excepção: Pode ser possível produzir um “tradutor binário” que converteum programa em binário de um modelo para o outro, refazendo as optimizaçõesnecessárias. Consultar, por exemplo,http://www.research.compaq.com/wrl/projects/om/om.html ou http://www.experimentalstuff.com/Technologies/Walkabout/index.html.
4.2. A utilização de técnicas dinâmicas não exclui o emprego das outras. Considere-seo caso dos processadores da Intel que implementam a arquitectura IA-32. Acompatibilidade binária entre modelos é garantida, mas a recompilação de umprograma pode permitir a geração de código mais eficiente para um modeloparticular (mas igualmente correcto para qualquer modelo).
4
Execução concorrente de instruções Conceito e finalidade
Aspectos básicos
Û O quantidade de paralelismo existente num bloco básico é reduzida:Blocos básicos têm tipicamente entre 5 e 7 instruções em média (MIPS).
Û Paralelismo simples de identificar: loop-level parallelism
Paralelismo entre iterações de um ciclo.
for (i=1; i <= 1000; i=i+1)x[i] = x[i] + y[i];
Todas as iterações do ciclo podem ser executadas concorrentemente.Cada iteração apresenta reduzido paralelismo.
Duas questões importantes:Û Que propriedades dos programas e dos processadores limitam a quantidadede paralelismo que pode ser aproveitado?
Û O mapeamento da estrutura do programa na estrutura do processador écrítico.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 5/40
Notas:
5.1. Definição de bloco básico: bloco sequencial de instruções sem saltos no seuinterior e com apenas um ponto de entrada e um ponto de saída.
5.2. Para ser efectivo, o aproveitamento da concorrência entre instruções deveultrapassar o âmbito do bloco básico. Por outras palavras, a identificação deinstruções que podem ser total ou parcialmente executadas simultaneamente nãodeve ser limitada pelos saltos condicionais (nem incondicionais).
5.3. Para identificar instruções potencialmente concorrentes é preciso determinar asrelações lógicas entre todas as instruções. A relação lógica de precedência entreinstruções deve ser sempre preservada para garantir a execução correcta dosprogramas.
5.4. A forma como a execução de instruções é organizada internamente tem um grandeimpacto sobre a eficiência global. Inversamente, a forma como o programa éadaptado à organização pode aumentar ou diminuir drasticamente a capacidadedo hardware para detectar instruções potencialmente concorrentes, e,consequentemente, pode ter uma grande influência sobre o desempenho.
5
Execução concorrente de instruções Dependências entre instruções
O conceito de dependência entre instruções
Duas instruções independentes podem ser executadas em simultâneosem conflitos, desde que existam recursos suficientes.Quando existe uma relação de dependência entre duas instruções, estesdevem ser executadas em série (talvez com sobreposição parcial).
dependências de dados:dependências verdadeiras e dependências de nomes.
dependências de controlo
Um conflito ocorre sempre que existe uma dependência entre instruçõessuficientemente próximas para que a sobreposição ou re-ordenaçãomodifique a ordem de acesso ao operando envolvido na dependência.
A satisfação das dependências garante a manutenção da ordem do programa ,i.e., garante que as alterações de estado (observáveis) são as especificadaspelo modelo sequencial de execução.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 6/40
Notas:
6.1. O conceito de dependência pretende expressar formalmente a relação deprecedência entre duas instruções.
6.2. Instruções dependentes não podem executar de forma totalmente concorrentecom as instruções de que dependem. Isto não implica que uma execuçãoparcialmente concorrente seja impossível, como no caso de pipelines.
6.3. Um conflito ocorre sempre que a execução (parcialmente) concorrente deinstruções leva à violação de uma dependência. Se um conflito ocorre ou não(para uma dada dependência) depende da organização interna do CPU. De ummodo geral, pretende-se minimizar a ocorrência de conflitos.
6.4. Um conflito pode ser sempre evitado se a execução de instruções retomar o modode funcionamento completamente sequencial. Ou seja, quando ocorre um conflitoé sempre possível resolvê-lo atrasando a execução das instruções dependentes.Assim garante-se para cada instrução que aquelas de que depende já foramcertamente executadas.
6
Execução concorrente de instruções Dependências entre instruções
Dependências de dadosA instrução j depende da instrução i (j is data-dependent on i) se ocorreruma das duas situações seguintes:
1. a instrução i produz um resultado que pode ser usado pela instrução j;
2. a instrução j depende da instrução k, que, por sua vez, depende dainstrução i.
A cadeia de dependências pode englobar o programa completo.
Exemplo com 3 dependências:
Loop:L.D F0 , 0(R1) ; F0 <== elemento do vectorDADD F4 , F0 , F2 ; somar escalar em F2S.D F4 , 0(R1) ; guardar o resultadoDADDUI R1 , R1 , #-8 ; decr. apontador 8 bytesBNE R1 , R2, Loop ; saltar se R1 != R2
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 7/40
Notas:
7.1. Num processador com capacidade para executar concorrentemente váriasinstruções é geralmente necessário detectar um conflito para o evitar. A detecçãoé feita por um circuito designado por pipeline interlock.
7.2. Alguns processadores não têm circuitos detectores de conflitos. Nesse caso, é ocompilador que fica encarregado de gerar código sem conflitos, se necessáriointroduzindo instruções nop (no operation) no programa. A programação manualem assembly é naturalmente mais complicada nestes casos.
7
Execução concorrente de instruções Dependências entre instruções
Características das dependências de dados
A presença de uma dependência de dados numa sequência de instruçõesreflecte uma dependência no programa original: dependências sãopropriedades dos programas.
O facto de uma dependência resultar na detecção de um conflito e/oude causar um protelamento são propriedades da organização da pipeline.
Uma dependência:1. indica a possibilidade de existência de um conflito;2. determina a ordem de cálculo;3. estabelece um limite superior para a quantidade de paralelismo que
pode ser aproveitado.
Fluxo de dados: (i) por registos [e flags]; (ii) por memória.
Soluções:1. manter a dependência, mas evitar o conflito;2. eliminar a dependência por transformação do código.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 8/40
Notas:
8.1. Dependências causadas por transferências de informação via memória podem serdifíceis de detectar. Por exemplo, as instruções LD R1, 100(R4) eLD R1, 64(R6) podem designar a mesma posição de memória (por exemplo, seR4=0 e R6=36). Neste caso, diz-se que os endereços efectivos são iguais.
8.2. O endereço efectivo de memória usapo por uma instrução load/store também podevariar durante a execução do programa: basta que o conteúdo do registoassociado mude. Portanto, para efeitos de detecção de conflitos, não bastaanalisar os códigos das instruções, é necessário ter em conta também o estadodos registos.
8.3. Quando não é possível garantir a ausência de conflitos, é necessário assumir queeles podem existir, caso contrário, não seria possível garantir a execução correctado programa.
8
Execução concorrente de instruções Dependências entre instruções
Dependências de nome
Uma dependência de nome ocorre quando duas instruções usam o mesmoregisto ou posição de memória (um «nome»), mas sem que haja um fluxo dedados associado com esse nome. Existem dois tipos de dependências denome envolvendo uma instrução i que precede a instrução j num programa:
Uma antidependência entre i e j ocorre quando a instrução j escreve numregisto ou posição de memória lido pela instrução i.
Uma dependência de saída ocorre quando ambas as instruções escrevemno mesmo registo ou posição de memória. A ordem das instruções deveser preservada para garantir que o valor final corresponde a j.
Como não se trata de verdadeiras dependências, as instruções i e j podem serexecutadas simultaneamente (ou por ordem diferente) desde que o «nome»usado seja mudado. Esta operação é mais fácil de executar (pelo compiladorou processador) para registos: register renaming.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 9/40
Notas:
9.1. Dependências de nome ocorrem, por exemplo, quando um registo (associado auma variável) é reutilizado para guardar o valor de outra variável.
9.2. Em geral, dependências de nome envolvendo registos podem ser evitadas seexistirem registos temporários que permitam guardar todos os valores. Todas asinstruções que referem o «nome» original devem ser modificadas dinamicamentepara usarem os dados dos registos temporários apropriados.
9
Execução concorrente de instruções Dependências entre instruções
Conflitos de dados
Conflitos de dados possíveis entre duas instruções i e j (que ocorrem noprograma por esta ordem):
RAW (read after write) — j tenta ler uma fonte antes que i aí coloqueum valor. Corresponde a uma verdadeira dependência de dados.
WAW (write after write) — j tenta escrever num local antes de i.Corresponde a uma dependência de saída. Ocorre em pipelines queefectuam escritas em mais que um andar ou que permitem queinstruções continuem mesmo quando uma instrução anterior é protelada.
WAR (write after read) — j tenta escrever num local antes de este serlido por i. Corresponde a uma antidependência. (Não ocorre na maioriadas pipelines com emissão por ordem de instruções.)
RAR (read after read) não constitui um conflito.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 10/40
Notas:
10.1. O nome dos conflitos é dado de acordo com a ordem do programa que deve serpreservada.
10.2. Conflitos do tipo WAR tendem a surgir apenas em processadores que emiteminstruções fora de ordem (emitir uma instrução = iniciar a sua execução) ou quesuportam conjuntos heterogéneos de instruções em que algumas instruçõesalteram dados no início da execução e outras lêem dados nas fases finais daexecução. Muitos processadores nunca podem ter conflitos deste tipo.
10.3. Conflitos do tipo WAW também não correm nas organizações concorrentes maissimples. Por exemplo, a pipeline básica analisada mais à frente não tem destesconflitos.
10
Execução concorrente de instruções Dependências entre instruções
Dependências de controlo
Uma dependência de controlo determina a ordem de uma instrução i face auma instrução de salto condicional. Todas as instruções de um programa,excepto as do primeiro bloco básico, dependem de algum conjunto de saltoscondicionais.Dependências de controlo impõem duas restrições:
Uma instrução dependente de um salto não pode ser colocada antes do salto, porque jánão seria controlada pelo instrução de salto condicional.
Uma instrução que não está dependente de um salto não pode ser movida para depoisde um salto, porque passaria a ser controlada por esse salto.
No caso mais simples, dependências de controlo são preservadas porque1. as instruções são executadas pela ordem em que surgem no programa;2. o controlo de conflitos garante que uma instrução não é executada antes de se conhecer o
destino do salto.
Respeitar as dependências de controlo não é um fim em si; o que se quergarantir é o fluxo de dados e o comportamento face a excepções.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 11/40
Notas:
11.1. Exemplo de uma dependência de controlo simples:
if cond1 {instr1;}if cond2 {instr2;}
A instrução instr1 apresenta uma dependência de controlo em relação a cond1 einstr2 tem uma dependência de controlo de cond2, mas não de cond1.
11
Execução concorrente de instruções Dependências entre instruções
Comportamento correcto na presença de excepçõesÛ Comportamento correcto na presença de excepções significa que qualqueralteração da ordem de execução das instruções não modifica a sequência emque as excepção são levantadas no programa.Û Frequentemente usa-se uma condição mais relaxada: a nova ordem nãodeve causar a ocorrência de novas excepções no programa.
DADDU R2 , R3, R4BEQZ R2 , L1 ; saltar para L1 se R2=0LW R1, 0( R2 )...
L1: ...
Existe uma dependência de dados envolvendo R2.É possível trocar as duas últimas instruções? Não existe nenhuma dedependência de dados entre elas. Mas a instrução LW pode causar umaexcepção no acesso a memória.Uma técnica designada por especulação permite ultrapassar este problema.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 12/40
Notas:
12.1. A dependência de dados envolvendo R2 impõe que a primeira instrução sejaexecutada em primeiro lugar, mas não impõe uma ordem relativa entre as outrasduas; essa ordem é imposta pela dependência de controlo de LW em relação aBEQZ. Não existe uma dependência de dados entre estas duas instruções.
12.2. Como é que a instrução LW pode causar uma excepção? Por exemplo, acedendo auma zona de memória que não pertença ao seu processo. Assim, poderia ocorreruma excepção que não surgiria se a ordem das instruções não fosse alterada.
12.3. As técnicas de especulação devem ser capazes de anular o lançamento daexcepção caso o salto condicional seja efectivamente tomado.
12.4. Para que a troca de posição das instruções seja válida é preciso que R1 não sejausado no código a seguir a R1 (ou, mais precisamente, que exista uma escrita emR1 antes de qualquer leitura desse registo).
12
Execução concorrente de instruções Dependências entre instruções
Preservação do fluxo de dados
Fluxo de dados: fluxo de valores entre as instruções que os produzem e asque os consomem. As instruções de salto condicional fazem com que o fluxoseja dinâmico, i.e., o valor de um dado registo/posição de memória podeprovir de diferentes origens.
DADDU R1, R2, R3BEQZ R4, LDSUBU R1, R5, R6
L: ...OR R7, R1, R8
DSUBU não pode ser colocada antes do salto por alterar o fluxo de dados deOR. O valor de R1 depende do salto BEQZ.Por vezes, é possível determinar que o desrespeito de uma dependência decontrolo não afecta o fluxo ou a geração de excepções. Esta tarefa égeralmente efectuada pelos compiladores.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 13/40
Notas:
13.1. Exemplo de uma situação em que uma dependência de controlo pode serdesrespeitada:
DADDU R1, R2, R3BEQZ R12, skipnextDSUBU R4, R5, R6 ; pode ser "adiantada"DADDU R5, R4, R9
skipnext: OR R7, R8, R9 ; R4 não é usado mais
Suponhamos que o registo R4 não era usado no bloco de código colocado após aetiqueta skipnext. Então passar a instrução DSUBU para antes do salto nãoalteraria os efeitos do programa (o item de dados em R4 está “morto”).
13.2. Determinar se os dados guardados num registo estão “vivos” (vão ser aindausados) ou “mortos” (não são mais usados) é uma das tarefas que geralmenteincumbe ao compilador (para saber quando pode reutilizar registos).
13
Fundamentos da operação de pipelines O que são pipelines
Pipelines
Pipelining é uma técnica de implementação em que a execução demúltiplas instruções é feita concorrentemente.Analogia: Linha de montagem.
A B C D
andar 1 andar 2 andar 3 andar 4
Cada andar trabalha concorrentementecom os outros, embora sobre uma “parte”diferente da instrução.
ciclo 1 2 3 4 5 6 · · ·
inst 1 A B C Dinst 2 A B C Dinst 3 A B C Dinst 4 A B C · · ·inst 5 A B · · ·inst 6 A · · ·
débito: nº de instruções que são completadas (i.e. abando-nam a pipeline) por unidade de tempo.ciclo do processador: tempo necessário para “mover” a ins-trução através de 1 andar.O ciclo do processador é determinado pelo andar mais lento.Ideal: Equilibrar o tempo de todos os andares.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 14/40
Notas:
14.1. Em cada instante podem estar até 4 instruções em execução (neste exemplo); emcada ciclo (a partir do 4) é terminada uma instrução.
14.2. Como os andares estão interligados, é necessário que todos estejam prontos aomesmo tempo: esse tempo constitui o período do ciclo de relógio do processador.
14.3. Porque os andares devem prosseguir todos ao mesmo tempo, a duração do ciclo édeterminado pelo tempo necessário para que o andar mais lento execute a suatarefa.
14.4. Se o tempo de processamento de todos os andares for idêntico, então o tempomédio por operação é (em condições ideais)
tempo por instrução do CPU sem pipelinenúmero de andares
14.5. Pipelining é tipicamente invisível para o programador (em CPUS com interlocks).
14
Fundamentos da operação de pipelines Pipeline de 5 andares
Um conjunto de instruções RISC básicoPara efeitos de análise das questões que surgem em pipelines, usaremos umsubconjunto do MIPS64 (ver tb. a página WWW da disciplina).Û Todas as operações sobre dados aplicam-se a registos de 64 bits e
modificam todo o registo;Û Apenas instruções load/store afectam a memória; podem operar sobre
parte de um registo (por exemplo, afectando 32 bits de 64);Û As instruções têm todas o mesmo comprimento e os formatos diferentes
são poucos.Û Instruções da ALU: Tomam dois registos, ou um registo e um valor
imediato de 16 bits, como operandos e guardam o resultado num terceiroregisto.
Û Instruções load/store: Tomam um registo (a base) e um deslocamento(de 16 bits) como operandos. Um segundo registo é o destino/origem datransferência.
Û Saltos condicionais e incondicionais: Os saltos condicionais baseiam-seno resultado da comparação entre dois registos.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 15/40
Notas:
15.1. As instruções indicadas constituem um subconjunto de MIPS64. Esta arquitecturade conjunto de instruções será analisada com mais pormenor num trabalhoprático.
15.2. Os saltos condicionais são relativos e têm um deslocamento de 16 bits (sãointerpretados como números com sinal).
15.3. Todas as instruções têm todas o mesmo tamanho: 32 bits.
15
Fundamentos da operação de pipelines Pipeline de 5 andares
Implementação multi-ciclo sem pipelining
1. IF (instruction fetch): Usa o endereço contido no contador de programa(PC) para ir buscar a instrução actual a memória. Actualiza PC: PC←PC+4.
2. ID (instruction decode/register fetch): Descodifica a instrução e lê osregistos fonte. Compara registos. Efectua extensão do deslocamento.Calcula endereço de destino e actualiza PC (se saltar).
3. EX (execution/effective address): Uma de 3 operações: (i) calculaendereço efectivo para acesso a memória; (ii) a ALU executa a operaçãosobre os registos; (iii) a ALU executa operação sobre registo e valorimediato.
4. MEM (memory access): Para instruções load/store: transferir dados.5. WB (write-back): Instrução de ALU ou load: guardar dados em registo.Saltos: 2 ciclos, store: 4 ciclos, outras: 5 ciclos. Globalmente, CPI=4.54 se assumirmos
frequências de 12%, 10%, e 78%, respectivamente.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 16/40
Notas:
16.1. Este esquema apresenta uma divisão possível das etapas pelas quais passa aexecução de cada instrução. Trata-se de um passo preliminar, com vista asimplificar a descrição do funcionamento da pipeline básica.
16.2. Nem todas as instruções necessitam de todas as etapas. As instruções de saltoterminam na 2ª etapa. As instruções de escrita em memória terminam na 4ªetapa.
16.3. As instruções de ALU não fazem nada na etapa 4, terminando na etapa 5. Seriapossível antecipar a última tarefa da etapa 5 para a etapa 5. Contudo, isso já nãoserá possível na implementação em pipeline, pelo que também não é feito aqui.
16
Fundamentos da operação de pipelines Pipeline de 5 andares
Pipeline de cinco andares
O processamento pode ser implementado com pipeline de 5 andares (aliás adivisão de tarefas da transparência anterior já foi feita a pensar nisso).
Ciclo de processador
Instrução 1 2 3 4 5 6 7 8 9
i IF ID EX MEM WBi + 1 IF ID EX MEM WBi + 2 IF ID EX MEM WBi + 3 IF ID EX MEM WBi + 4 IF ID EX MEM WB
Restrição: Não é possível usar os mesmos recursos em duas tarefas diferentesno mesmo ciclo! Memórias cache separadas para dados e instruções evitamconflitos entre IF e MEM.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 17/40
Notas:
17.1. A fase IF tem um acesso implícito a memória, pelo que poderia interferir cominstruções na fase MEM. Para evitar um conflito, vamos assumir que memória deinstruções e memória de dados são diferentes. Embora tal não correspondaestritamente à realidade, a utilização de caches separadas para dados e instruçõesfaz com que seja uma aproximação razoável.
17.2. Para já assumimos que o acesso a memória pode ser feito apenas num ciclo derelógio do processador. Trata-se de uma suposição menos realista que a anterior.Veremos mais tarde como remover esta restrição e de que maneira é afectado odesempenho global.
17.3. As instruções de salto só usam dois andares: IF e ID.
17.4. As instruções de escrita em memória (store) não têm WB.
17.5. Estamos a assumir que as operações executadas em EX apenas necessitam de umciclo de relógio. Isso não se aplica a operações como a divisão nem a operaçõescom vírgula flutuante.
17
Fundamentos da operação de pipelines Pipeline de 5 andares
Múltiplos percursos de dados desfasados no tempo
O banco de registos tem de suportar 2 leituras e 1 escrita por ciclo.
Problema: Salto condicional só modifica PC no andar ID.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 18/40
Notas:
18.1. Implicitamente estamos a assumir que existem recursos para executarconcorrentemente as várias operações. Por exemplo, o cálculo do novo valor dePC no caso de um salto não pode ser feito pela ALU (que estará ocupada com oprocessamento de outra instrução).
18.2. O banco de registos pode tornar-se facilmente num factor de contenção. Vamosassumir que todas as leituras são feitas no fim do ciclo de relógio (por instruçõesna fase ID) e que a escrita é feita no início do ciclo de relógio (pela instrução quepassar para WB).
período de relógio
leituraescrita
18.3. Como estamos assumir uma implementação relativamente agressiva dos saltoscondicionais, supomos que o PC é modificado no segundo ciclo da instrução (ID).Mesmo assim, os saltos (condicionais ou incondicionais) vão introduzir umconflito de controlo.
18
Fundamentos da operação de pipelines Pipeline de 5 andares
Inserção de registos entre andares
Evitam a interferência entre andares e preservam valores intermédios.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 19/40
Notas:
19.1. Sem cuidados especiais, a actividade “lógica” não pode ser limitada a um certoandar (i.e., os efeitos de qualquer mudança propagar-se-iam mais ou menosrapidamente por todo o circuito). Para evitar essa interferência, todos os ossinais que saem de um andar são “registados”, ou seja, os seus valores sãoguardados num elemento de memória (registo) cujo conteúdo apenas é alteradono flanco ascendente do relógio.
19.2. Muitos dos registo já seriam necessários numa implementação multi-ciclo parapreservar valores entre os diferentes ciclos.
19.3. Os registos também serão aproveitados para evitar alguns conflitos provocadospor dependências de dados (cf. forwarding).
19
Fundamentos da operação de pipelines Pipeline de 5 andares
Desempenho de pipelines (1ª abordagem)Pipeline idealmente equilibrada: tinst_p = tinst
Nandares
Na prática, o tempo de execução de cada instrução aumentaligeiramente devido a overhead de controlo.
O programa é mais rápido embora nenhuma instrução seja mais rápida!
Speedup: Sp = tinst/tinst_p
Na prática, certa instruções podem necessitar de ciclos de protelamentoem algumas circunstâncias. Seja nprot o número médio de ciclos deprotelamento por instrução. Então:
CPIp = CPIideal + nprot = 1 + nprot
Assumindo que a frequência de relógio é a mesma nos dois casos:
Sp =CPI
1 + nprot
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 20/40
Notas:
20.1. A melhoria de desempenho proporcionada por pipelining é directamentedependente do número médio de ciclos de protelamento. Torna-se, portanto,imperioso reduzir nprot ao mínimo. Como os saltos são, em muitas organizações deCPU, a principal fonte de ciclos de protelamento, torna-se vital reduzir a suafrequência ou o seu impacto.
20.2. A expressão final para Sp assume que a frequência de relógio de umaimplementação pipelined é igual à de uma implementação multi-ciclo. Na prática,será ligeiramente maior (≈ 10%). O número de instruções executadas énaturalmente o mesmo.
20
Resolução de conflitos
Alguns problemas na utilização de pipelines
Existem situações (hazards) em que uma instrução não pode ser executadadurante o ciclo apropriado. Existem três tipos de conflitos:
estruturais É um conflito de recursos: o hardware não suporta a execuçãoconcorrente de todas as combinações possíveis de tarefas;
de dados Este conflito surge quando uma instrução depende dosresultados de uma instrução anterior de uma forma que afectao resultado obtido pela linha de processamento.
de controlo este conflito resulta de saltos condicionais ou de outrasinstruções que alteram o PC.
Conflitos reduzem o desempenho ideal da pipeline.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 21/40
Notas:
21.1. Conflitos de dados e de controlo são devidos, respectivamente, a dependências dedados e de controlo. Conflitos estruturais resultam da inexistência de recursossuficientes para executar algumas operações concorrentemente.
21
Resolução de conflitos
Protelamento de operaçõesConflitos podem obrigar a protelar (stall) o processamento de instruções.Habitualmente quando uma instrução é protelada:
1. todas as instruções emitidas posteriormente também são proteladas;
2. todas as instruções emitidas anteriormente devem prosseguir (para“limpar” a situação de conflito).
..Resolução.de.conflitos Consequência: durante o protelamento não sãoprocessadas novas instruções.
Pode não ser economicamente proveitoso eliminar conflitos que ocorramraramente, porque os protelamentos associados são raros (número médio deciclos de protelamento causados por esses conflitos é baixo).
Nota: Existem esquemas em que as instruções emitidas posteriormentepodem “passar à frente” da instrução protelada (se não violarem nenhumadependência).
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 22/40
Notas:
22.1. O protelamento de operação é a solução “universal”. Contudo, é sempre precisoimplementar circuitos de detecção de conflitos (pipeline interlocks).
22
Resolução de conflitos Conflitos estruturais
Conflitos estruturais
A execução concorrente de instruções em pipeline pode requerer que asunidades funcionais sejam também pipelined e que outros recursos sejamduplicados para acomodar todas as combinações possíveis de instruções. Oprocessamento pode exibir conflitos estruturais quando tal não acontece.
Exemplo: processador com uma memória cache partilhada paradados/instruções (memória comum de dados e instruções).
Ciclo de processador
Instrução 1 2 3 4 5 6 7 8 9 10
load IF ID EX MEM WBi + 1 IF ID EX MEM WBi + 2 IF ID EX MEM WBi + 3 stall IF ID EX MEM WBi + 4 IF ID EX MEM WBi + 5 IF ID EX MEMi + 6 IF ID EX
Supõe-se que as instruções i + 1, i + 2, etc. não acedem a memória.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 23/40
Notas:
23.1. Esta situação não ocorre na organização de base que estamos a analisar, porqueassumimos a existência de caches separadas de dados e instruções.
23
Resolução de conflitos Conflitos estruturais
Ilustração de um conflito estrutural
Figura ilustra o confito estrutural que ocorre se o processador não protelar ainstrução 3.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 24/40
Notas:
24.1. Notar que não existe nenhum conflito estrutural associado ao banco de registos.Por exemplo, no ciclo 5, ocorrem uma escrita no banco de registos (associado àinstrução load) e duas leituras (associadas à instrução 3). Estas operaçõesocorrem em partes diferentes do ciclo, conforme indicado graficamente pelotracejado: a escrita acontece no início do ciclo, as leituras no fim.
24
Resolução de conflitos Conflitos de dados
Conflitos de dados
Um grande efeito de pipelining é modificar a temporização relativa dasoperações, o que pode introduzir conflitos.
Conflitos de dados ocorrem quando a ordem de leitura/escrita de operandos émodificada (por referência à versão sem pipelining).
Exemplo:
DADD R1, R2, R3DSUB R4, R1, R5 ; ADD altera R1 em WB, mas DSUB requer valor em ID
AND R6, R1, R7 ; R1 correcto fim do ciclo 5; AND lê registos no 4
OR R8, R1, R9 ; OR não tem conflitos; leituras na 2ª parte do ciclo
XOR R10, R1, R11 ; não tem conflitos
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 25/40
Notas:
25.1. O registos R1 é alterado pela primeira instrução. Como o resultado da instruçãosó atinge os registos no quinto ciclo, a instrução DSUB produz um conflito aoquerer usar o novo valor de R1 no quarto ciclo (a sua etapa EX), já que issoimplica a leitura dos registos no fim do ciclo anterior (o ciclo 3).
25.2. A instrução AND também produz um conflito: precisa do novo valor logo no iníciodo quinto ciclo (a sua etapa EX), e portanto, a leitura dos registos foi feita nociclo anterior, quando o banco de registos ainda tinha o valor antigo de R1.
25.3. A instrução OR já não provoca conflito.
25.4. Este tipo de conflito entre instruções da ALU é muito frequente e introduz 2ciclos de protelamento, o que é muito. Consequentemente, este tipo de conflitodeve necessariamente ser resolvido.
25.5. Notar que o conflito surge porque a alteração do banco de registos é efectuada 2ciclos depois do cálculo do resultado. O resultado propriamente dito já foicalculado (no fim do ciclo 3).
25
Resolução de conflitos Conflitos de dados
Forwarding pode resolver conflitos de dados
O resultado da ALU é realimentado para a sua entrada. O banco de registos(leitura e escrita em partes diferentes do ciclo) também serve para fazerforwarding. A sequência analisada executa sem protelamento.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 26/40
Notas:
26.1. O novo valor de R1 é calculado antes de ser necessário para as operaçõesseguintes. Apenas o banco de registos não é actualizado suficientementedepressa.
26.2. Para resolver o conflito, basta “agulhar” o futuro valor de R1 do registotemporário onde se encontra para a entrada do andar que necessita do seu valor.Locais de origem e destino dos dados estão indicados a tracejado nafigura.Sempre que o destino estiver à frente da origem, deve proceder-se aoagulhamento necessário.
26.3. Para além dos circuitos de agulhamento (basicamente multiplexadores), o CPUdeve dispor também de circuitos de detecção dos conflitos.
26.4. A utilização de forwarding é indispensável para um bom desempenho.
26
Resolução de conflitos Conflitos de dados
Protelamento pode ser inevitável
LD R1, 0(R2) ; dados prontos apenas no fim do ciclo 4DSUB R4, R1, R5 ; necessita de dados no início de 4AND R6, R1, R7OR R8, R1, R9
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 27/40
Notas:
27.1. O esquema de forwarding não resolve todos os problemas. Por exemplo, o conflitoque ocorre quando uma instrução usa um valor lido de memória pela instruçãoimediatamente precedente não pode ser resolvido desta maneira.
27.2. De facto, o valor ainda não está no CPU no instante em que se pretenderiautilizá-lo. Isso é indicado pelo segmento a tracejado em que o destino (o “lugar”onde o valor é necessário para o restante processamento) está “atrás” da origem.
27
Resolução de conflitos Conflitos de dados
Protelar resolve o problema. . .
Ciclo de processador
Instrução 1 2 3 4 5 6 7 8 9
LD R1,0(R2) IF ID EX MEM WB
DSUB R4, R1, R5 IF ID EX MEM WBAND R6, R1, R7 IF ID EX MEM WBOR R8, R1, R9 IF ID EX MEM WB
LD R1,0(R2) IF ID EX MEM WBDSUB R4, R1, R5 IF ID stall EX MEM WBAND R6, R1, R7 IF stall ID EX MEM WBOR R8, R1, R9 stall IF ID EX MEM WB
A sequência de etapas de processamento da tabela inferior mostra como oprotelamento resolve o problema de ter os dados correctos em R1.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 28/40
Notas:
28.1. Notar que o processamento de todas as instruções subsequentes à que provoca oconflito também são proteladas.
28.2. A obtenção de instruções (etapa IF) também é protelada.
28
Resolução de conflitos Conflitos de controlo
Conflitos de controlo
Saltos condicionais causam conflitos de controlo porque podem alterar ounão o PC (quando o fazem é no fim de ID).
O que fazer enquanto não é possível determinar se o salto é realmente feito(ou tomado) ? Nada. . . e repetir quando já existir a informação.
Ciclo de processador
Instrução 1 2 3 4 5 6 7 8 9
salto relativo IF ID EX MEM WBsucessor IF IF ID EX MEM WBsucessor + 1 IF ID EX MEM WBsucessor + 2 IF ID EX MEM WB
Dada a frequência de saltos relativos, estes conflitos podem levar a perdas dedesempenho na ordem dos 10%–30% !
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 29/40
Notas:
29.1. Nesta arquitectura um salto condicional demora tanto como um saltoincondicional. Em ambos os caso, o PC tem o novo valor do endereço no fim daetapa ID.
29.2. Em muitas organizações de pipeline, o salto condicional necessita de mais ciclosque o incondicional.
29.3. A instrução “sucessor” não pode entrar imediatamente na fase de descodificação.O primeiro IF (da 2ª linha) obtém a instrução do valor “regular” do PC (a instruçãoresidente em memória a seguir ao salto relativo). Este valor pode não ser ocorrecto. O segundo IF já usa o valor de PC definido no ciclo 2 (o valor correcto).
29.4. Quando o salto não é tomado, o segundo IF é desnecessário. Esse facto pode seraproveitado para reduzir o impacto do conflito de controlo.
29
Resolução de conflitos Conflitos de controlo
Alternativa: Optar por uma das alternativas
O CPU assume que o salto não é tomado e corrige a sua decisão quandodeterminar o valor da condição (se necessário).
Ciclo de processador
Instrução 1 2 3 4 5 6 7 8 9
salto não tomado IF ID EX MEM WBi + 1 IF ID EX MEM WBi + 2 IF ID EX MEM WBi + 3 IF ID EX MEM WBi + 4 IF ID EX MEM WB
salto tomado IF ID EX MEM WBi + 1 IF inact. inact. inact. inact.alvo IF ID EX MEM WBalvo + 1 IF ID EX MEM WBalvo + 2 IF ID EX MEM WB
Também se pode partir do princípio que o salto é tomado. No caso presente,isso não tem interesse. (Porquê?)
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 30/40
Notas:
30.1. Assumir que o salto é tomado obriga ainda assim a calcular a posição dainstrução seguinte (“alvo” do salto).
30.2. Quando o salto é tomado, a instrução subsequente em processamento é errada:internamente é transformado numa instrução NOP (no operation). No nosso caso,isso é simples, porque a instrução ainda não alterou o estado interno do CPU.
30
Resolução de conflitos Conflitos de controlo
Execução incondicional da instrução seguinte
Outra opção: Executar sempre a instrução colocada a seguir ao salto!
Ciclo de processador
Instrução 1 2 3 4 5 6 7 8 9
salto não tomado IF ID EX MEM WB(delay slot) i + 1 IF ID EX MEM WBi + 2 IF ID EX MEM WBi + 3 IF ID EX MEM WBi + 4 IF ID EX MEM WB
salto tomado IF ID EX MEM WB(delay slot) i + 1 IF ID EX MEM WBalvo IF ID EX MEM WBalvo + 1 IF ID EX MEM WBalvo + 2 IF ID EX MEM WB
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 31/40
Notas:
31.1. A este tipo de salto chama-se delayed btanch e a posição da instrução executadaincondicionalmente designa-se por delay slot. Algumas arquitecturas têm doisdelay slots.
31.2. Neste caso, o trabalho de encontrar uma instrução para o delay slot é deixado aocompilador ou programador em assembly.
31.3. Caso não seja possível encontrar uma instrução apropriada, coloca-se umainstrução NOP no delay slot.
31
Resolução de conflitos Conflitos de controlo
Branch delay slot: estratégias de sequenciamento
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 32/40
Notas:
32.1. A situação (a) é a melhor. As estratégias (b) e (c) são usadas quando a estratégia(a) não é possível.
32.2. A estratégia (b) requer geralmente a duplicação da instrução colocada no delayslot. Esta estratégia é boa para casos em que o salto é tomado com elevadaprobabilidade (como no caso dos ciclos).
32.3. Para que (b) e (c) sejam legais, é necessário que a execução da instrução nãoaltere o resultado do programa. Quando muito, o trabalho executado por essainstrução é desperdiçado.
32.4. No caso do exemplo (c), o registo R7 poderia conter um valor temporário quesimplesmente não é usado quando o salto é tomado. Note-se que o caso (b) ovalor final de R4 não é o mesmo; se isso for importante, a duplicação da instruçãonão pode ser feita.
32
Resolução de conflitos Conflitos de controlo
Impacto da arquitectura do conjunto de instruções
A arquitectura do conjunto de instruções pode introduzir factores deineficiência e dificuldades de implementação.
Instruções que que alteram o estado a “meio” da execução dificultam otratamento de excepções. Exemplos: auto-incremento em IA-32. Oprocessador necessita de ter a capacidade para reverter o estado.Instruções de cópia de strings também pertencem a esta categoria(solução: usar registos como memória de trabalho).
Alguns elementos de estado (p. ex. códigos de condição) podemdificultar o funcionamento da pipeline (p. ex. instruções que alterem osc.c. não podem ser colocadas no delay slot). Pode ser difícil determinarquando é que o código de condição é válido.
Instruções multi-ciclo introduzem grandes desequilíbrios (instruçõespodem demorar de 1 a >100 ciclos). Solução: pipeline de microcódigo(VAX8800, IA-32 depois de 1995).
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 33/40
Notas:
33.1. Na arquitectura IA-32, a utilização modos de endereçamento comauto-incremento implica a actualização de registos a meio da execução doprograma.
33.2. Durante muito tempo, partiu-se do princípio que a interacção entre a arquitecturado conjunto de instruções e a implementação era reduzida, pelo que s questõesde implementação não tinham peso na concepção dos conjuntos de instruções. Apartir dos anos 80 tornou-se claro que a dificuldade de implementar pipelines e asua ineficiência podem ser aumentadas por más escolhas a nível da ACI.
33
Tratamento de instruções complexas
Unidades funcionais adicionais
IF ID
EXint
EXVF/int mul
EXVF soma
EXVF/nt div
MEM WB
As unidade de execução não são “pipelined”.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 34/40
Notas:
34.1. Este acetato mostra a forma mais simples de tratar operações cuja execução sejademorada. Para evitar que o ciclo de relógio tenha que ser alongado para executaressas operações, permite-se que uma instrução gaste mais que um ciclo no estadode execução. Além disso, também é conveniente dispor de unidades de execuçãoseparadas para os diferentes tipos de operações.
34.2. A abordagem geral consiste em repetir fase de execução tantas vezes quantas asnecessá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) senecessitar de uma unidade em uso (o que é fácil de detectar) ou se provocar umconflito 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 deexecução também sejam, elas próprias, pipelined.
34
Tratamento de instruções complexas
Latência e intervalos de repetiçãoÛ Em geral, (algumas das) unidades de execução multi-ciclo também devemser transformadas em “pipeline”.Û Também deve ser possível ter múltiplas instruções em execução paraaproveitar todos os recursos disponíveis.
latência número de ciclos entre a instrução que produz um resultado e ainstrução que a usa;
intervalo de repetição número mínimo de ciclos entre a emissão de duasinstruções de um dado tipo.
Unidade funcional Latência Intervalo
ALU (inteiros) 0 1Memória de dados 1 1Somador VF 3 1Multiplicador (VF e int.) 6 1Divisor (VF e int.) 24 25
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 35/40
Notas:
35.1. Consequência da definição de latência: A maioria das instruções “consome” osseus operandos no início do ciclo EX. Para estas instruções, a latência é igual aonúmero de andares (contados após o primeiro andar de EX) necessários paraproduzir o resultado pretendido (ver tabela do acetato).
35.2. A principal excepção à observação anterior é constituída pelas operações destore, que consome um dos seus operandos um ciclo mais tarde (a latência vemreduzida de um ciclo para o operando que representa o valor a guardar, mas nãopara o operando que especifica o endereço de memória).
35.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 queimplica 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 mesmatecnologia de implementação).
35.4. Os acessos a memória usam a unidade inteira para cálculo do endereço. Acessos amemória demoram sempre o mesmo tempo, seja para dados inteiros ou de vírgulaflutuante.
35
Tratamento de instruções complexas
Unidades com “pipeline”
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 36/40
Notas:
36.1. Esta organização (que corresponde à tabela do acetato anterior) suportamú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).
36.2. Na ausência de saltos, esta organização permite manter o débito de umainstrução por ciclo, desde que não existam conflitos de dados ou estruturais, nemsejam usadas instruções de divisão. Qualquer uma destas situação faz com que oCPI desça abaixo de 1 (o valor máximo).
36.3. A principal implicação da introdução de unidades de execução de latênciadiferente é que agora podem surgir conflitos RAW que não podem ser resolvidospor forwarding (como anteriormente). Também podem surgir conflitos WAW (quenão surgiam antes).
36.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.
36
Tratamento de instruções complexas
Conflitos RAW
Instruções independentes:
Nota: 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).
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 37/40
Notas:
37.1. A tabela superior mostra a operação da nova organização para instruçõesindependentes (logo, não surgem conflitos do tipo RAW). As etiquetas em itálicoindicam andares em que são “consumidos” operandos, enquanto as etiquetas anegrito indicam os andares que produzem dados.
37.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 fase de execuçãono mesmo ciclo (i.e., ficar pronta a passar para o estado MEM). Por exemplo, natabela inferior a última instrução protela um ciclo adicional (ciclo 16) para nãoescrever o seu resultado ao mesmo tempo que a instrução ADD.D.
37.3. A tabela inferior mostra a ocorrência de protelamentos devido à diferença delatência entre as unidades de execução. Por exemplo, a intrução de soma tem deesperar 6 ciclos pelo resultado da multiplicação. Este atraso não pode serresolvido por forwarding, já que o resultado pretendido apenas está calculado nociclo 12.
37
Tratamento de instruções complexas
Conflitos WAW
Û No ciclo 11, três instruções tentam escrever nos registos. (Este não é opior caso.)Û Não existe nenhum conflito estrutural irresolúvel no ciclo 10, porqueapenas a instrução L.D usa de facto a memória.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 38/40
Notas:
38.1. A tabela não mostra directamente um conflito WAW.
38.2. A tabela ilustra uma situação hipotética (i.e., que não ocorrerá com detecção deconflitos) em que três instruções passariam simultaneamente aos estados MEM eWB.Na implementação estudada, trata-se de um conflito estrutural. Contudo, esteconflito não é intrinsecamente irresolúvel, já que apenas uma instrução acede defacto a memória. Contudo, a sua resolução dependeria da possibilidade deescrever mais que um valor no banco de registos simultaneamente. Tal seria defacto possível com uma implementação mais sofisticada do banco de registos, oque presumivelmente não se justifica neste caso, já que o número de conflitosWAW é previsivelmente baixo.
38.3. Caso a instrução L.D fosse iniciada um ciclo mais cedo, existiria de facto umconflito WAW na escrita de F2.
38
Tratamento de instruções complexas
Detecção de conflitos
Assumindo que a detecção de conflitos é feita no andar ID, três tipos deverificaçõ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 dobanco de registos.
Conflito RAW Esperar até que os registos-fonte não estejam etiquetadoscomo destinos de um cálculo pendente que não estejaterminado quando o seu resultado for necessário. Estasverificaçõ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 esse for ocaso, protelar.
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 39/40
Notas:
39.1. Nos exemplos usados, assumir sempre que a deteção de conflitos é efectuadao noandar ID. Ou seja: o sistema de deteção de conflitos deve detectar conflitos entrea instrução em ID e qualquer instrução já em execução, i.e., a ser processada numandar posterior (mais à direita nos diagramas).
39.2. Os conflitos WAW serão raros na prática.
39
Tratamento de instruções complexas
Desempenho de vírgula flutuante
2006 — AAC (FEUP/MIEIC) Execução concorrente de instruções: Pipelines 40/40
Notas:
40.1. A figura mostra o número médio de ciclos de protelamento atribuídos a operaçõesde vírgula flutuante (i.e., ciclos de protelamento introduzidos quando umainstrução de VF estava no andar de ID). A figura inclui dados para uma unidadeadicional (comparação), de complexidade similar à unidade de soma.
40.2. Por exemplo, o número médio de ciclos de protelamento para somas é de 1.7ciclos (cerca de 56% da sua latência de 3 ciclos).
40.3. Como é de esperar, o número de ciclos de protelamento provocados por umainstrução é directamente proporcional à sua latência. (Já que esta determinaquantas instruções já emitidas podem estar em conflito com uma dada instrução.)
40.4. Apenas os resultados sobre os conflitos estruturais (divisão) dependem da taxa deocorrência das instruções. Os outros dependem apenas da latência das operaçõese das dependências de dados.
40.5. Os conflitos estruturais de divisão são raros, já que a taxa de ocorrência destetipo de instruções é baixa.
40