Aula 28: Escalonamento de Instruções
Objetivos
- Entender pipelines e latência.
- Reordenar instruções para paralelismo (ILP).
Conteúdo
O código Assembly gerado pode estar correto logicamente, mas ser lento fisicamente. CPUs são Pipelined: Executam múltiplas instruções em estágios simultâneos (Fetch, Decode, Execute, Write).
Hazards (Perigos)
- Data Hazard:
LW R1, ...demora muito (load da RAM). Se a próxima instrução usarR1imediatamente, a CPU para (Stall) esperando o dado chegar.- Solução: Inserir instruções úteis independentes entre o Load e o Uso.
- Control Hazard: Um desvio (
JMP) quebra o fluxo de fetch. A CPU previu errado e tem que esvaziar o pipeline.
List Scheduling
O algoritmo clássico que constrói um Grafo de Dependência (DAG) das instruções dentro de um bloco básico e usa heurísticas (ex: Caminho Crítico) para escolher a ordem de emissão que minimiza stalls.
Referências
- Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
- Cooper, K., & Torczon, L. (2011). Engineering a Compiler.