Buscar

Aula 12 - Processador Superescalar

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Aula 12
Organização de Computadores
Processadores Paralelos - Superescalar
Profa. Débora Matos
1
Contextualização de Paralelismo em nível de instrução
2
Vamos considerar a possibilidade de despachar 2 instruções por ciclo. O que muda?
1) O despacho de duas instruções por ciclo no MIPS exigirá a decodificação de 64 bits de instruções.
As instruções são despachadas em pares. Quando não for possível despachar uma das instruções, ela é substituída por um NOP.
2
Contextualização de Paralelismo em nível de instrução
3
2) Para que as duas instruções sejam despachadas sem que ocorram hazards, o compilador ou um controle por hardware precisará removê-los.
4) É necessário adicionar um somador.
3) É necessário adicionar portas extras ao banco de registradores.
Esta ALU pode ser definido para os cálculos de endereço de transferência da dados.
É necessário adicionar portas extras ao banco de registradores, porque para a operação com a ALU é requerida a leitura no banco de registradores, bem como mais dois para uma operação de store.
Além disso, é necessário adicionar um somador para calcular o endereço efetivo para as transferência de dados. 
Sem esses recursos extras o despacho duplo de instruções encontraria hazards estruturais.
Nesse caso, o resultado de uma instrução load não pode ser usado no próximo ciclo de clock, isso significa que duas instruções seguintes não podem usar o resultado do load sem sofrer stall.
Além disso, essa solução os resultados de uma instrução com a ALU não pdem ser usados por load ou store emparelhados.
3
4
A primeira ideia por trás do paralelismo em nível de instrução é a adição de mais recursos de hardware.
No entanto, verificaremos que uma série necessidades e restrições precisam ser observadas e controladas nestas arquiteturas.
Exemplos: 
Processadores superescalares
VLIW – Very Long Instruction Word
Processadores com superpipelines
Contextualização de Paralelismo em nível de instrução
4
Processadores superescalares
5
Um processador superescalar utiliza múltiplos e independentes pipelines de instruções;
Permite executar um número variado de instruções por ciclo de clock.
Cada pipeline consiste de múltiplos estágios e pode lidar com múltiplas instruções ao mesmo tempo;
Quando ocorrem dependências entre as instruções, o processador pode executá-las fora de ordem;
5
Duplicação de recursos
6
Modelo de arquitetura superescalar
Cada unidade funcional implementa um pipeline, e cada pipeline permite a execução paralela de múltiplas instruções;
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
6
Processadores superescalares
7
Modelo de arquitetura superescalar
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
7
Processadores superescalares
8
No entanto, um processador superescalar precisa se preocupar com as seguintes situações:
Dependência de dados
Dependência procedural
Conflitos de recursos
Dependência de saída
Antidependência
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
8
Processadores superescalares
9
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
9
Processadores superescalares
10
No entanto, um processador superescalar precisa se preocupar com as seguintes situações:
Dependência de dados
Dependência procedural
Conflitos de recursos
Dependência de saída
Antidependência
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
10
Processadores superescalares
11
Dependência de saída:
Exemplo:
I1: R3 <= R3 op R5
I2: R4 <= R3 + 1
I3: R3 <= R5 + 1
I4: R7 <= R3 op R4 
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
11
Processadores superescalares
12
Dependência de saída:
Exemplo:
I1: R3 <= R3 op R5
I2: R4 <= R3 + 1
I3: R3 <= R5 + 1
I4: R7 <= R3 op R4 
– Instruções I1 e I3 escrevem em R3
– Atribuição da 1ª instrução não pode ser feita após a atribuição da 3ª
– Despacho da 3ª instrução precisa ser congelado.
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
12
Processadores superescalares
13
Antidependência:
Exemplo:
I1: R3 <= R3 op R5
I2: R4 <= R3 + 1
I3: R3 <= R5 + 1
I4: R7 <= R3 op R4 
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
13
Processadores superescalares
14
Antidependência:
Exemplo:
I1: R3 <= R3 op R5
I2: R4 <= R3 + 1
I3: R3 <= R5 + 1
I4: R7 <= R3 op R4 
A instrução I3 não pode concluir sua execução antes da instrução I2 ter obtido seus operandos.
despacho da instrução I3 precisa ser congelado até que a instrução I2 tenha lido valor de R3.
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
14
Processadores superescalares
15
Com todas essas limitações, qual seria uma possível solução para otimizar os recursos do pipeline?
Uma solução é alterar a ordem de execução das instruções;
A restrição é de que o resultado da execução deve ser igual ao resultado obtido com a execução sequencial.
No entanto, exige controles mais complexos para testar as dependências.
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
15
Execuções fora de ordem
16
A janela de instruções é uma solução para permitir a execução fora-de-ordem com conclusão fora-de-ordem;
Sempre que uma instrução não apresenta dependências, o processador pode decodificá-la e colocá-la na janela de instruções. 
Quando houver uma unidade funcional livre, uma instrução da janela de instruções pode ser emitida para o estágio de execução. 
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
16
Execução fora de ordem
17
Banco de Registradores
Cache de Instruções
IF
Janela de Instruções
ALU
branch
store
load
Cache de dados
Exemplo de Janela de Instruções Centralizada
. . .
Este é um exemplo de janela de instruções centralizada, ela também poderia ser distribuida. Para isso, as instruções são decodificadas e enviadas para a estação de reserva apropriada.
Janela Distribuída: Semelhante ao algoritmo de Tomasulo que combina estações de reserva distribuida com renomeação de registradores.
17
Renomeação de Registradores
18
Quando as instruções são executadas fora de ordem, os valores dos registradores podem não ser conhecidos, considerando-se apenas a sequência de instruções do programa.
As antidependências e dependências de saída são exemplos comuns de conflitos no uso de registradores em arquiteturas superescalares. 
Uma solução para este problema é utilizar a técnica de Renomeação de Registradores. 
Renomeação de Registradores: com isso nós conseguimos eliminar as falsas dependências
18
Renomeação de Registradores
19
Exemplo:
I1: R3 <= R3 op R5
I2: R4 <= R3 + 1
I3: R3 <= R5 + 1
I4: R7 <= R3 op R4 
São utilizados registradores internos escolhidos dinamicamente.
Elimina antidependência e dependência de saída
Duas operações de inteiros, duas operações com ponto flutuante e 1 operação com a memória podem ser executadas ao mesmo tempo.
19
20
Arquiteturas superescalares retomaram as técnicas de previsão de desvio empregadas antes da arquitetura RISC;
Processadores mais simples empregam previsões estáticas, enquanto processadores mais sofisticados usam previsão dinâmica, baseando-se em históricos de desvios. 
Previsão de Desvios
Nas arquiteturas
RISC, a estratégia de desvio atrado foi explorada. 
20
21
O processo de busca de instruções (incluindo previsão de desvio) constrói um fluxo dinâmico de instruções, onde o processador identifica e tenta eliminar dependências;
As instruções são despachadas para uma janela de execução, onde não formam mais um fluxo sequencial;
As instruções são reordenadas de acordo com as dependências de dados verdadeiras e recolocadas em um novo fluxo sequencial. 
Projeto de processadores superescalares
Inicialmente tem-se um programa estático conforme gerado pelo compilador.
Um fluxo dinâmico de instruções é formado com base em previsões de desvio.
O processador despacha as instruções para uma janela de execução.
Nessa janela as instruções não formam mais um fluxo sequencial.
O processador efetua o estágio de execução de cada instrução numa ordem determinada pelas dependências de dados verdadeiras e pela disponibilidade de recursos de HW.
Finalmente, as instruções são reordenadas.
O passo final é o commit. Como as instruções podem ser executadas fora de ordem devido a previsão de desvios, algumas instruções podem ter de ser abandonadas após o resultado do desvio. Sendo assim, elas não podem alterar unidades de armazenamento visíveis ao programa.
21
22
Requerem:
 Uso de múltiplos estágios de busca e decodificação e uma lógica de previsão de desvio.
