SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Aula 12 - Organização Lógica e
Funcional de um Processador (Parte 2)
Professor: João Victor de Araujo Oliveira
Arquitetura de Computadores 1
Superior em Computação
Instituto Federal de Brasília - Campus Taguatinga
Na aula passada
1. Implementação MIPS básica
2. Convenções lógicas de projeto
3. Construindo um caminho de dados
4. Projetando uma unidade de controle
Hoje
● Visão geral de pipelining
● Hazards de pipeline
○ Hazards Estruturais
○ Hazards de Dados
○ Hazards de Controle
● Previsão de desvios
● Caminho de Dados Usando Pipeline
Pipelining
Pipelining: é uma técnica em que várias instruções
são sobrepostas na execução, semelhante a uma
linha de montagem
● Analogia a um sistema de lavanderia
○ Técnica de pipelining aumenta a vazão
(throughput) do sistema
○ Não diminui o tempo para concluir uma
trouxa de roupas
○ Mas quando temos muitas trouxas para
lavar, traz uma melhoria no tempo total de
conclusão do trabalho
Pipelining
● Se todos os estágios levarem aproximadamente o mesmo tempo e houver
trabalho suficiente para realizar, então:
○ Ganho de velocidade devido à técnica de pipelining será igual ao número de estágios do pipeline!
■ O pipeline da lavanderia é potencialmente 4 vezes mais rápida do que sem pipeline
● Mesmo princípio é aplicado em um pipeline
computacional
○ Podemos dividir nosso caminho de dados em diferentes
estágios e definir um tempo de ciclo de clock que seja
suficiente para executar qualquer um desses estágios.
Pipelining
● Pipeline para a implementação MIPS simples
○ Podemos dividir a execução das instruções em 5 estágios
1. Buscar a instrução da memória
2. Ler as instruções enquanto a instrução é decodificada (simultaneamente)
3. Executar a operação ou calcular o endereço de memória de dados
4. Acessar um operando na memória de dados
5. Escrever o resultado em um registrador
Exercício 1 (Resolvido)
Compare o tempo médio entre as instruções de uma implementação em ciclo único, em que todas as
instruções levam um ciclo de clock, com uma implementação com pipeline. Os tempos de operação
para as principais unidades funcionais neste exemplo são de:
● 200 ps para acesso à memória
● 200 ps para operação com ALU
● 100 ps para leitura ou escrita de registradores.
No modelo de ciclo único, cada instrução leva exatamente um ciclo de clock, de modo que o ciclo
precisa ser esticado para acomodar a instrução mais lenta.
Exercício 1 (Resolvido)
● Precisamos calcular o tempo de execução para cada tipo de instrução
● No projeto de ciclo único precisamos contemplar a instrução mais lenta: LW que leva 800 ps
● No projeto de pipeline temos que definir o ciclo de um estágio igual à etapa mais lenta: 200 ps
Exercício 1 (Resolvido)
Comparação inicial: execução de três
loads
● Foi necessário aumentar o ciclo
de algumas etapas no pipeline
● Ganho de 4 vezes sem
considerar a execução da
primeira linha de comando
Hazards de Pipeline
● Existem situações no pipeline em que a próxima instrução não pode ser
executada no ciclo de clock seguinte
○ Esses eventos são chamados de Hazards e podem ser de três tipos
1. Hazards Estruturais
2. Hazards de dados
3. Hazards de controle (Próxima aula)
Hazards Estruturais
● Hazard Estrutural: O hardware não admite a combinação de instruções que
querem executar no mesmo ciclo de clock
○ Ex.: Suponha que tenhamos uma única memória para instruções e dados
Hazards de dados
● Hazard de dados: Uma instrução planejada não pode ser executada no ciclo
de clock correto porque os dados necessários para executar a instrução ainda
não estão disponíveis.
○ Surgem quando uma instrução depende de uma anterior, que ainda está no pipeline
add $s0, $t0, $t1
sub $t2, $s0, $t3
○ Note que a instrução add não escreve o resultado de $s0 até o quinto estágio
○ Ou seja, o processador deveria ter que ficar parado por 3 ciclos de clock até que sub consiga
realizar a etapa de decodificação da instrução
Hazards de dados
● Principal solução para o hazard de dados: Fowarding ( ou bypass)
○ Não precisamos esperar que a instrução anterior termine antes de tentar resolver o problema
○ No exemplo anterior:
■ Assim que a ALU gerasse o resultado da soma para a instrução add, poderíamos fornecê-la
como uma entrada para a instrução sub
● Fowarding: um método para resolver hazards de dados utilizando o elemento de
dados que falta a partir de buffers internos, em vez de esperar que chegue nos
registradores ou na memória
add $s0, $t0, $t1 sub
$t2, $s0, $t3
Exercício 2 (resolvido)
Para as duas instruções anteriores, mostre quais estágios do pipeline estariam conectados pelo forwarding.
Use o desenho abaixo para representar o caminho de dados durante os cinco estágios do pipeline
Obs.:
● O sombreamento indica que o elemento é usado pela instrução. Logo, MEM tem um fundo branco
porque add não acessa a memória de dados.
● O sombreamento na metade direita do banco de registradores ou memória significa que o elemento é
lido nesse estágio, e o sombreamento da metade esquerda significa que ele é escrito nesse estágio.
Exercício 2 (resolvido)
Note que o bypass só será válido se o estágio de destino estiver mais adiante no tempo do que o estágio
de origem
● Nada de viagens no tempo nessa disciplina!
Exercício 3 (Resolvido)
O que aconteceria se no exercício anterior a primeira instrução fosse um lw que
recebe dados em $s0?
Note que:
● Os dados desejados só estariam disponíveis depois do quarto estágio da primeira instrução na
dependência, que é muito tarde para a entrada do terceiro estágio de sub
● Precisaremos atrasar um estágio para um hazard de dados no uso do load
○ Esse atraso no processamento das instruções é chamado de stall e é também chamado de
bolha (como veremos na figura a seguir)
lw $s0, 20 ($t1)
sub $t2, $s0, $t3
Exercício 3 (Resolvido)
Hazard de Controle
● Também chamado de Hazard de desvio
○ A próxima instrução não pode ser executada no devido ciclo de clock do pipeline porque a
instrução buscada não é aquela necessária
■ Ou seja, o fluxo de instrução não é aquilo que o pipeline esperava
○ Em uma instrução de desvio (beq, por exemplo), não sabemos, a priori, se a próxima
instrução será
■ PC+4 ou
■ Determinada pelo offset/label.
○ Como as instruções são sobrepostas, precisaríamos ocasionar um Stall no pipeline
imediatamente após buscarmos um desvio, esperando até que o pipeline determine o
resultado do desvio para saber em qual endereço apanhar a próxima instrução
Hazard de Controle
● Suponha que adicionamos hardware suficiente para testar os registradores,
calcular o endereço de desvio e atualizar o PC no segundo estágio (ID)
○ Mesmo assim precisaríamos ocasionar um stall em um ciclo de clock
Hazard de Controle
● Custo de tratar um hazard de controle é alto (especialmente em hardwares mais
complexos)
○ Nem sempre será possível “adiantar” a decisão da instrução de desvio na fase ID
○ Segunda solução: Predição para tratar desvios
○ Técnica mais simples: prever que todos os desvios não serão tomados! (Preditores estáticos)
● Quando estiver certo o pipeline prosseguirá a toda velocidade!
● Quando estiver errado, terá que pagar o custo de ocasionar stall!
○ Quando a escolha estiver errada, o controle do pipeline terá de garantir que as
instruções após o desvio errado não tenham efeito, reiniciando o pipeline a
partir do endereço de desvio apropriado
Exemplo de Previsão de Desvios
Desvio não tomado
Desvio tomado
Preditores de Desvios Dinâmicos
● Previsores estáticos não levam em consideração a individualidade de uma
instrução de desvio específica
○ Preditores de desvios dinâmicos: fazem suas escolhas dependendo do comportamento de
cada desvio e podem mudar as previsões para um desvio durante a vida de um programa
○ Técnica mais comum: manter um histórico de cada desvio como tomado ou não tomado, e
depois usar o comportamento passado recente para prever o futuro
■ A quantidade e o tipo de histórico mantido tem se tornado extensos,
resultando em preditores que podem prever desvios corretamente, com
uma precisão superior a 90%
Exercício 4
● Para cada sequência de código a seguir, indique se
1. Deverá sofrer stall;
2. Pode evitar stalls usando apenas forwarding; ou
3. Pode ser executada sem stall ou forwarding.
Caminho de Dados Usando Pipeline
Podemos dividir nosso
processador uniciclo em nos
cinco estágios do pipeline
1. IF - Busca de instruções
2. ID - Decodificação de Instruções
e leitura do banco de
registradores
3. EX - Execução ou cálculo de
endereço
4. MEM - Acesso à memória de
dados
5. WB - Escrita do resultado
Caminho de Dados Usando Pipeline
Duas exceções em que os dados
não se movem da esquerda para a
direita
1. Em WB, pois coloca o
resultado de volta no banco de
registradores
2. Seleção do próximo valor de
PC entre PC+4 e o endereço de
desvio
Visão da execução de um pipeline onde cada instrução tem o seu próprio caminho de dados
Como podemos garantir
que executaremos 3
instruções em um
mesmo caminho de
dados, sem que um
dado de uma instrução
não atrapalhe outra?
Caminho de dados na versão pipeline
A fim de reter o valor de uma instrução individual para seus outros quatro estágios, o valor lido da memória de instruções
precisa ser salvo em um registrador. Argumentos semelhantes se aplicam a cada estágio do pipeline, de modo que
precisamos colocar registradores sempre que existam linhas divisórias entre os estágios do pipeline
Sequência de estágios para a execução de uma instrução load word
Busca de instruções
- Instrução é lida da
memória usando o
endereço de PC e
armazenada no registrador
IF/ID
- PC + 4 é escrito de volta
ao PC (para a próxima
instrução) e também
armazenado em IF/ID, caso
seja necessário em uma
instrução do tipo beq
Sequência de estágios para a execução de uma instrução load word
Decodificação da Instrução
- A instrução é lida de IF/ID,
fornecendo os campos
imediato de 16 bits e os
dois números dos
registradores do campo rs
e rt
- Todos os três valores são
armazenados em ID/EX,
assim como o endereço no
PC incrementado
Sequência de estágios para a execução de uma instrução load word
Execução
- É lido de ID/EX o conteúdo
do primeiro registrador e o
imediato com sinal
extendido
- A soma destes dois
valores é armazenada em
EX/MEM
Sequência de estágios para a execução de uma instrução load word
Acesso a memória
- é lido o endereço
resultante gerado pela ALU
que reside em EX/MEM
- O valor carregado do
endereço é salvo em
MEM/WB
Sequência de estágios para a execução de uma instrução load word
Escrita do resultado
O valor do dado carregado
da memória e armazenado
em MEM/WB é escrito no
banco de registradores
Está faltando algo para
que o lw se complete
corretamente?
Caminho de dados correto, passando o número do registrador de destino
para as etapas posteriores
Representando um pipeline graficamente
● Podemos representar a execução de múltiplas instruções em um pipeline
simultaneamente através de dois estilos básicos de diagramas
○ Diagrama de pipeline com múltiplos ciclos de clock
○ Diagrama de pipeline com único ciclo de clock
● Considere o seguinte código
Diagrama de pipeline com múltiplos ciclos de clock
Diagrama de pipeline com múltiplos ciclos de clock
Diagrama de Ciclo único de clock correspondente ao ciclo de clock 5
Exercício 5
De acordo com o pipeline estudado nesta disciplina
e do fragmento de código a seguir, considerando
que $s4 = 3, responda as questões abaixo:
loop:
beq $s4,$zero end_loop
sw $s1, 0($s2)
add $s1, $s1,$s3
lw $s3,0($s2)
addi $s2,$s3, 8
addi $s4,$s4, -1
j loop
end_loop:
a) Mostre a temporização dessa sequência de instruções para o
pipeline MIPS de cinco estágios com hardware de adiantamento
ou bypassing, e que uma leitura e uma escrita de registrador no
mesmo ciclo de clock “adiantam” através do banco de
registradores. Suponha que o desvio seja tratado esvaziando o
pipeline até que se tenha calculado o endereço efetivo da próxima
instrução na etapa de EX. Além disso, suponha que a instrução de
jump seja tratado esvaziando o pipeline até que se tenha
calculado o endereço da próxima instrução na etapa de ID.
Obs.: Só é necessário mostrar uma iteração do loop mais a
próxima instrução da iteração seguinte no diagrama de múltiplos
ciclos de pipeline.
b) Se todas as etapas deste pipeline levam um ciclo, de quantos
ciclos esse loop precisa para ser executado?
Nas Próximas aulas
● Exercícios
● Tratamento de exceções
● Introdução a paralelismo a nível de instruções
Referências
Hennessy, J. (2017). Organização e Projeto de Computadores. 5th edição. Grupo
GEN.

Weitere ähnliche Inhalte

Was ist angesagt?

15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
Ricardo Bolanho
 
Circuitos elétricos industriais_2014
Circuitos elétricos industriais_2014Circuitos elétricos industriais_2014
Circuitos elétricos industriais_2014
Marcio Oliani
 
éTude et mise_en_place_d_une_solution_voip_sécurisée
éTude et mise_en_place_d_une_solution_voip_sécuriséeéTude et mise_en_place_d_une_solution_voip_sécurisée
éTude et mise_en_place_d_une_solution_voip_sécurisée
ahmedElkha
 
Arquiteturas Paralelas e Distribuídas - Aula 3 - Pipeline
Arquiteturas Paralelas e Distribuídas - Aula 3 - PipelineArquiteturas Paralelas e Distribuídas - Aula 3 - Pipeline
Arquiteturas Paralelas e Distribuídas - Aula 3 - Pipeline
Cleber Fonseca
 

Was ist angesagt? (20)

Principe de fonctionnement du cryptage RSA
Principe de fonctionnement du cryptage RSAPrincipe de fonctionnement du cryptage RSA
Principe de fonctionnement du cryptage RSA
 
Aula 4 - Estruturas condicionais
Aula 4 - Estruturas condicionaisAula 4 - Estruturas condicionais
Aula 4 - Estruturas condicionais
 
