Execução Fora de Ordem (OOO)
Lembra que dissemos que processadores modernos possuem diversas unidades de execução trabalhando em paralelo? Nós também dissemos que existem tipos diferentes de unidades de execução, como a ALU (Unidade Lógica Aritmética), que é uma unidade de execução genérica, e a FPU (Unidade de Ponto Flutuante), que é uma unidade de execução matemática. Apenas como exemplo genérico para entendermos o problema, digamos que um determinado processador possua seis unidades de execução, quatro “genéricas” e duas de ponto flutuante. Digamos também que o programa tenha o seguinte fluxo de instruções em um dado momento.1. instrução genérica
2. instrução genérica
3. instrução genérica
4. instrução genérica
5. instrução genérica
6. instrução genérica
7. instrução matemática
8. instrução genérica
9. instrução genérica
10. instrução matemática
O que vai acontecer? A unidade de despacho/agendamento enviará as primeiras quatro instruções às quatro ALUs mas, na quinta instrução, o processador precisará esperar que uma de suas ALUs fique livre para continuar o processamento, já que todas as suas quatro unidades de execução genéricas estarão ocupadas. Isso não é bom, porque ainda teremos duas unidades matemáticas (FPUs) disponíveis, e elas estarão ociosas. Portanto, um processador com mecanismo de execução fora de ordem (todos os processadores modernos têm essa função) vai analisar a próxima instrução e ver se ela pode ser enviada a uma das unidades ociosas. Em nosso exemplo isso não é possível, porque a sexta instrução também precisa de uma ALU para ser processada. O mecanismo de execução fora de ordem continua sua busca e descobre que a sétima instrução é uma instrução matemática que pode ser executada em uma das FPUs disponíveis. Como a outra FPU continuará disponível, ele vai vasculhar o programa em busca de oura instrução matemática. Em nosso exemplo, ele vai passar pelas instruções oito e nove e carregará a décima instrução.
Em nosso exemplo, as unidades de execução estarão processando, ao mesmo tempo, a primeira, a segunda, a terceira, a quarta, a sétima e a décima instruções.
O nome fora de ordem vem do fato de que o processador não precisa esperar; ele pode puxar uma instrução do fundo do programa e processá-la antes que instruções acima dela sejam processadas. É claro que a execução fora de ordem não pode ficar indefinidamente procurando por uma instrução se não puder encontrar imediatamente uma para ser executada em paralelo. A execução fora de ordem de todos os processadores tem um limite de profundidade até onde podem ir procurar por instruções (um valor típico seria 512).
- 2
- 2
Respostas recomendadas
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora