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
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
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