C2 Réseaux : medias - equipements
C2 Réseaux : medias - equipementsC2 Réseaux : medias - equipements
C2 Réseaux : medias - equipements
 
15 algoritmos de busca em tabelas - sequencial e binaria
15   algoritmos de busca em tabelas - sequencial e binaria15   algoritmos de busca em tabelas - sequencial e binaria
15 algoritmos de busca em tabelas - sequencial e binaria
 
Funções em C
Funções em CFunções em C
Funções em C
 
Segurança de Dados e Informações - Aula 4 - Criptografia
Segurança de Dados e Informações - Aula 4 - CriptografiaSegurança de Dados e Informações - Aula 4 - Criptografia
Segurança de Dados e Informações - Aula 4 - Criptografia
 
Curso de Java (Parte 4)
Curso de Java (Parte 4)Curso de Java (Parte 4)
Curso de Java (Parte 4)
 
Forti gate 110c-install_guid manual
Forti gate 110c-install_guid manualForti gate 110c-install_guid manual
Forti gate 110c-install_guid manual
 
C6 Réseaux : Introduction au routage
C6 Réseaux : Introduction au routageC6 Réseaux : Introduction au routage
C6 Réseaux : Introduction au routage
 
Monitoramento rede
Monitoramento redeMonitoramento rede
Monitoramento rede
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
Circuitos elétricos industriais_2014
Circuitos elétricos industriais_2014Circuitos elétricos industriais_2014
Circuitos elétricos industriais_2014
 
Esquema de ligacao
Esquema de ligacaoEsquema de ligacao
Esquema de ligacao
 
Firewall
FirewallFirewall
Firewall
 
éTude et mise_en_place_d_une_solution_voip_sécurisée
éTude et mise_en_place_d_une_solution_voip_sécuriséeéTude et mise_en_place_d_une_solution_voip_sécurisée
éTude et mise_en_place_d_une_solution_voip_sécurisée
 
Arquiteturas Paralelas e Distribuídas - Aula 3 - Pipeline
Arquiteturas Paralelas e Distribuídas - Aula 3 - PipelineArquiteturas Paralelas e Distribuídas - Aula 3 - Pipeline
Arquiteturas Paralelas e Distribuídas - Aula 3 - Pipeline
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02
 
業務で ISUCON することになった話.pdf
業務で ISUCON することになった話.pdf業務で ISUCON することになった話.pdf
業務で ISUCON することになった話.pdf
 
Linux e sistemas embarcados
Linux e sistemas embarcadosLinux e sistemas embarcados
Linux e sistemas embarcados
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 

Ähnlich wie Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf

Processador mips - parte operativa e parte de controle
Processador mips - parte operativa e parte de controleProcessador mips - parte operativa e parte de controle
Processador mips - parte operativa e parte de controle
Bruno Andretti Duarte
 
