Arquitectura de
Computadores II
2004/2005
0. Introdução
Paulo Marques
Departamento de Eng. Informática
Universidade de Coimbra
[email protected]
Programa






Aspectos quantitativos no desenho de sistemas
Pipelining Avançado
Caches e hierarquia de memória
Arquitectura de alguns processadores modernos
Sistema de Entrada/Saída
Multiprocessadores e Clusters
2
Modelo de Funcionamento

Aulas Teóricas



Aulas práticas



Apoio à realização dos mini-projectos (grupos de 2)
Realização de dois mini-testes (devidamente anunciados)
Avaliação




Conceitos teóricos sobre arquitectura de computadores
Discussão de artigos que serão fornecidos
Exame / Exame de Recurso:
2 Mini-testes:
4 Mini-projectos:
12 valores (min=5)
2 valores (min=0)
6 valores (min=2)
Casos especiais


Trab. Estudantes: Mini-testes no gabinete (caso necessário)
Época Especial: Exame para 20 valores
3
Bibliografia

Computer Architecture: A Quantitative Approach, 3rd Ed.
J. Hennessy & D. Patterson
Morgan Kaufmann, ISBN 1-55860-724-2
May 2002

Computer Organization and Design, 3rd Ed.
D. Patterson & J. Hennessy
Morgan Kaufmann, ISBN 1-55860-604-1
August 2004


Apenas para revisão de aspectos básicos
Serão fornecidos alguns artigos
4
Professores

Paulo Marques
[email protected]
Gabinete D2.5 / Laboratório E5.4
Horário de Atendimento: Seg. 11h-12h / Qui. 10h-12h

Marco Vieira
[email protected]
Laboratório E6.2
Horário de Atendimento: Sex. 14h-18h
5
Arquitectura de
Computadores II
2004/2005
Revisão de alguns
conceitos básicos
Paulo Marques
Departamento de Eng. Informática
Universidade de Coimbra
[email protected]
Processadores RISC

RISC = Reduced Instruction Set Computer

ISA (Instruction Set Architecture) simples e uniforme
Arquitectura LOAD/STORE



Todas as operações são sobre dados em registos
Existem operações de LOAD/STORE com a memória

Instruções uniformes e de tamanho igual
Register file grande e de registos genéricos

Comparação com CISC






Operações complexas são difíceis de implementar em hardware
Operações complexas tornam os sistemas lentos
É difícil antever quais as operações que irão ser necessárias
Registos com propósitos especiais
O compilador pode eficientemente traduzir operações de alto nível
7
Instruções do MIPS

Características





Operações de cálculo (ALU) são sempre apenas entre registos
Apenas existem duas instruções que mexem com memória
(load/store)
Todas as instruções têm o mesmo tamanho (32 bits)
O número de formatos de instruções é reduzido (3)
Tipos de instruções

ALU (e.g. ADD R1,R2,R3



ADDI R1,R2,5)
Dois registos de origem e um de destino
Um registo de origem, um valor imediato e um registo de destino
LOAD/STORE (e.g. SD 8(R2),R1)


/
Um registo base, um deslocamento e um registo de origem
BRANCH/JUMP


Dois registos a comparar e um valor imediato (offset)
Um valor imediato (offset)
8
Instruções do MIPS
(exemplos)
LD
R1,(8)R2
ADDI R1, 10
JR
(R1)
ADD R1,R2,R3
J
4000
9
Execução de uma instrução

IF – Instruction Fetch



ID – Instruction Decode





Instruções ALU: Realiza o cálculo
Instruções LOAD/STORE: Calcula o endereço a utilizar
MEM – Memory Access


Descodifica a instrução
Lê os registos
[Calcula o possível end. de destino, num salto, e caso o seja, realiza-o]
EXE – Execution / Address Calculation


Envia para a memória o endereço de PC e obtém a instrução corrente
Incrementa o PC
Instruções LOAD/STORE: Lê ou escreve na memória
WB – Write Back


Instruções ALU: Escreve o resultado no registo destino
Instrução LOAD: Escreve o resultado no registo destino
10
MIPS Datapath (Implementação Multi-ciclo)
Nota: Esta implementação não corresponde directamente às fases atrás mencionadas!
11
Implementação Multi-ciclo


