A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Contextualização de Paralelismo em nível de instrução

Apresentações semelhantes


Apresentação em tema: "Contextualização de Paralelismo em nível de instrução"— Transcrição da apresentação:

1 Aula 12 Organização de Computadores Processadores Paralelos - Superescalar Profa. Débora Matos

2 Contextualização de Paralelismo em nível de instrução
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.

3 Contextualização de Paralelismo em nível de instrução
2) Para que as duas instruções sejam despachadas sem que ocorram hazards, o compilador ou um controle por hardware precisará removê-los. 3) É necessário adicionar portas extras ao banco de registradores. 4) É necessário adicionar um somador. É 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. Esta ALU pode ser definido para os cálculos de endereço de transferência da dados.

4 Contextualização de Paralelismo em nível de instrução
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

5 Processadores superescalares
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;

6 Duplicação de recursos
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.

7 Processadores superescalares
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.

8 Processadores superescalares
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.

9 Processadores superescalares
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
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.

11 Processadores superescalares
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.

12 Processadores superescalares
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.

13 Processadores superescalares
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.

14 Processadores superescalares
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. 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. despacho da instrução I3 precisa ser congelado até que a instrução I2 tenha lido valor de R3.

15 Processadores superescalares
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.

16 Execuções fora de ordem
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.

17 Banco de Registradores
Execução fora de ordem Banco de Registradores Exemplo de Janela de Instruções Centralizada ALU branch Cache de Instruções IF Janela de Instruções . . . Cache de dados store 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. load

18 Renomeação de Registradores
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

19 Renomeação de Registradores
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. 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. Elimina antidependência e dependência de saída

20 Previsão de Desvios 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. Nas arquiteturas RISC, a estratégia de desvio atrado foi explorada.

21 Projeto de processadores superescalares
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. 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.

22 Projeto de processadores superescalares
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). Nas arquiteturas RISC, a estratégia de desvio atrado foi explorada.

23 Projeto de processadores superescalares
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.

24 Projeto de processadores superescalares
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 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. 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.

25 Projeto de processadores superescalares
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. O decodificador traduz cada instrução para até 4 micro-ops (instruções RISC, cada uma com 118 bits)

26 Projeto de processadores superescalares
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 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. As micro-ops geradas são guardadas no trace cache.

27 Projeto de processadores superescalares
Exemplo de arquitetura superescalar: Pentium 4 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. O alocador é ainda responsável por alocar registradores necessários para a execução das micro-ops. (ex. renomeação de registradores) Verifica se um recurso está indisponível para alguma das micro-ops que chegam no alocador.

28 Conceitos iniciais de arquiteturas VLIW
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;

29 VLIW x Superescalar VLIW Superescalar Número de instruções por clock
Utilizam um número fixo de instruções Variam o número de instruções por clock 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és de gerações de HW Não Sim

30 Exercício 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

31 Exercício

32 Projeto no nível RT: Exploração de paralelismo no datapath
Débora Matos


Carregar ppt "Contextualização de Paralelismo em nível de instrução"

Apresentações semelhantes


Anúncios Google