Você está na página 1de 70

Capítulo 4

O nível de
microarquitetura

slide 1 © 2014 Pearson. Todos os direitos reservados.


Um exemplo de
microarquitetura

• Um modelo conveniente para o projeto de microarquitetura


é pensar no projeto como um problema de programação
no qual cada instrução no nível ISA é uma função a ser
chamada por um programa mestre.

• Nesse modelo, o programa mestre é um laço simples, sem


fim, que determina uma função a ser invocada, chama a
função e então começa de novo.

• O microprograma tem um conjunto de variáveis


denominado estado do computador, que pode ser
acessado por todas as funções.
slide 2 © 2014 Pearson. Todos os direitos reservados.
Um exemplo de
microarquitetura

O caminho de dados é a
parte da CPU que contém a
ULA, suas entradas e suas
saídas.

slide 3 © 2014 Pearson. Todos os direitos reservados.


Um exemplo de
microarquitetura
• Combinações úteis de sinais de ULA e a função
executada.

slide 4 © 2014 Pearson. Todos os direitos reservados.


Um exemplo de
microarquitetura
• Diagrama de temporização de um ciclo de caminho de
dados.

slide 5 © 2014 Pearson. Todos os direitos reservados.


Um exemplo de
microarquitetura
• A porta de 32 bits é controlada por dois registradores, MAR
(Memory Address Register – registrador de endereço
de memória) e MDR (Memory Data Register –
registrador de dados de memória).

• Para controlar o caminho de dados precisamos de 29


sinais, que podem ser divididos em cinco grupos
funcionais, como descreveremos a seguir:

o 9 sinais para controlar escrita de dados do barramento C


para registradores.

o 9 sinais para controlar habilitação de registradores dirigidos


ao barramento B para a entrada da ULA.
slide 6 © 2014 Pearson. Todos os direitos reservados.
Um exemplo de
microarquitetura
o 8 sinais para controlar as funções da ULA e do deslocador.

o 2 sinais (não mostrados) para indicar leitura/escrita na


memória via MAR/MDR.

o 1 sinal (não mostrado) para indicar busca na memória via


PC/MBR.

• A figura a seguir mostra o formato da microinstrução para a


Mic-1.

• Posteriormente, veja o diagrama de blocos completo de


nossa microarquitetura de exemplo, a Mic-1.
slide 7 © 2014 Pearson. Todos os direitos reservados.
Um exemplo de
microarquitetura

slide 8 © 2014 Pearson. Todos os direitos reservados.


Um exemplo de
microarquitetura

slide 9 © 2014 Pearson. Todos os direitos reservados.


Um exemplo de
microarquitetura
• O sequenciador deve produzir dois tipos de informação a
cada ciclo:

1. O estado de cada sinal de controle no sistema.


2. O endereço da microinstrução que deve ser executada
em seguida.

• O item mais importante na parte do controle da máquina é


uma memória denominada armazenamento de controle.

• Uma vez que o armazenamento de controle é uma


memória, ele precisa de seu próprio registrador de
endereço de memória e de dados de memória.
slide 10 © 2014 Pearson. Todos os direitos reservados.
Exemplo de ISA: IJVM

• Uma área da memória, denominada pilha, é reservada


para variáveis, mas variáveis individuais não obtêm
endereços absolutos nela.

slide 11 © 2014 Pearson. Todos os direitos reservados.


Exemplo de ISA: IJVM

• Utilização de uma pilha de operandos para efetuar um


cálculo aritmético.

• Enquanto todas as máquinas usam uma pilha para


armazenar variáveis locais, nem todas usam uma pilha de
operandos como essa para efetuar aritmética.
slide 12 © 2014 Pearson. Todos os direitos reservados.
Exemplo de ISA: IJVM

• A arquitetura da IJVM consiste em uma memória que pode


ser vista de dois modos: um arranjo de 4.294.967.296
bytes (4 GB) ou um arranjo de 1.073.741.824 palavras,
cada uma consistindo em 4 bytes.

• As seguintes áreas de memória são definidas:

1. O conjunto de constantes.

