18 / 24 · Conceito
Dependências, riscos de recursos e encaminhamento
Compare pausas e encaminhamento quando uma operação precisa de um resultado anterior.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
A sobreposição exige mais do que preservar a ordem
Cálculos independentes em fluxo não leem resultados anteriores, portanto as transações podem se sobrepor com segurança. Já um operador com banco de registradores pode precisar do resultado de uma operação precedente. Ler um registrador antes de uma escrita anterior ficar disponível cria um risco de dependência de dados de leitura após escrita. A aritmética pode estar correta enquanto seu operando foi amostrado cedo demais.
Comece com R1=4. Considere I0 executando R1←R1+3 e I1 executando R2←R1×2. Neste exemplo, I0 captura o operando 4 na borda 0, calcula 7 durante o ciclo seguinte e escreve R1 na borda 1. I1 amostrando R1 na borda 1 pode ver o valor anterior 4, produzindo R2=8. A execução sequencial exige R2=14. Especifique explicitamente o comportamento de leitura/escrita do banco de registradores na mesma borda.
| Solução | Operando visto por I1 | Exigência |
|---|---|---|
| Ler o R1 anterior | 4 | Incorreto aqui |
| Pausar até a borda 2 | 7 | Preservar a operação e os campos acompanhantes |
| Encaminhar o resultado da execução | 7 imediatamente antes da borda 1 | Resultado disponível e caminho atendendo à temporização |
O encaminhamento seleciona um resultado calculado antes que ele chegue ao armazenamento arquitetural. Correspondência entre números de destino não é suficiente: o produtor deve ser válido, realmente escrever o registrador e ter um resultado pronto. Com vários produtores correspondentes, escolha a operação anterior mais recente. Nunca encaminhe uma bolha ou operação descartada.
Uma leitura de memória cuja resposta não chegou não pode ser resolvida pelo encaminhamento de dados indisponíveis. Pause o consumidor preservando o opcode, os identificadores de origem e a etiqueta. Decida se outros estágios independentes podem continuar.
Riscos estruturais surgem quando dois estágios precisam de uma única porta de memória ao mesmo tempo. Arbitragem ou recursos extras são necessários mesmo sem dependência de dados. Desvios introduzem riscos de controle que exigem cancelar trabalho do caminho incorreto. Analise pelo que cada operação espera e qual estado deve ser mantido. Nosso projeto final permanece um fluxo independente; sua aprovação não comprova tratamento de dependências de CPU.
Experimente
Com R1=4, I0 soma três e I1 dobra o resultado. Compare o resultado de I1 usando armazenamento antigo e encaminhamento correto. E se I0 for uma leitura de memória cujos dados ainda não estão disponíveis?
Ler a explicação
Ler o valor antigo 4 dá 8; encaminhar 7 dá 14. Um resultado de leitura indisponível exige pausar o consumidor preservando sua operação e etiqueta. Uma correspondência de destino não justifica encaminhar dados ainda incompletos.