So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012
Bill Lima
 

Ähnlich wie Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf (20)

Processador mips - pipeline
Processador mips - pipelineProcessador mips - pipeline
Processador mips - pipeline
 
Pipeline
PipelinePipeline
Pipeline
 
ProcessosEscalonamento.pdf
ProcessosEscalonamento.pdfProcessosEscalonamento.pdf
ProcessosEscalonamento.pdf
 
3 escalonamento processos
3 escalonamento processos3 escalonamento processos
3 escalonamento processos
 
bom-1.pdf
bom-1.pdfbom-1.pdf
bom-1.pdf
 
Lista 03 respostas
Lista 03 respostasLista 03 respostas
Lista 03 respostas
 
Gerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPUGerências de Processos: Escalonamento de CPU
Gerências de Processos: Escalonamento de CPU
 
Processador mips - parte operativa e parte de controle
Processador mips - parte operativa e parte de controleProcessador mips - parte operativa e parte de controle
Processador mips - parte operativa e parte de controle
 
Pipeline Técnica de processadores.
Pipeline Técnica de processadores.Pipeline Técnica de processadores.
Pipeline Técnica de processadores.
 
Arquitetura de computadores: Apostila de pipeline
Arquitetura de computadores: Apostila de pipelineArquitetura de computadores: Apostila de pipeline
Arquitetura de computadores: Apostila de pipeline
 
So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012So gabarito exerciciosescalonamentocpu-2012
So gabarito exerciciosescalonamentocpu-2012
 
Pipeline
PipelinePipeline
Pipeline
 
Processos e threads cap 02 (i unidade)
Processos e threads   cap 02 (i unidade)Processos e threads   cap 02 (i unidade)
Processos e threads cap 02 (i unidade)
 
Exercicios 01 tms i
Exercicios 01 tms iExercicios 01 tms i
Exercicios 01 tms i
 
Kernel cooperativo
Kernel cooperativoKernel cooperativo
Kernel cooperativo
 
Arquitetura pentium
Arquitetura pentiumArquitetura pentium
Arquitetura pentium
 
Pipeline 2
Pipeline 2Pipeline 2
Pipeline 2
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
P910Aula07
P910Aula07P910Aula07
P910Aula07
 
Exercicios 01 02 tms i
Exercicios 01 02 tms iExercicios 01 02 tms i
Exercicios 01 02 tms i
 