2. O quadro de variáveis locais.

3. A pilha de operandos.

4. A área de método.
slide 13 © 2014 Pearson. Todos os direitos reservados.
Exemplo de ISA: IJVM

• As várias partes da memória IJVM.

slide 14 © 2014 Pearson. Todos os direitos reservados.


Exemplo de ISA: IJVM

• Conjunto de instruções da IJVM.

slide 15 © 2014 Pearson. Todos os direitos reservados.


Exemplo de ISA: IJVM

• Vamos ver como Java e IJVM estão relacionadas uma com


a outra:

o Fragmento em Java

slide 16 © 2014 Pearson. Todos os direitos reservados.


Exemplo de ISA: IJVM

• Vamos ver como Java e IJVM estão relacionadas uma com


a outra:

o Linguagem de montagem Java correspondente.

slide 17 © 2014 Pearson. Todos os direitos reservados.


Exemplo de ISA: IJVM

• Vamos ver como Java e IJVM estão relacionadas uma com


a outra:

o Programa IJVM em hexadecimal.

slide 18 © 2014 Pearson. Todos os direitos reservados.


Exemplo de ISA: IJVM

• Pilha após cada instrução das figuras anteriores:

slide 19 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Suponha que, em determinado ciclo, queremos


incrementar o valor de SP.

• Também queremos iniciar uma operação de leitura e


queremos que a próxima instrução seja a que reside no
local 122 do armazenamento de controle.

• Poderíamos escrever

ReadRegister = SP, ULA = INC, WSP, Read,


NEXT_ADDRESS = 122

slide 20 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Combinaremos as operações de modo natural e intuitivo


para captar o efeito daquilo que está acontecendo:

SP = SP + 1; rd

• Podemos usar uma declaração de atribuição simples,


como em Java, para indicar a operação a ser executada.

• Temos de tomar o cuidado de usar somente operações


válidas.

slide 21 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• O mesmo registrador não pode receber um valor da


memória e o caminho de dados no mesmo ciclo.

• Considere o código

MAR = SP; rd
MDR = H

• Lembre-se de que cada microinstrução deve fornecer


explicitamente o endereço da próxima a ser executada.

• Às vezes o microprogramador quer desviar, condicional ou


incondicionalmente.
slide 22 © 2014 Pearson. Todos os direitos reservados.
Exemplo de implementação

• A notação para desvios incondicionais é fácil:


goto label

• Para desvios condicionais, precisamos de uma notação


diferente. A notação que usaremos será
goto (MBR OR value)

• Essa sintaxe diz ao microassembler para usar value para


NEXT_ADDRESS e ajustar o bit JMPC de modo que MBR
e NEXT_ADDRESS sejam combinados por uma operação
OR, e o resultado, armazenado em MPC. Se value for 0,
que é o caso normal, basta escrever
goto (MBR)
slide 23 © 2014 Pearson. Todos os direitos reservados.
Exemplo de implementação

• Microprograma para a Mic-1.

slide 24 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 25 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 26 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 27 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 28 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 29 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 30 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 31 © 2014 Pearson. Todos os direitos reservados.


Exemplo de implementação

• Microprograma para a Mic-1.

slide 32 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura

• Velocidade pode ser medida de várias maneiras, mas


dadas uma tecnologia de circuitos e uma ISA, há três
abordagens básicas para aumentar a velocidade de
execução:

1. Reduzir o número de ciclos de clock necessários para


executar uma instrução.

2. Simplificar a organização de modo que o ciclo de clock


possa ser mais curto.

3. Sobrepor a execução de instruções.


slide 33 © 2014 Pearson. Todos os direitos reservados.
Projeto do nível de
microarquitetura

• O número de ciclos de clock necessários para executar um


conjunto de operações é conhecido como comprimento
do caminho.

• Reduzir o número de ciclos de instrução necessários para


buscar instruções requer mais do que apenas um circuito
adicional para incrementar o PC.

• Sobrepor a execução de instruções é, de longe, o mais


interessante e oferece a melhor oportunidade para
drásticos aumentos de velocidade.

