Nível da Microarquitetura
Ronaldo de Freitas Zampolo
LaPS/DEEC/CT/UFPA
Tópicos
Introdução
Exemplo de microarquitetura
Exemplo de nível ISA
Exemplo de uma implementação
Melhora de performance
Exemplos de níveis de microarquitetura
Microarquitetura – p.
Introdução
Objetivo: implementar o nível ISA (instruction set
architecture) situado imediatamente acima
Elementos a considerar no projeto do nível de
microarquitetura:
Nível ISA
Custo × desempenho do computador a ser
projetado
Microarquitetura – p.
Exemplo de microarquitetura
ISA a ser implementada: IJVM (subconjunto da JVM)
Objetivo do estudo: análise dos sinais de controle e
do seqüenciamento da execução das instruções
Microprograma em memória ROM: busca,
decodificação e execução de instruções ISA
Estado: conjunto de variáveis do microprograma que
podem ser acessadas por todas as funções
chamadas (funções ISA). Cada função muda, pelo
menos uma variável de estado. Ex.: PC
Instruções IJVM: simples, com 1 ou dois campos: (a)
opcode (código de operação); e (b) operando
Microarquitetura – p.
MDR
PC
MBR
SP
LV
Control signals
Enable onto B bus
CPP
Write C bus to register
TOS
OPC
C bus
B bus
H
A
ALU control
B
6
N
Z
ALU
Shifter
Shifter control
2
Exemplo de microarquitetura
To
and
from
main
memory
Memory
control
registers
Microarquitetura – p.
Caminho de dados: controlado por microinstruções
MAR
Exemplo de microarquitetura
Caminho de dados
Conjunto de registradores de 32 bits
UAL
Controle de função: F0 e F1
Controle de habilitação: ENA, ENB
Complemento de A: INVA
Incremento: INC
3 barramentos: A, B e C
Deslocador
SLL8 (shift left logical - 8 bits)
SRA1 (shift right arithmetic - 1 bit à direita com
preservação de sinal MSB)
Microarquitetura – p.
Exemplo de microarquitetura
Caminho de dados
F0
F1
0
0
0
1
1
1
1
1
1
1
0
1
1
1
ENA ENB INVA INC
1
0
1
1
1
1
1
0
1
0
1
1
1
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
Função
A
B
Ā
B̄
A+B
A+B+1
A+1
Microarquitetura – p.
Exemplo de microarquitetura
Caminho de dados
É possível escrever em um mesmo registrador no
mesmo ciclo de clock: leitura e escrita são feitas
em momentos diferentes em um mesmo ciclo
A saída da UAL pode ser armazenada em mais
de um registrador. Contudo, no barramento B
apenas o conteúdo de um dos registradores pode
ser transferido por vez.
Microarquitetura – p.
Caminho de dados
Temporização
Registers loaded
instantaneously from
C bus and memory on
rising edge of clock
Shifter
output
stable
Cycle 1
starts
here
Clock cycle 1
∆w
∆x
Set up
signals
to drive
data path
Drive H
and
B bus
∆y
Clock cycle 2
New MPC used to
load MIR with next
microinstruction here
∆z
ALU
and
shifter
MPC
available
here
Propagation
from shifter
to registers
Microarquitetura – p.
Caminho de dados
Operação da memória
Acesso à memória
Porta de 32 bits (palavra):
MAR (memory address register)
MDR (memory data register)
Porta de 8 bits (byte):
PC (program counter)
MBR (memory buffer register)
MAR: guarda o endereço da palavra
PC: orientado a byte
Microarquitetura – p.
Caminho de dados
Operação da memória
Ex.: Operação de leitura
PC=2: leitura do byte 2, armazenamento nos oito
bits menos significativos de MBR
MAR=2: leitura dos bytes 8 a 11, armazenamento
em MDR
PC/MBR: programas do nível ISA
MAR/MDR: dados do nível ISA
Microarquitetura – p.1
Caminho de dados
Operação da memória
MAR: Implementação
Memórias: dispositivos orientados a byte
MAR: orientado a palavra
Em 4 GB (232 endereços de 1 byte), existem 230
palavras 4 bytes
32-Bit MAR (counts in words)
Discarded
0 0
32-Bit address bus (counts in bytes)
Microarquitetura – p.1
Caminho de dados
Operação da memória
MAR (cont):
palavra 0 → byte 0
palavra 1 → byte 4
palavra 2 → byte 8
palavra 3 → byte 12
MBR:
Com sinal: 25 bits mais significativos (-128 a 127)
Sem sinal: MBR passa os oito bits menos
significativos para o barramento B, os outros bits
são iguais a zero
Microarquitetura – p.1
Microinstruções
De acordo com a figura do caminho de dados, são
necessários 29 sinais para controle:
9 sinais para controlar escrita no barramento B
9 sinais para controlar escrita nos registradores a
partir do barramento C
8 sinais para controlar UAL e deslocador
2 sinais para leitura e escrita em memória (MAR /
MDR)
1 sinal para busca em memória via PC /MBR
Os valores dos 29 sinais definem as operações a
serem executadas durante um ciclo do caminho de
dados
Microarquitetura – p.1
Microinstruções
Observação quanto ao acesso à memória:
Registers loaded
instantaneously from
C bus and memory on
rising edge of clock
Shifter
output
stable
Cycle 1
starts
here
Clock cycle 1
∆w
∆x
Set up
signals
to drive
data path
Drive H
and
B bus
∆y
Clock cycle 2
New MPC used to
load MIR with next
microinstruction here
∆z
ALU
and
shifter
MPC
available
here
Propagation
from shifter
to registers
Microarquitetura – p.1
Microinstruções
Observação quanto ao acesso à memória:
Uma solicitação de acesso ao conteúdo da
memória é feita no ciclo 1
a informação solicitada só estará disponível no
ciclo 3 ! (pelo menos)
Redução do número de sinais de controle:
9 sinais para controlar escrita em B → 4 sinais,
usando decodificador (não faz sentido o acesso a
B por mais de um registrador simultaneamente)
Microarquitetura – p.1
Microinstruções
Estrutura e ordenação de uma possível microinstrução
Bits
9
NEXT_ADDRESS
Addr
3
J
M
P
C
J
A
M
N
8
J
A
M
Z
JAM
S
L
L
8
9
3
4
S F 0 F1 E E I I H O T C L S P M M W R F
R
P O P V P C D A R E E
N N N N
I
T
R R T A C
A
C S P
A B V C
1
A
E D H
ALU
C
Mem
B
bus
B
B bus registers
0 = MDR
1 = PC
2 = MBR
3 = MBRU
4 = SP
5 = LV
6 = CPP
7 = TOS
8 = OPC
9 -15 none
Microarquitetura – p.1
Microinstruções
Endereço: contém o endereço da próxima
microinstrução a ser potencialmente ativada
Desvio: determina a próxima microinstrução a ser
executada
UAL: especifica as funções da UAL e do deslocador
Barramento C: seleciona qual dos registradores
serão carregados com o valor que estiver no
barramento C
Memória: especifica as funções da memória
Barramento B: seleciona a entrada do barramento B
Microarquitetura – p.1
Controle microprogramado
Memory control signals (rd, wr, fetch)
3
4
4-to-16
Decoder
MAR
MDR
MPC
9
PC
O
8
MBR
SP
512 × 36-Bit
control store
for holding
the microprogram
9
LV
JMPC
CPP
Addr
J
ALU
C
MIR
M B
TOS
JAMN/JAMZ
OPC
H
B bus
2
1-bit flip–flop
N
6
ALU
control
High
bit
ALU
Control
signals
Enable
onto
B bus
Z
Shifter
C bus
2
Write
C bus
to register
Microarquitetura – p.1
Controle microprogramado
O MIC-1: elementos
Seqüenciador
Realiza todos os passos necessários para
execução de uma instrução ISA
A cada ciclo: estado de cada sinal de controle; e
o endereço da próxima microintrução
Memória de controle: armazena o microprograma
completo
MPC (MicroProgram Counter): endereço da próxima
microinstrução
MIR (Micro Instruction Register): armazena
microinstrução corrente
Microarquitetura – p.1
Controle microprogramado
Campo JAM
000: nada a fazer
JAMN == 1: O valor de N deve ser submetido a
um OR com bit de maior ordem do MPC
JAMZ == 1: O valor de Z deve ser submetido a
um OR com bit de maior ordem do MPC
F=(JAMN AND N) OR (JAMZ AND Z) OR
NEXT_ADDRESS[8]
Só há duas possibilidades para conteúdo de MPC:
NEXT_ADDRESS
NEXT_ADDRESS com bit de mais alta ordem
submetido à operação OR com 1
Microarquitetura – p.2
Controle microprogramado
Exemplo:
Address
Addr
JAM
0x75
0x92
001
Data path control bits
JAMZ bit set
…
0x92
…
0x192
One of
these
will follow
0x75
depending
on Z
JMPC:
1: MPC=(8 bits de MBR) OR (8 bits menos
significativos do NEXT_ADDRESS)
JMPC=1: NEXT_ADDRESS = 0x000 ou 0x100
Em geral, MBR contém um código de operação
(opcode) ISA
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Pilhas:
Armazenamento de variáveis locais
SP
LV
SP
LV
SP
LV
a3
a2
a1
108
104
100
(a)
b4
b3
b2
b1
a3
a2
a1
c2
c1
b4
b3
b2
b1
a3
a2
a1
(b)
(c)
SP
LV
d5
d4
d3
d2
d1
a3
a2
a1
(d)
Auxílio em operações aritméticas (Ex.:
a1 = a2 + a3)
SP
SP
LV
a2
a3
a2
a1
(a)
LV
a3
a2
a3
a2
a1
(b)
SP
LV
a2 + a3
a3
a2
a1
(c)
SP
LV
a3
a2
a2 + a3
(d)
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Modelo de memória da IJVM
Duas opções de visualização:
Vetor de 232 bytes = 4 GB
Vetor de 230 palavras (cada palavra = 4 bytes)
As instruções da IJVM só podem ter acesso à
memória indexando-a com ponteiros
1. Pool de Constantes
Programas IJVM não podem escrever nessa
área que armazena constantes, strings e
ponteiros para outras áreas da memória
CPP aponta para o endereço da primeira
palavra
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Modelo de memória da IJVM
1. Quadro de Variáveis Locais
Armazena variáveis locais (procedimentos)
LV aponta para a base do quadro de variáveis
locais corrente
2. Pilha de Operandos
Localiza-se imediatamente acima do quadro de
variáveis locais
SP aponta para o endereço de mais alta ordem
3. Área de Procedimento
Armazena o programa
PC armazena o endereço da instrução a ser
executada
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Modelo de memória da IJVM
Current
Operand
Stack 3
SP
Current
Local
Variable
Frame 3
LV
Local
Variable
Frame 2
Constant
Pool
Local
Variable
Frame 1
Method
Area
PC
CPP
Área de Procedimento: vetor de bytes
Pool de Constantes: vetor de palavras
Pilha de Operandos: vetor de palavras
Quadro de Variáveis Locais: vetor de palavras
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Conjunto de instruções da IJVM
Manipulação de pilha
BIPUSH byte (0x10): coloca byte na pilha
DUP (0x59): copia topo e coloca no topo
ILOAD varnum (0x15): coloca uma variável
local no topo da pilha
ISTORE varnum(0x36): retira palavra do topo e
armazena numa variável local
LDC_W índice(0x13): coloca no topo uma
constante vinda do Pool de Constantes
POP (0x57): retira da pilha a palavra do topo
SWAP (0x5F): troca de posição as duas
palavras do topo da pilha
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Conjunto de instruções da IJVM
Operações aritméticas
IADD (0x60): retira as duas palavras do topo,
soma-as e armazena o resultado no topo
ISUB (0x64): retira as duas palavras do topo,
subtrai-as e armazena o resultado no topo
Operações lógicas
IAND (0x7E): retira as duas palavras do topo,
realiza um AND e armazena o resultado no topo
IOR (0x80): retira as duas palavras do topo,
realiza um OR e armazena o resultado no topo
Microarquitetura – p.2
Um exemplo de nível ISA: a IJVM
Conjunto de instruções da IJVM
Desvios
GOTO desl (0xA7): desvio incondicional
IFEQ desl (0x99): retira o topo e desvia se for
igual a zero
IFLT desl (0x9B): retira o topo e desvia se for
menor que zero
IF_ICMPEQ desl (0x9F): retira as duas
palavras do topo e desvia se forem iguais
Chamadas a procedimentos
INVOKEVIRTUAL desl (0xB6): chama um
procedimento
IRETURN (0xAC): retorna de um procedimento
trazendo um inteiro
Microarquitetura – p.2
Compilação de JAVA para IJVM
Java
Assembly
ISA
i=j+k;
ILOAD J
0x15 0x02
if (i==3)
ILOAD K
0x15 0x03
IADD
0x60
ISTORE I
0x36 0x01
ILOAD I
0x15 0x01
BIPUSH 3
0x10 0x03
IF_ICMPEQ L1
0x9F 0x00 0x0D
ILOAD J
0x15 0x02
BIPUSH 1
0x10 0x01
ISUB
0x64
ISTORE J
0x36 0x02
GOTO L2
0xA7 0x00 0x07
L1: BIPUSH 0
0x10 0x00
ISTORE K
0x36 0x03
k=0;
else
j=j-1;
L2:
Microarquitetura – p.2
Implementação da IJVM
Main 1 ⇒ PC=PC+1; fetch; goto(MBR)
nop1 ⇒ goto Main 1
iadd1⇒ MAR=SP=SP-1; rd
iadd2⇒ H=TOS
iadd3⇒ MDR=TOS=MDR+H; wr; goto Main 1
isub1 ⇒ MAR=SP=SP-1; rd
isub2 ⇒ H=TOS
isub3 ⇒ MDR=TOS=MDR-H; wr; goto Main 1
dup1 ⇒ MAR=SP=SP+1
dup2 ⇒ MDR=TOS; wr; goto Main 1
Microarquitetura – p.3
Implementação da IJVM
bipush1 ⇒ SP=MAR=SP+1
bipush2 ⇒ PC=PC+1; fetch
bipush3 ⇒ MDR=TOS=MBR; wr; goto Main 1
iload1 ⇒ H=LV
iload2 ⇒ MAR=MBRU+H; rd
iload3 ⇒ MAR=SP=SP+1
iload4 ⇒ PC=PC+1; fetch; wr
iload5 ⇒ TOS=MDR; goto Main 1
Microarquitetura – p.3
Pipeline
IFU
IFU
Reg
A
C
B
IFU
Reg
A
C
B
IFU
Reg
A
C
B
Reg
A
C
B
1
IFU
ALU
ALU
ALU
ALU
Shifter
Shifter
Shifter
Shifter
IFU
Reg
A
C
B
IFU
Reg
A
C
B
IFU
Reg
A
C
B
Reg
A
C
B
2
IFU
ALU
ALU
ALU
ALU
Shifter
Shifter
Shifter
Shifter
IFU
Reg
A
C
B
IFU
Reg
A
C
B
IFU
Reg
A
C
B
Reg
A
C
B
Instruction
3
IFU
ALU
ALU
ALU
ALU
Shifter
Shifter
Shifter
Shifter
IFU
Reg
A
C
B
IFU
Reg
A
C
B
IFU
Reg
A
C
B
Reg
A
C
B
4
Cycle 1
ALU
ALU
ALU
ALU
Shifter
Shifter
Shifter
Shifter
Cycle 2
Cycle 3
Cycle 4
Time
Microarquitetura – p.3
Pipeline
swap1
swap2
swap3
swap4
swap5
swap6
ciclo MAR=SP-1 MAR=SP H=MDR; wr MDR=TOS MAR=SP-1; wr TOS=H; goto Main1
1
B=SP
2
C=B-1
B=SP
3
MAR=C; rd
C=B
4
MDR=mem MAR=C
5
B=MDR
6
C=B
B=TOS
7
H=C; wr
C=B
B=SP
8
mem=MDR
MDR=C
C=B-1
B=H
9
MAR=C; wr
C=B
10
mem=MDR
TOS=C
11
goto(MBR)
Microarquitetura – p.3
Velocidade x Custo
Metodologias para aumentar a velocidade de
execução
Reduzir o número de ciclos necessários à
execução das instruções
Simplificar a organização da máquina, de modo a
reduzir o período de clock
Sobrepor a execução de instruções
Microarquitetura – p.3
Redução do caminho de execução
União do loop de interpretação com microcódigo
pop1
MAR=SP=SP-1; rd
pop2
pop3
TOS=MDR; goto Main1
Main 1
PC=PC+1; fetch; goto(MBR)
pop1
MAR=SP=SP-1; rd
Main1.pop
PC=PC+1; fetch
pop3
TOS=MDR; goto(MBR)
Microarquitetura – p.3
Redução do caminho de execução
Arquitetura com três barramentos: inclusão de um
barramento A para a entrada esquerda da UAL
Unidade de busca de instruções: busca de
instruções a cargo de uma unidade independente;
UAL restrita à execução de instruções propriamente
dita
Microarquitetura – p.3
Redução do caminho de execução
Memory
control
registers
MAR
To
and
from
main
memory
MDR
PC
Instruction
fetch unit
(IFU)
MBR1
MBR2
SP
LV
Control signals
CPP
Enable onto B bus
TOS
Write C bus to register
OPC
C bus
B bus
H
A bus
C latch
A latch
ALU
control
B latch
6
ALU
N
Z
Shifter
Microarquitetura – p.3
Download

Exemplo de microarquitetura