Lógica para determinar dependências verdadeiras, envolvendo registradores e mecanismos para transferir os valores (renomeação de registradores);
Mecanismos para emitir múltiplas instruções em paralelo;
Recursos adicionais de HW: memória, unidades funcionais, registradores...
Mecanismo para concluir o estado do processo na ordem correta (buffer de reordenamento).
Projeto de processadores superescalares
Nas arquiteturas RISC, a estratégia de desvio atrado foi explorada. 
22
Projeto de processadores superescalares
23
 
Exemplo de arquitetura superescalar: Pentium 4 
O processo busca a instrução a instrução na memória na ordem do programa estático
Cada instrução é traduzida em uma ou mais intruções RISC de tamanho fixo, chamadas de micro-operaçoes, micro-ops.
Trace cache é uma cache de instruções
As instruções são obtidas sequencialmente da cache L2.
23
Projeto de processadores superescalares
24
 
Exemplo de arquitetura superescalar: Pentium 4 
Buffers de desvio e análise antecipada.
Aqui a ordem de leitura das operações pode ser alterada.
O Pentium 4 usa uma estratégia dinâmica de previsão de desvios baseada em histórico. O campo de histórico é composto por 4 bits.
O processo busca a instrução a instrução na memória na ordem do programa estático
Cada instrução é traduzida em uma ou mais intruções RISC de tamanho fixo, chamadas de micro-operaçoes, micro-ops.
Trace cache é uma cache de instruções
As instruções são obtidas sequencialmente da cache L2.
24
Projeto de processadores superescalares
25
 
