Professional Documents
Culture Documents
Dados e Controle
Pipeline Escalar
Instruction
Instruction [20– 16]
register 1
Read
register 2
Read
data 1
Zero
mais longa = 8 ns.
0 Registers Read ALU ALU
Instruction [5– 0]
extend ALU
control • Ganho de desempenho: Tempo execução clock fixo / Tempo de
execução clock variável = 8 / 6,3 = 1,27
• No caso de operações em ponto flutuante podemos ter para a
Memto- Reg Mem Mem
Instruction RegDst ALUSrc Reg Write Read Write Branch ALUOp1 ALUp0 multiplicação: 2 + 1 + 16 + 1 = 20 ns
R-format
lw
1
0
0
1
0
1
1
1
0
1
0
0
0
0
1
0
0
0
• A mesma relação pode ser feita para operações em ponto
sw X 1 X 0 0 1 0 0 0 flutuante e o ganho favorável ao clock variável pode ser ainda
beq X 0 X 0 0 0 1 0 1 maior.
Memory 1
x
– Finaliza instruções Tipo-R: Reg[IR[15-11]] = ALUOut;
• Passo de “Write-back”
data 16 32
Sign Shift
register
extend left 2
– Reg[IR[20-16]]= MDR;
Instruções levam de 3 a 5 ciclos.
1
Sumário Abordagem multiciclo
Action for R-type Action for memory-reference Action for Action for
Step name instructions instructions branches jumps
Instruction fetch IR = Memory[PC]
PC = PC + 4
Instruction A = Reg [IR[25-21]]
decode/register fetch B = Reg [IR[20-16]]
ALUOut = PC + (sign-extend (IR[15-0]) << 2)
Execution, address ALUOut = A op B ALUOut = A + sign-extend if (A ==B) then PC = PC [31-28] II
computation, branch/ (IR[15-0]) PC = ALUOut (IR[25-0]<<2)
jump completion
Memory access or R-type Reg [IR[15-11]] = Load: MDR = Memory[ALUOut]
completion ALUOut or
Store: Memory [ALUOut] = B
Pipelines
primeira parte
1. Introdução
Pipelines 2. Pipelines aritméticos
3. Pipelines de instruções
MIPS 4. Desempenho
5. Conflitos de memória
6. Dependências em desvios
2
Introdução Introdução
• Objetivo: aumento de desempenho • bloco operacional e bloco de controle
– divisão de uma tarefa em N estágios independentes para cada estágio
– N tarefas executadas em paralelo, uma em cada estágio
• necessidade de buffers entre os estágios
• Diagrama espaço – tempo estágio 1 buffer estágio 2 buffer estágio 3 buffer
estágio 4 T1 T2 T3 BO BO BO
estágio 3 T1 T2 T3 T4
BC BC BC
estágio 2 T1 T2 T3 T4
estágio 1 T1 T2 T3 T4
tempo • pipelines de instruções
• pipelines aritméticos
Pipelines de Instruções
Pipelines Aritméticos
• 2 estágios
• exemplo: soma em ponto flutuante executada em 4 estágios – fetch / decodificação, execução
1. comparar expoentes
• 3 estágios
2. acertar expoentes dos operandos
– fetch, decodificação / busca de operandos, execução
3. somar
• 4 estágios
4. normalizar resultado
• exemplo – fetch, decodificação / busca de operandos, execução, store
• 5 estágios
0.157 x 106 – 0.842 x 105 – fetch, decodificação / cálculo de endereço de operandos, busca de
operandos, execução, store
0.157 x 106 – 0.0842 x 106 • 6 estágios
– fetch, decodificação, cálculo de endereço de operandos, busca de
0.0628 x 106 operandos, execução, store
– estágio só para decodificação é bom em processadores CISC
0.628 x 105
Desempenho
Problemas no desempenho
• existe um tempo inicial até que o pipeline “encha”
• cada tarefa leva o mesmo tempo, com ou sem pipeline • como dividir todas as instruções num mesmo conjunto de
• média de tempo por tarefa é no entanto dividida por N estágios?
• como obter estágios com tempos de execução similares?
s tarefas • conflitos de memória
N estágios – acessos simultâneos à memória por 2 ou mais estágios
primeira tarefa: N ciclos de relógio
s – 1 tarefas seguintes: s – 1 ciclos de relógio • dependências de dados
Tempo total com pipeline = N + ( s – 1 )
Tempo total sem pipeline = s N – instruções dependem de resultados de instruções
anteriores, ainda não completadas
sN • instruções de desvio
Speed–up teórico =
N+ (s–1)
– instrução seguinte não está no endereço seguinte ao da
instrução anterior
3
Processadores RISC
Conflitos de memória
• memória é acessada apenas por instruções LOAD e STORE
• problema: acessos simultâneos à memória • apenas um estágio do pipeline faz acesso a operandos de memória
– apenas 1 instrução pode estar executando acesso a dados a cada
por 2 ou mais estágios instante
• se caches de dados e instruções são separadas, não há nenhum conflito de
acesso à memória
fetch fetch store
instrução decode operandos execute operando
fetch fetch acesso store
instrução operandos execução memória operando
memória memória
• predição dinâmica
buffer para
3. Eliminar o problema instruções não-seqüenciais
• “delayed branch”
4
Predição dinâmica
Predição estática
tabela look-up associativa
• supor sempre mesma direção para o desvio endereço
instrução
endereço
desvio
bit de validade
– desvio sempre ocorre
– desvio nunca ocorre
5
Introdução Dependências verdadeiras
• problema: instruções consecutivas podem • exemplo
fazer acesso aos mesmos operandos 1. ADD R3, R2, R1 ; R3 = R2 + R1
– execução da instrução seguinte pode depender de operando 2. SUB R4, R3, 1 ; R4 = R3 – 1
calculado pela instrução anterior • instrução 2 depende de valor de R3 calculado
• caso particular: instrução precisa de pela instrução 1
resultado anterior (p.ex. registrador) para • instrução 1 precisa atualizar valor de R3 antes
cálculo de endereço efetivo de operando que instrução 2 busque os seus operandos
• tipos de dependências de dados • read-after-write hazard
– dependência verdadeira
– antidependência • pipeline precisa ser parado durante certo
– dependência de saída número de ciclos
bolha
Dependências falsas
Pipeline interlock
Dependência de saída
• exemplo • método para manter seqüência correta de leituras e escritas em
1. ADD R3, R2, R1 ; R3 = R2 + R1 registradores
2. SUB R2, R3, 1 ; R2 = R3 – 1 • tag de 1 bit é associado a cada registrador
3. ADD R3, R2, R5 ; R3 = R2 + R5
tag = 0 indica valor não válido, = 1 indica valor válido
• instruções 1 e 3 escrevem no mesmo operando em R3
• se instrução que é buscada e decodificada escreve num
• instrução 1 tem que escrever seu resultado em R3 antes do que a instrução
3, senão valor final de R3 ficará errado registrador, o tag do mesmo é zerado
• write-after-write hazard • tag é ligado quando instrução escreve o valor no registrador
• também só é problema em processadores superescalares • outras instruções que sejam executadas enquanto tag está
zerado devem esperar tag = 1 para ler valor deste registrador
6
Pipeline interlock Forwarding
ADD R3, R4, 4 tag • exemplo
SUB R5, R3, 8 banco de registradores
ADD R3, R2, R0
SUB R4, R3, 8
R3 • instrução SUB precisa do valor de R3, calculado pela instrução ADD
ligar tag de R3 – valor é escrito em R3 por ADD no último estágio WB (write-back)
desligar
tag de R3 – valor é necessário em SUB no terceiro estágio
ler tag de R3 – instrução SUB ficará presa por 2 ciclos no 2º estágio do pipeline
esperar, se tag = 0
ADD IF OF EX OS ler operando, se tag = 1 IF OF EX MEM WB
Forwarding
Forwarding
•
• caminho interno dentro do pipeline entre a exemplo 2
LOAD R3, 100 (R0)
saída da ALU e a entrada da ALU ADD R1, R2, R3
– evita stall do pipeline • forwarding: caminho interno dentro do pipeline entre a saída da memória
de dados e a entrada da ALU
IF OF EX MEM WB IF OF EX MEM WB
forwarding forwarding
IF OF EX MEM WB IF OF EX MEM WB
IF OF EX MEM WB IF OF stall EX MEM
7
Pipelines Pipeline do MIPS
Terceira parte
Clock
1. Pipeline do MIPS Instrução 1 2 3 4 5 6 7 8 9
i IF ID EX MEM WB
2. Dependências no Pipeline i+1 IF ID EX MEM WB
i+2 IF ID EX MEM WB
3. Forwarding
i+3 IF ID EX MEM WB
4. Exemplos i+4 IF ID EX MEM WB
Pipeline do MIPS
8
Dependências no Pipeline
Forwarding
Forwarding Forwarding
9
Forwarding Forwarding
IS – Instrução Sucessora.
10
Instruções de Desvio no Pipeline
Exercício 1
• Explicar o que acontece na execução das instruções abaixo em ordem
de entrada no pipeline do processador. Calcule quantidade de ciclos e
CPI.
Exercício 2
• Explicar o que acontece na execução das instruções abaixo em ordem
de entrada no pipeline do processador. Calcule quantidade de ciclos e
CPI. :
11