Cada instrução demora um número variado de ciclos de
relógio
No entanto, em cada momento, só existe uma instrução
em execução
IF
ID
EXE
MEM
WB
Saltos: 2 ciclos
Store: 4 ciclos
Outros: 5 ciclos


CPI = Clocks per Instruction
Tempo Execução = Instruções x CPImédio x Trelógio
12
Máquina de Estados do MIPS (simplificada)
Instruction decode/
register fetch
Instruction fetch
=
(Op
2
'LW
=
(Op
') or
'SW
')
6
')
EQ
'B
)
ype
R-t
=
(Op
Branch
completion
Execution
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
8
ALUSrcA =1
ALUSrcB = 00
ALUOp = 10
Jump
completion
9
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCWriteCond
PCSource = 01
PCWrite
PCSource = 10
(O
p
=
'S
')
W
(Op = 'LW')
ALUSrcA = 0
ALUSrcB = 11
ALUOp = 00
(Op = 'J')
Memory address
computation
1
=
Start
MemRead
ALUSrcA = 0
IorD = 0
IRWrite
ALUSrcB = 01
ALUOp = 00
PCWrite
PCSource = 00
(O
p
0
Memory
access
3
Memory
access
5
MemRead
IorD = 1
R-type completion
7
MemWrite
IorD = 1
RegDst = 1
RegWrite
MemtoReg = 0
Write-back step
4
RegDst = 0
RegWrite
MemtoReg = 1
13
Como aumentar a performance?

Iniciar uma instrução em cada ciclo de relógio!
Adicionar registos entre os diversos “estados” do
processador

Speedup máximo = Número de fases do pipeline

Throughput: Número de instruções completadas por

unidade de tempo


Aumenta 
Latência: Tempo que cada instrução demora a executar

Aumenta 
14
MIPS Datapath (Implementação Pipelined)
15
Pipeline ao longo do tempo...
Time (in clock cycles)
Program
execution
order
(in instructions)
lw $1, 100($0)
lw $2, 200($0)
lw $3, 300($0)
CC 1
CC 2
IM
Reg
IM
CC 3
ALU
Reg
IM
CC 4
CC 5
DM
Reg
ALU
Reg
DM
ALU
CC 6
CC 7
Reg
DM
Reg
16
Pipeline vs. Multi-ciclo
Program
execution
Time
order
(in instructions)
lw $1, 100($0)
2
Instruction
Reg
fetch
lw $2, 200($0)
4
6
8
ALU
Data
access
10
12
14
ALU
Data
access
16
18
Reg
Instruction
Reg
fetch
8 ns
lw $3, 300($0)
Reg
Instruction
fetch
8 ns
...
8 ns
Program
execution
Time
order
(in instructions)
2
lw $1, 100($0)
Instruction
fetch
lw $2, 200($0)
2 ns
lw $3, 300($0)
4
Reg
Instruction
fetch
2 ns
6
ALU
Reg
Instruction
fetch
2 ns
8
Data
access
ALU
Reg
2 ns
10
14
12
Reg
Data
access
Reg
ALU
Data
access
2 ns
2 ns
Reg
2 ns
17
Aspectos importantes dos pipelines

CPI >= Número de fases do pipeline




O CPI não é igual ao número de fases do pipeline devido aos
conflitos que surgem!
A performance do pipeline está limitada pela fase mais
comprida
As diversas fases do pipeline têm de realizar
aproximadamente o mesmo trabalho
O tamanho de cada fase também está limitado pelo clock
skew e latch overhead

Se TClock  Clock_Skew + Latch_Overhead, então não vale a pena
aumentar o número de fases do pipeline
18
Conflitos

Estruturais



De dados


Um certo elemento do processador não pode ser utilizado por
duas fases diferentes do pipeline ao mesmo tempo (e.g. memória:
IF  Vai à memória buscar uma instrução; MEMAcede à
memória; resolvido utilizando duas caches)
Resolúveis duplicando o hardware ou com interlocks (bolhas)
Quando uma operação depende de resultados que ainda estão a
ser calculados (ou carregados)
De controlo

Saltos (alteram o PC)
Tudo isto leva à introdução de “bolhas” no pipeline!
19
Dependências de Dados
Time (in clock cycles)
CC 1
Value of
register $2: 10
CC 2
CC 3
CC 4
CC 5
CC 6
CC 7
CC 8
CC 9
10
10
10
10/– 20
– 20
– 20
– 20
– 20
DM
Reg
Program
execution
order
(in instructions)
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IM
Reg
IM
DM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
Reg
Reg
Reg
DM
Reg
20
Forwarding
Time (in clock cycles)
CC 1
Value of register $2 : 10
Value of EX/MEM : X
Value of MEM/WB : X
CC 2
CC 3
CC 4
CC 5
CC 6
CC 7
CC 8
CC 9
10
X
X
10
X
X
10
– 20
X
10/– 20
X
– 20
– 20
X
X
– 20
X
X
– 20
X
X
– 20
X
X
DM
Reg
Program
execution order
(in instructions)
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IM
Reg
IM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
Reg
DM
Reg
Reg
DM
Reg
21
Há dependências de dados não resolúveis...
Program
Time (in clock cycles)
execution
CC 1
CC 2
order
(in instructions)
lw $2, 20($1)
and $4, $2, $5
or $8, $2, $6
IM
CC 3
Reg
IM
Reg
IM
CC 4
CC 5
DM
Reg
Reg
IM
CC 6
CC 7
DM
Reg
Reg
DM
CC 8
CC 9
CC 10
Reg
bubble
add $9, $4, $2
slt $1, $6, $7
IM
DM
Reg
IM
Reg
Reg
DM
Reg
22
Dependências de Controlo (saltos)

Problema dos saltos


Abordagem simples (Predict Not Taken)



J
O salto é detectado no final do ID, no entanto já foi feito o fetch
de uma nova instrução
IF
Continua o fetch como se nada fosse
Se a instrução da qual é feito o fetch é incorrecta, transforma-a
num NOP (funciona porque só existem alterações reais nas fases
MEM e WB; o salto é descoberto no fim de ID)
Perca de performance demasiado elevada
ID
IF
EXE MEM WB
ID
IF
Not taken
EXE MEM WB
ID
IF
ID
EXE MEM WB
IF
EXE MEM WB
--
--
IF
ID
--
--
EXE MEM WB
Taken
23
Delay Slot e Nullifying Branch




A instrução a seguir ao Branch é sempre executada
O compilador tem de lá colocar uma instrução adequada
ou um NOP
No caso do “Nullifying Branch”, o compilador inclui na
própria instrução o que ele previu que iria acontecer
Não funciona para pipeline agressivos
24
Unidades funcionais não completamente pipelined



Floating-point unit
Pode considerar-se que a fase EXE pode demorar vários
ciclos
Ocorrem bolhas se existem conflitos estruturais ou
dependências de dados (incluindo WAW!)
25
Excepções: O grande problema dos pipelines

Dois tipos fundamentais de excepções:


Verdadeiras EXCEPÇÕES
(e.g. divisão por zero, overflow, page fault)
Interrupções (de hardware ou traps)

No caso das excepções é necessário a meio de uma
instrução anulá-la, assim como todas as outras que estão
a decorrer no pipeline e invocar o Sistema Operativo

RESTARTABLE (e.g. Page Fault) vs.
TERMINATE (e.g. Illegal Instruction)

Grande problema: Processadores “out-of-order” e
unidades não fully-pipelined (e.g. FP unit)
26
Material para ler
Computer Architecture: A Quantitative Approach
 Appendix A



A1, A2, A3,
A4 (menor profundidade)
A5 (menor profundidade)
27
Algumas questões de revisão...







Porque é que o registo R0 do MIPS é sempre 0?
Porque é que a maioria dos processadores RISC tem caches de
instruções e de dados separadas?
Sendo possível colocar tantos transístores dentro de um integrado,
porque é que não se aumenta muito mais o número de registos dos
processadores (e.g. 128)?
Sendo possível colocar tantos transístores dentro de um integrado,
porque é que não se aumenta muito mais o número de unidades
funcionais existentes?
Se o throughput do processador (e velocidade de relógio) tende a
aumentar com o tamanho do pipeline, porque é que não se aumenta
muito mais o número de fases dos mesmos?
Como é que é possível haver funções recursivas se a instrução JAL
(Jump-And-Link) guarda sempre o endereço de retorno no registo
R31 (i.e. $RA)?
Porque é que é necessário haver uma instrução especial RFE (Returnfrom-exception)?
28
Download

0. Introdução