Exemplo de arquitetura superescalar: Pentium 4 
O decodificador traduz cada instrução para até 4 micro-ops (instruções RISC, cada uma com 118 bits) 
O processo busca a instrução a instrução na memória na ordem do programa estático
Cada instrução é traduzida em uma ou mais intruções RISC de tamanho fixo, chamadas de micro-operaçoes, micro-ops.
Trace cache é uma cache de instruções
As instruções são obtidas sequencialmente da cache L2.
25
Projeto de processadores superescalares
26
 
Exemplo de arquitetura superescalar: Pentium 4 
As micro-ops geradas são guardadas no trace cache.
O processo busca a instrução a instrução na memória na ordem do programa estático
Cada instrução é traduzida em uma ou mais instruções RISC de tamanho fixo, chamadas de micro-operaçoes, micro-ops.
Trace cache é uma cache de instruções
As instruções são obtidas sequencialmente da cache L2.
26
Projeto de processadores superescalares
27
 
Exemplo de arquitetura superescalar: Pentium 4 
Verifica se um recurso está indisponível para alguma das micro-ops que chegam no alocador.
O alocador é ainda responsável por alocar registradores necessários para a execução das micro-ops. (ex. renomeação de registradores)
Após a verificação se a micro-op possui todos os operandos requeridos e a unidade de execução estiver disponível, a micro-op é despachada.
O processo busca a instrução a instrução na memória na ordem do programa estático
Cada instrução é traduzida em uma ou mais intruções RISC de tamanho fixo, chamadas de micro-operaçoes, micro-ops.
Trace cache é uma cache de instruções
As instruções são obtidas sequencialmente da cache L2.
27
Conceitos iniciais de arquiteturas VLIW
28
Várias operações (o que seriam instruções em uma máquina normal) são codificadas em uma mesma instrução;
A palavra de instrução é bastante longa, podendo conter várias operações (que operam sobre vários operandos) independentes;
A posição de cada operação dentro da palavra VLIW determina a unidade funcional que será usada;
O hardware de despacho é simples quando comparado ao superescalar;
28
VLIW x Superescalar
29
VLIW
Superescalar
Número de instruções porclock
Utilizam um número fixo de instruções
Variam o número de instruçõesporclock
Dependências
Resolvidas em tempo de compilação pelo compilador
Resolvidas em tempo de execução por um hardware dedicado
Consumo de energia
Baixo
Alto
Tamanho do código
Maior
Menor
Compatibilidade atravésde gerações de HW
Não
Sim
29
Exercício
30
Supondo um processador superescalar com a seguinte configuração: 4 unidades funcionais, 1 multiplicador, 1 load/store
Pode executar 4 instruções por ciclo em cada estágio do pipeline
Latências: Somador – 1 ciclo, Multiplicador – 2 ciclos, Load/ store – 2 ciclos
Deve ser executado o seguinte programa:
ADD R1, R2, R3
LW R10, 100 (R5)
ADD R2, R7, R3
ADD R9, R4, R10
ADD R11, R4, R6
Verificas as dependências e classificá-las
30
Exercício
31
31
Projeto no nível RT: 
Exploração de paralelismo no datapath
Débora Matos
32

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando