Aula 28: Escalonamento de Instruções
Objetivos
- Entender pipelines e latência.
- Reordenar instruções para paralelismo (ILP).
Motivação
Mesmo com boa seleção de instruções e alocação de registradores, o desempenho real pode ser limitado por:
- Dependências de dados mal organizadas.
- Branches frequentes e mal posicionados.
- Falta de paralelismo de instruções (ILP) explorado.
Escalonamento de instruções é uma tarefa onde o conhecimento de arquitetura de processadores (pipelines, hazards, unidades funcionais) se traduz em ganhos concretos de performance.
Conteúdo
O código gerado pode ser correto mas lento se as instruções forem mal ordenadas: dependências de dados causam stalls (paradas no pipeline) e hazards de controle atrasam o fetch. O escalonamento de instruções reordena as instruções (respeitando dependências) para reduzir stalls e aproveitar ILP (paralelismo de instruções).
flowchart LR
Bloco[Bloco de instruções] --> DAG[DAG de dependências]
DAG --> Schedule[Escalonamento]
Schedule --> Ordem[Ordem de emissão]
Ordem --> Menos[Menos stalls]
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
Algoritmo clássico: construir o DAG de dependências no bloco e, a partir dele, escolher a ordem de emissão (heurísticas como caminho crítico, maior número de sucessores) para minimizar stalls e preencher slots do pipeline.
Resumo
- Data hazard: uma instrução usa o resultado de outra antes de estar pronto → stall. Control hazard: desvio atrasa o fetch. Escalonamento: reordenar instruções (respeitando dependências) para esconder latência e aumentar ILP.
Referências
- Aho et al. (2006); Cooper & Torczon (2011).
Materiais da aula
Última atualização: 08/03/2026