Arquiteturas Superescalares
Arquiteturas Superescalares
Em meados da década de 1980, processadores superescalares começaram a aparecer. Processadores superescalares decodificam múltiplas instruções de uma vez e o resultado de instruções de desvio condicional são geralmente preditas antecipadamente, durante a fase de busca, para assegurar um fluxo ininterrupto. Instruções são analisadas para identificar dependências de dados e, posteriormente, distribuídas para execução em unidades funcionais. Conforme a disponibilidade de operandos e unidades funcionais, as instruções executam em paralelo, com grande possibilidade de ser fora da ordem sequencial.
Pode-se dizer que processadores superescalares procuram remover sequenciamentos de instruções desnecessários, mantendo, aparentemente, o modelo sequencial de execução. Os elementos essenciais de processadores superescalares são: (1) busca de várias instruções simultaneamente, possivelmente predizendo branchs; (2) determinação de dependências verdadeiras envolvendo registradores; (3) despacho de múltiplas instruções; (4) execução paralela, incluindo múltiplas unidades funcionais com pipeline e hierarquias de memória capazes de atender múltiplas referências de memória; (5) comunicação de dados através da memória usando loads e stores e interfaces de memória que permitam o comportamento de desempenho dinâmico ou não previsto de hierarquias de memória; (6) métodos para commit do estado do processo, em ordem. Processadores superescalares mantém projetos lógicos com- plexos. Mais de 100 instruções são comumente encontradas em fase de execução, interagindo entre elas e gerando exceções.
O processo de execução acontece da seguinte forma: o processo de busca de instruções, com predição de desvio, ´e usado para formar um conjunto dinâmico de instruções. Dependências são então verificadas e as instruções são despachadas (dispatch) para a janela de execução. Nesse ponto, as instruções não são mais