Paralelismo ao nível de instruções

Dependências, múltiplas unidades funcionais, intervalos de início e emissão múltipla.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Um multiplicador pode continuar a trabalhar enquanto a ALU calcula uma subtração independente. O paralelismo ao nível de instruções, ILP, aproveita esse trabalho simultâneo. O número de unidades não chega para decidir quais as operações que podem avançar: precisamos de conhecer dependências, disponibilidade dos operandos e portos partilhados.

RAW, WAR e WAW

DependênciaOrdem a preservarExemplo
RAW, verdadeiraLer depois da escrita que produz o valoradd t0,t1,t2; sub t3,t0,t4
WAR, antidependênciaNão destruir um valor antes da leitura anteriorsub t3,t0,t4; add t0,t5,t6
WAW, de saídaA última escrita do programa deve prevaleceradd t0,t1,t2; sub t0,t3,t4

RAR, duas leituras, não obriga a ordenar resultados. RAW transporta um valor calculado; WAR/WAW podem desaparecer por renomeação, atribuindo destinos físicos ou etiquetas diferentes às escritas.

O facto de duas instruções usarem memória exige também considerar endereços: um load pode depender de um store anterior no mesmo endereço. Se não se conhece o endereço, não se pode assumir independência.

Latência e intervalo de início

Uma multiplicação pode ter 6 fases de execução e aceitar uma nova operação em cada ciclo. Outra unidade pode demorar 6 ciclos e aceitar outra só depois de terminar. A latência é igual; o intervalo de início é diferente.

Para nn operações independentes, duração LL e intervalo de início II, o tempo da primeira entrada à última saída é:

C=L+(n−1)I.C=L+(n-1)I.

Quatro operações com L=6,I=1L=6,I=1 terminam em 9 ciclos. Com I=6I=6, levam 24. Se o enunciado define latência como ciclos adicionais ao ciclo inicial, uma latência 5 corresponde a 6 ciclos ocupados, por isso converte a notação antes de desenhar.

Múltiplas unidades com emissão em ordem

Usamos IF e ID de um ciclo, uma ALU de um ciclo e um multiplicador de três fases, com intervalo de início 1. Todas as instruções passam depois por MEM e WB comuns, uma por ciclo, pela ordem do programa. Há atalhos para EX, memórias I/D separadas e não há faltas. Cada unidade retém a saída até poder passar por MEM; enquanto essa saída está retida, não aceita uma operação que a substitua. Uma instrução bloqueada em ID retém as seguintes.

Este é um modelo didático fechado para praticar traços, não a organização de referência das aulas. A apresentação usa unidades sem atalhos e outras latências: soma e subtração inteiras com latência 0 e intervalo 1, soma e subtração em vírgula flutuante com latência 3 e intervalo 1, multiplicação com latência 6 e intervalo 1, divisão com latência 24 e intervalo 25. Antes de contar num enunciado, confirma sempre as latências, os atalhos e a ordem de passagem que esse enunciado fixa.

mul t0,t1,t2
lw t3,0(a0)
add t4,t0,t3
sub t5,t6,a1

A multiplicação começa EX no ciclo 3 e termina no fim de 5. O load poderia terminar o cálculo do endereço no fim de 4, mas não pode passar por MEM antes da multiplicação mais antiga. O quadro distingue essa espera estrutural da espera do add pelos valores.

InstruçãoIFIDExecuçãoMEMWB
mul123–567
lw23Endereço em 4; espera em 5–678
add34–78910
sub4–7891011

No ciclo 6, MEM serve a multiplicação; no 7, serve o load. O dado carregado só existe no fim de 7, pelo que o add pode recebê-lo em EX 8 pelo atalho MEM/WB. O produto já está disponível. A sub é independente, mas não ultrapassa o add retido em ID.

A ordem mul; sub; lw; add pode ocupar a ALU durante a multiplicação, se conservar a semântica e não houver exceções ou efeitos externos relevantes. Ainda assim, verifica o porto MEM comum e a ordem de conclusão: ocupar uma unidade livre não garante que o tempo total diminua.

Em outros modelos, o porto de escrita pode ser comum mas MEM separado, ou a conclusão pode ocorrer fora de ordem. Essas hipóteses mudam a tabela. Antes de contar, fixa quais os recursos comuns e qual a ordem imposta.

Emissão múltipla

Um processador superescalar emite mais de uma instrução por ciclo. Supõe duas vias: uma ALU e uma memória. O par add; lw pode emitir junto se for independente; duas operações de memória não cabem nesse ciclo, mesmo com endereços distintos.

Par candidatoPode emitir junto neste modelo?Motivo
add t0,t1,t2; lw t3,0(a0)SimUma ALU, uma memória e operandos independentes
lw t0,0(a0); add t1,t0,t2NãoO add precisa do resultado do load
lw t0,0(a0); sw t1,0(a1)NãoAmbos pedem a única via de memória

A ausência de dependências não elimina limites de classe, portos ou unidades. Um salto pode ainda limitar a janela de instruções úteis disponível para formar pares.

Para 100 instruções em 60 ciclos: IPC=100/60=1,667100/60=1,667 e CPI=60/100=0,660/100=0,6. CPI inferior a 1 é possível em emissão múltipla. O pico de duas instruções por ciclo não garante IPC 2 em um programa real.

Sequenciamento dinâmico