Aula 8 - Organização Lógica e Funcional de um Processador (Parte 2).pdf

  • 1. Aula 12 - Organização Lógica e Funcional de um Processador (Parte 2) Professor: João Victor de Araujo Oliveira Arquitetura de Computadores 1 Superior em Computação Instituto Federal de Brasília - Campus Taguatinga
  • 2. Na aula passada 1. Implementação MIPS básica 2. Convenções lógicas de projeto 3. Construindo um caminho de dados 4. Projetando uma unidade de controle
  • 3. Hoje ● Visão geral de pipelining ● Hazards de pipeline ○ Hazards Estruturais ○ Hazards de Dados ○ Hazards de Controle ● Previsão de desvios ● Caminho de Dados Usando Pipeline
  • 4. Pipelining Pipelining: é uma técnica em que várias instruções são sobrepostas na execução, semelhante a uma linha de montagem ● Analogia a um sistema de lavanderia ○ Técnica de pipelining aumenta a vazão (throughput) do sistema ○ Não diminui o tempo para concluir uma trouxa de roupas ○ Mas quando temos muitas trouxas para lavar, traz uma melhoria no tempo total de conclusão do trabalho
  • 5. Pipelining ● Se todos os estágios levarem aproximadamente o mesmo tempo e houver trabalho suficiente para realizar, então: ○ Ganho de velocidade devido à técnica de pipelining será igual ao número de estágios do pipeline! ■ O pipeline da lavanderia é potencialmente 4 vezes mais rápida do que sem pipeline ● Mesmo princípio é aplicado em um pipeline computacional ○ Podemos dividir nosso caminho de dados em diferentes estágios e definir um tempo de ciclo de clock que seja suficiente para executar qualquer um desses estágios.
  • 6. Pipelining ● Pipeline para a implementação MIPS simples ○ Podemos dividir a execução das instruções em 5 estágios 1. Buscar a instrução da memória 2. Ler as instruções enquanto a instrução é decodificada (simultaneamente) 3. Executar a operação ou calcular o endereço de memória de dados 4. Acessar um operando na memória de dados 5. Escrever o resultado em um registrador
  • 7. Exercício 1 (Resolvido) Compare o tempo médio entre as instruções de uma implementação em ciclo único, em que todas as instruções levam um ciclo de clock, com uma implementação com pipeline. Os tempos de operação para as principais unidades funcionais neste exemplo são de: ● 200 ps para acesso à memória ● 200 ps para operação com ALU ● 100 ps para leitura ou escrita de registradores. No modelo de ciclo único, cada instrução leva exatamente um ciclo de clock, de modo que o ciclo precisa ser esticado para acomodar a instrução mais lenta.
  • 8. Exercício 1 (Resolvido) ● Precisamos calcular o tempo de execução para cada tipo de instrução ● No projeto de ciclo único precisamos contemplar a instrução mais lenta: LW que leva 800 ps ● No projeto de pipeline temos que definir o ciclo de um estágio igual à etapa mais lenta: 200 ps
  • 9. Exercício 1 (Resolvido) Comparação inicial: execução de três loads ● Foi necessário aumentar o ciclo de algumas etapas no pipeline ● Ganho de 4 vezes sem considerar a execução da primeira linha de comando
  • 10. Hazards de Pipeline ● Existem situações no pipeline em que a próxima instrução não pode ser executada no ciclo de clock seguinte ○ Esses eventos são chamados de Hazards e podem ser de três tipos 1. Hazards Estruturais 2. Hazards de dados 3. Hazards de controle (Próxima aula)
  • 11. Hazards Estruturais ● Hazard Estrutural: O hardware não admite a combinação de instruções que querem executar no mesmo ciclo de clock ○ Ex.: Suponha que tenhamos uma única memória para instruções e dados
  • 12. Hazards de dados ● Hazard de dados: Uma instrução planejada não pode ser executada no ciclo de clock correto porque os dados necessários para executar a instrução ainda não estão disponíveis. ○ Surgem quando uma instrução depende de uma anterior, que ainda está no pipeline add $s0, $t0, $t1 sub $t2, $s0, $t3 ○ Note que a instrução add não escreve o resultado de $s0 até o quinto estágio ○ Ou seja, o processador deveria ter que ficar parado por 3 ciclos de clock até que sub consiga realizar a etapa de decodificação da instrução
  • 13. Hazards de dados ● Principal solução para o hazard de dados: Fowarding ( ou bypass) ○ Não precisamos esperar que a instrução anterior termine antes de tentar resolver o problema ○ No exemplo anterior: ■ Assim que a ALU gerasse o resultado da soma para a instrução add, poderíamos fornecê-la como uma entrada para a instrução sub ● Fowarding: um método para resolver hazards de dados utilizando o elemento de dados que falta a partir de buffers internos, em vez de esperar que chegue nos registradores ou na memória add $s0, $t0, $t1 sub $t2, $s0, $t3
  • 14. Exercício 2 (resolvido) Para as duas instruções anteriores, mostre quais estágios do pipeline estariam conectados pelo forwarding. Use o desenho abaixo para representar o caminho de dados durante os cinco estágios do pipeline Obs.: ● O sombreamento indica que o elemento é usado pela instrução. Logo, MEM tem um fundo branco porque add não acessa a memória de dados. ● O sombreamento na metade direita do banco de registradores ou memória significa que o elemento é lido nesse estágio, e o sombreamento da metade esquerda significa que ele é escrito nesse estágio.
  • 15. Exercício 2 (resolvido) Note que o bypass só será válido se o estágio de destino estiver mais adiante no tempo do que o estágio de origem ● Nada de viagens no tempo nessa disciplina!
  • 16. Exercício 3 (Resolvido) O que aconteceria se no exercício anterior a primeira instrução fosse um lw que recebe dados em $s0? Note que: ● Os dados desejados só estariam disponíveis depois do quarto estágio da primeira instrução na dependência, que é muito tarde para a entrada do terceiro estágio de sub ● Precisaremos atrasar um estágio para um hazard de dados no uso do load ○ Esse atraso no processamento das instruções é chamado de stall e é também chamado de bolha (como veremos na figura a seguir) lw $s0, 20 ($t1) sub $t2, $s0, $t3
  • 18. Hazard de Controle ● Também chamado de Hazard de desvio ○ A próxima instrução não pode ser executada no devido ciclo de clock do pipeline porque a instrução buscada não é aquela necessária ■ Ou seja, o fluxo de instrução não é aquilo que o pipeline esperava ○ Em uma instrução de desvio (beq, por exemplo), não sabemos, a priori, se a próxima instrução será ■ PC+4 ou ■ Determinada pelo offset/label. ○ Como as instruções são sobrepostas, precisaríamos ocasionar um Stall no pipeline imediatamente após buscarmos um desvio, esperando até que o pipeline determine o resultado do desvio para saber em qual endereço apanhar a próxima instrução
  • 19. Hazard de Controle ● Suponha que adicionamos hardware suficiente para testar os registradores, calcular o endereço de desvio e atualizar o PC no segundo estágio (ID) ○ Mesmo assim precisaríamos ocasionar um stall em um ciclo de clock
  • 20. Hazard de Controle ● Custo de tratar um hazard de controle é alto (especialmente em hardwares mais complexos) ○ Nem sempre será possível “adiantar” a decisão da instrução de desvio na fase ID ○ Segunda solução: Predição para tratar desvios ○ Técnica mais simples: prever que todos os desvios não serão tomados! (Preditores estáticos) ● Quando estiver certo o pipeline prosseguirá a toda velocidade! ● Quando estiver errado, terá que pagar o custo de ocasionar stall! ○ Quando a escolha estiver errada, o controle do pipeline terá de garantir que as instruções após o desvio errado não tenham efeito, reiniciando o pipeline a partir do endereço de desvio apropriado
  • 21. Exemplo de Previsão de Desvios Desvio não tomado Desvio tomado
  • 22. Preditores de Desvios Dinâmicos ● Previsores estáticos não levam em consideração a individualidade de uma instrução de desvio específica ○ Preditores de desvios dinâmicos: fazem suas escolhas dependendo do comportamento de cada desvio e podem mudar as previsões para um desvio durante a vida de um programa ○ Técnica mais comum: manter um histórico de cada desvio como tomado ou não tomado, e depois usar o comportamento passado recente para prever o futuro ■ A quantidade e o tipo de histórico mantido tem se tornado extensos, resultando em preditores que podem prever desvios corretamente, com uma precisão superior a 90%
  • 23. Exercício 4 ● Para cada sequência de código a seguir, indique se 1. Deverá sofrer stall; 2. Pode evitar stalls usando apenas forwarding; ou 3. Pode ser executada sem stall ou forwarding.
  • 24. Caminho de Dados Usando Pipeline Podemos dividir nosso processador uniciclo em nos cinco estágios do pipeline 1. IF - Busca de instruções 2. ID - Decodificação de Instruções e leitura do banco de registradores 3. EX - Execução ou cálculo de endereço 4. MEM - Acesso à memória de dados 5. WB - Escrita do resultado
  • 25. Caminho de Dados Usando Pipeline Duas exceções em que os dados não se movem da esquerda para a direita 1. Em WB, pois coloca o resultado de volta no banco de registradores 2. Seleção do próximo valor de PC entre PC+4 e o endereço de desvio
  • 26. Visão da execução de um pipeline onde cada instrução tem o seu próprio caminho de dados Como podemos garantir que executaremos 3 instruções em um mesmo caminho de dados, sem que um dado de uma instrução não atrapalhe outra?
  • 27. Caminho de dados na versão pipeline A fim de reter o valor de uma instrução individual para seus outros quatro estágios, o valor lido da memória de instruções precisa ser salvo em um registrador. Argumentos semelhantes se aplicam a cada estágio do pipeline, de modo que precisamos colocar registradores sempre que existam linhas divisórias entre os estágios do pipeline
  • 28. Sequência de estágios para a execução de uma instrução load word Busca de instruções - Instrução é lida da memória usando o endereço de PC e armazenada no registrador IF/ID - PC + 4 é escrito de volta ao PC (para a próxima instrução) e também armazenado em IF/ID, caso seja necessário em uma instrução do tipo beq
  • 29. Sequência de estágios para a execução de uma instrução load word Decodificação da Instrução - A instrução é lida de IF/ID, fornecendo os campos imediato de 16 bits e os dois números dos registradores do campo rs e rt - Todos os três valores são armazenados em ID/EX, assim como o endereço no PC incrementado
  • 30. Sequência de estágios para a execução de uma instrução load word Execução - É lido de ID/EX o conteúdo do primeiro registrador e o imediato com sinal extendido - A soma destes dois valores é armazenada em EX/MEM
  • 31. Sequência de estágios para a execução de uma instrução load word Acesso a memória - é lido o endereço resultante gerado pela ALU que reside em EX/MEM - O valor carregado do endereço é salvo em MEM/WB
  • 32. Sequência de estágios para a execução de uma instrução load word Escrita do resultado O valor do dado carregado da memória e armazenado em MEM/WB é escrito no banco de registradores Está faltando algo para que o lw se complete corretamente?
  • 33. Caminho de dados correto, passando o número do registrador de destino para as etapas posteriores
  • 34. Representando um pipeline graficamente ● Podemos representar a execução de múltiplas instruções em um pipeline simultaneamente através de dois estilos básicos de diagramas ○ Diagrama de pipeline com múltiplos ciclos de clock ○ Diagrama de pipeline com único ciclo de clock ● Considere o seguinte código
  • 35. Diagrama de pipeline com múltiplos ciclos de clock
  • 36. Diagrama de pipeline com múltiplos ciclos de clock
  • 37. Diagrama de Ciclo único de clock correspondente ao ciclo de clock 5
  • 38. Exercício 5 De acordo com o pipeline estudado nesta disciplina e do fragmento de código a seguir, considerando que $s4 = 3, responda as questões abaixo: loop: beq $s4,$zero end_loop sw $s1, 0($s2) add $s1, $s1,$s3 lw $s3,0($s2) addi $s2,$s3, 8 addi $s4,$s4, -1 j loop end_loop: a) Mostre a temporização dessa sequência de instruções para o pipeline MIPS de cinco estágios com hardware de adiantamento ou bypassing, e que uma leitura e uma escrita de registrador no mesmo ciclo de clock “adiantam” através do banco de registradores. Suponha que o desvio seja tratado esvaziando o pipeline até que se tenha calculado o endereço efetivo da próxima instrução na etapa de EX. Além disso, suponha que a instrução de jump seja tratado esvaziando o pipeline até que se tenha calculado o endereço da próxima instrução na etapa de ID. Obs.: Só é necessário mostrar uma iteração do loop mais a próxima instrução da iteração seguinte no diagrama de múltiplos ciclos de pipeline. b) Se todas as etapas deste pipeline levam um ciclo, de quantos ciclos esse loop precisa para ser executado?
  • 39. Nas Próximas aulas ● Exercícios ● Tratamento de exceções ● Introdução a paralelismo a nível de instruções
  • 40. Referências Hennessy, J. (2017). Organização e Projeto de Computadores. 5th edição. Grupo GEN.