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)

  1. Data Hazard: LW R1, ... demora muito (load da RAM). Se a próxima instrução usar R1 imediatamente, a CPU para (Stall) esperando o dado chegar.
    • Solução: Inserir instruções úteis independentes entre o Load e o Uso.
  2. 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.
Back to top