O hardware pode manter uma janela de instruções e selecionar as que têm operandos e recursos disponíveis. Assim, uma operação independente pode ultrapassar outra à espera de um dado. Em Tomasulo, ambas entram nas estações pela ordem do programa; a escolha da operação que começa a executar é que pode mudar essa ordem. Continua a ser necessário preservar o significado do programa.

O algoritmo de Tomasulo faz esse controlo com estações de reserva, etiquetas e difusão de resultados. Em processadores especulativos, um reorder buffer permite confirmar resultados por ordem, preservar exceções precisas e descartar o caminho errado de um salto. Executar, difundir um resultado e confirmar uma instrução são eventos diferentes.

Desenrolar ciclos aumenta instruções independentes, mas aumenta o código e pode exigir mais registos. Uma otimização tem de respeitar o custo de memória, a pressão sobre caches e a semântica dos resultados, sobretudo em vírgula flutuante.

Exercícios

Classificar nomes e valores

I1: add t0, t1, t2; I2: sub t3, t0, t4; I3: add t0, t5, t6. Identifica as dependências entre pares.

Pista
Anota conjuntos de registos lidos e escritos.
Solução

I1→I2 RAW em t0; I2→I3 WAR em t0; I1→I3 WAW em t0. Ler t0 em I2 não é uma escrita nesse registo.

Confere a tua resposta:

  • Identifiquei RAW em t0 de I1 para I2.
  • Identifiquei WAR em t0 de I2 para I3.
  • Identifiquei WAW em t0 de I1 para I3.

Erros frequentes

Chamar WAR a duas escritas ou classificar qualquer repetição de nome como RAW.

Voltar à explicação
Calcular a última conclusão

Cinco operações independentes: unidade de 6 ciclos ocupados, intervalo de início 2. Quantos ciclos da primeira entrada à última saída?

Pista
Os inícios estão espaçados 2 ciclos.
Solução

14 ciclos, ou seja, os inícios podem ser 1,3,5,7,9 e a última saída no fim de 14.

Erros frequentes

Multiplicar 5×6 como se a unidade não tivesse pipeline.

Voltar à explicação
Um bloqueio em ordem

Um add bloqueia em ID à espera de mul. A instrução seguinte é independente. O que faz uma pipeline com emissão em ordem?

A tua resposta

Pista

Independência é condição necessária para ultrapassar, mas não cria o mecanismo.

Solução

A instrução seguinte não ultrapassa ID bloqueado. Uma reordenação estática válida pode colocá-la antes; sequenciamento dinâmico pode permitir execução fora de ordem em outro modelo.

  • A terceira espera pela instrução bloqueada em ID. Emissão em ordem não permite ultrapassar essa instrução.
  • A terceira passa automaticamente porque é independente. Isso exige separar emissão e espera de operandos, ou reordenar o programa.
  • A terceira perde o seu resultado. Esperar não significa descartar uma instrução.

Erros frequentes

Supor que múltiplas unidades funcionais implicam emissão fora de ordem.

Voltar à explicação
CPI inferior a 1

Um fragmento conclui 80 instruções em 50 ciclos em um processador superescalar. Calcula CPI.

Pista
Divide ciclos por instruções.
Solução

CPI 0,625; IPC 1,6, porque a emissão múltipla permite concluir mais de uma instrução por ciclo em média.

Erros frequentes

Trocar CPI com IPC ou forçar CPI≥1.
Voltar à explicação
Registos diferentes podem designar o mesmo endereço

a0=100 e a1=104. Seguem-se sw t0,4(a0); lw t1,0(a1). A segunda instrução pode ler memória antes da primeira sem outra garantia? Não há acessos externos.

Pista
Calcula os endereços efetivos, em bytes.
Solução

Não. O load deve observar o valor guardado pelo store no endereço 104, ou seja, existe RAW de memória apesar das bases terem nomes diferentes. O hardware pode encaminhar o valor do store ao load, mas não pode deixá-lo ler o valor antigo.

Confere a tua resposta:

  • Calculei 104 nos dois acessos.
  • Identifiquei RAW de memória do store para o load.
  • Expliquei por que renomear registos não elimina essa dependência.

Erros frequentes

Procurar só nomes de registos iguais ou tratar renomeação de registos como renomeação dos dados em memória.

Voltar à explicação
Escalonar uma conclusão comum

Traça mul t0,t1,t2; add t3,t4,t5; sub t6,t3,a0. IF e ID duram um ciclo; a ALU dura um e mul ocupa três fases com intervalo 1. Há MEM e WB comuns, uma instrução por ciclo, pela ordem do programa, e atalhos para EX. Cada unidade retém a saída até passar por MEM e não aceita uma operação que a substitua enquanto estiver retida. Não há faltas ou saltos. A primeira instrução está em IF 1. Indica EX, MEM e WB das três e distingue espera por recurso de espera por operando.

Pista

Segue primeiro a ordem de MEM, depois verifica quando cada operando pode chegar a EX.

Solução

mul: EX 3–5, MEM 6, WB 7. add: EX 4, resultado retido em 5–6, MEM 7, WB 8. sub: ID 4–6, EX 7, MEM 8, WB 9. Embora add seja independente, não pode concluir antes de mul. sub pode obter t3 do registo EX/MEM em EX 7, quando add já avança para MEM; não precisa de esperar pelo WB 8.

Confere a tua resposta:

  • Coloquei mul em EX nos ciclos 3 a 5 e em MEM 6.
  • Retive a add independente antes de MEM 7.
  • Usei o resultado da add em EX 7 da sub.
Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.