slide 34 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura

• Na Mic-1, o laço principal consiste em uma microinstrução


que deve ser executada no início de cada instrução IJVM.

• O laço principal ocorre antes e depois de cada instrução:

slide 35 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura

• Na figura abaixo, a sequência foi reduzida a três instruções


que incorporam as instruções do laço principal,
aproveitando um ciclo de clock no qual a ULA não é usada
em pop2 para economizar um ciclo e novamente em
Main1.

slide 36 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• O que mais podemos fazer para reduzir o comprimento do
caminho de execução?

• Outra solução fácil é ter dois barramentos completos de


entrada para ULA, um barramento A e um B, o que dá três
barramentos no total.

slide 37 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Para cada instrução, podem ocorrer as seguintes
operações:

1. O PC é passado pela ULA e incrementado.

2. O PC é usado para buscar o próximo byte na sequência


de instruções.

3. Operandos são lidos da memória.

4. Operandos são escritos para a memória.

5. A ULA efetua um cálculo e os resultados são


armazenados de volta.
slide 38 © 2014 Pearson. Todos os direitos reservados.
Projeto do nível de
microarquitetura
• Unidade de busca para a Mic-1.

slide 39 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Máquina de estado finito para implementar a IFU.

slide 40 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura

• A IFU pode reduzir


muito o comprimento do
caminho da instrução
média.

• O caminho de dados
para a Mic-2.

slide 41 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 42 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 43 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 44 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 45 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 46 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 47 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Microprograma para a Mic-2.

slide 48 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Que tal tentar reduzir o tempo de ciclo?

• Há três componentes importantes no ciclo do caminho de


dados propriamente dito:

1. O tempo para levar os registradores selecionados até os


barramentos A e B.

2. O tempo para que a ULA e o deslocador realizem seu


trabalho.

3. O tempo para os resultados voltarem aos registradores e


serem armazenados.
slide 49 © 2014 Pearson. Todos os direitos reservados.
Projeto do nível de
microarquitetura

• Na figura ao lado,
mostramos uma nova
arquitetura e três
barramentos, incluindo
a IFU, mas com três
registradores
adicionais, cada um
inserido no meio de
cada barramento.

slide 50 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura

• Embora o programa Mic-3 leve mais ciclos do que o


programa Mic-2, ainda assim é mais rápido.

• O pipeline deixou a máquina mais rápida, ainda que


tivéssemos de protelar uma vez para evitar uma
dependência.

• Pipeline é uma técnica fundamental em todas as CPUs


modernas, portanto, é importante entendê-lo bem.

• A seguir vemos o caminho de dados ilustrado graficamente


como um pipeline.
slide 51 © 2014 Pearson. Todos os direitos reservados.
Projeto do nível de
microarquitetura

slide 52 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura
• Nossa última microarquitetura é a Mic-4.

slide 53 © 2014 Pearson. Todos os direitos reservados.


Projeto do nível de
microarquitetura

• A Mic-4 tem um projeto de alto pipelining, com sete


estágios e hardware muito mais complexo.

• O pipeline é mostrado em esquema na figura abaixo.

slide 54 © 2014 Pearson. Todos os direitos reservados.


Melhoria de desempenho

• Melhorias de implementação são modos de construir uma


nova CPU ou memória para fazer o sistema funcionar mais
rápido sem mudar a arquitetura.

• Um modo de melhorar a implementação é usar um clock


mais rápido.

• Alguns tipos de melhorias só podem ser feitos com a


alteração da arquitetura.

• Para conseguir um desempenho completo, o software tem


de ser alterado, ou ao menos recompilado com um novo
compilador que aproveita as novas características.
slide 55 © 2014 Pearson. Todos os direitos reservados.
Memória cache

• Uma cache guarda as palavras de memória usadas mais


recentemente em uma pequena memória rápida, o que
acelera o acesso a elas.

• É possível obter muitos benefícios com caches separadas


para instruções e dados, algo que muitas vezes
denominamos cache dividida.

• Pode haver três ou mais níveis de cache à medida que se


exigem sistemas de memória mais sofisticados.

slide 56 © 2014 Pearson. Todos os direitos reservados.


Memória cache

• Sistema com três níveis de cache.

slide 57 © 2014 Pearson. Todos os direitos reservados.


Memória cache

• A cache mais simples é conhecida como cache de


mapeamento direto.

slide 58 © 2014 Pearson. Todos os direitos reservados.


Memória cache

• Uma cache associativa de conjunto de quatro vias é


ilustrada abaixo:

slide 59 © 2014 Pearson. Todos os direitos reservados.


Previsão de desvio

• Programas não são sequências de código linear – estão


repletos de instruções de desvio. Considere:

• Fragmento de programa.

• Sua tradução para


uma linguagem de
montagem genérica.

slide 60 © 2014 Pearson. Todos os direitos reservados.


Previsão de desvio

• Devemos observar que duas das cinco instruções são


desvios. O problema está na natureza do pipelining.

• A posição após um desvio é denominada posição de


retardo (delay slot).

• Por mais que desvios incondicionais sejam irritantes, os


desvios condicionais são piores.

• Se um desvio for previsto corretamente, não há nada de


especial a fazer.

• A execução apenas continua no endereço de destino.


slide 61 © 2014 Pearson. Todos os direitos reservados.
Previsão de desvio

• Histórico de desvio de 1 bit.


• Histórico de desvio de 2 bits.
• Mapeamento entre endereço de instrução de desvio e
endereço de destino.

slide 62 © 2014 Pearson. Todos os direitos reservados.


Previsão de desvio

• Máquina de estado finito de 2 bits para previsão de desvio.

slide 63 © 2014 Pearson. Todos os direitos reservados.


Execução fora de ordem e
renomeação de registrador
• CPU superescalar com emissão em ordem e conclusão em
ordem.

slide 64 © 2014 Pearson. Todos os direitos reservados.


Execução fora de ordem e
renomeação de registrador
• Operação de uma CPU superescalar com emissão de
instrução fora de ordem e conclusão de instrução fora de
ordem.

slide 65 © 2014 Pearson. Todos os direitos reservados.


Execução fora de ordem e
renomeação de registrador
• Introduzimos uma nova técnica: registrador de
renomeação.

• A sábia unidade de decodificação transfere a utilização de


R1 em I6 (ciclo 3) e I7 (ciclo 4) para um registrador
secreto, S1, que não é visível para o programador.

• Agora, I6 pode ser emitida ao mesmo tempo em que I5.

• CPUs modernas costumam ter dezenas de registradores


secretos para usar com renomeação de registrador.

• Essa técnica pode eliminar dependências WAR e WAW.


slide 66 © 2014 Pearson. Todos os direitos reservados.
Execução especulativa

• Programas de computador podem ser desmembrados em


blocos básicos, em que cada um consiste em uma
sequência linear de código com um ponto de entrada no
início e uma saída no final.

• Calculamos as somas dos cubos dos inteiros pares e


ímpares até algum limite e as acumulamos em evensum e
oddsum, respectivamente.

• Dentro de cada bloco básico, as técnicas de reordenação


da seção anterior funcionam bem.

slide 67 © 2014 Pearson. Todos os direitos reservados.


Execução especulativa

• Fragmento de programa.

slide 68 © 2014 Pearson. Todos os direitos reservados.


Execução especulativa

• Gráfico de blocos básicos correspondente.

slide 69 © 2014 Pearson. Todos os direitos reservados.


Execução especulativa

• A execução especulativa introduz alguns problemas


interessantes.

• Um deles é que nenhuma das instruções especulativas


tem resultados irrevogáveis, porque mais tarde pode-se
descobrir que elas não deveriam ter sido executadas.

• O que acontece se uma instrução executada por


especulação causar uma exceção?

• Uma solução presente em várias máquinas é inserir uma


instrução SPECULATIVE-LOAD que tenta buscar a palavra
na cache, mas, se ela não estiver lá, desiste.
slide 70 © 2014 Pearson. Todos os direitos reservados.

Você também pode gostar