Post on 22-Jan-2016
description
DAP.F96 1
Previsão de Desvio, Superescalar, VLIW e Software Pipelining
DAP.F96 2
Revisão: Tomasulo
• Evita conflitos WAR, WAW sem espera• Permite desenrolamento de loop em HW• Não limitado a blocos básicos (provê
previsão de desvio)• Contribuições
– Escalação Dinâmica– Renomeação de Registradores– Tratamento separado de Load e Store
• Descendentes do 360/91 são PowerPC 604, 620; MIPS R10000; HP-PA 8000; Intel Pentium Pro, II, III, IV
DAP.F96 3
Previsão estática de desvio
• Análise de desvios pelo software (compilador), e tomada de medidas para melhoria do desempenho
• Exemplo: desenrolamento de loops, para diminuir a quantidade de desvios.
DAP.F96 4
Previsão Dinâmica de Desvio (hardware)
Previsão Local: uma instrução de desvio Global: várias instruções de desvio
• Previsão Local Simples: usa apenas um bit Usa-se a tabela – Branch History Table – BHT - de um bit,
onde o índice de entrada é a parte menos significativa da instrução de branch
BNEZ R1, Loop• O bit diz se o desvio aconteceu ou não da última vez• Em um loop, causa dois erros de previsões:
– Início: a previsão é não fazer loop– Fim: a previsão é fazer loop
DAP.F96 5
ExemploLoop: LD F0 0 R1
MULTD F4 F0 F2
SD F4 0 R1
SUBI R1 R1 #8
BNEZ R1 Loop
Considerando-se que no início R1 é igual a 80, e bit de previsão igual a 0 (não desvia).INÍCIO: Primeira execução de BNEZ: como R1 = 80, desvia, ocorre erro de previsão, muda a previsão na BHT para 1 (desvia).
Execução de BNEZ subseqüentes: enquanto R1 > 0, desvia, previsão é correta a previsão na BHT continua 1 (desvia).
FIM: Última execução de BNEZ: como R1 = 0, não desvia, ocorre erro de previsão, muda a previsão na BHT para 0 (não desvia).
DAP.F96 6
Previsão Local usando 2 bits• a previsão muda somente quando ocorrerem dois erros:
• Incrementa quando ocorre desvio• Decrementa quando não ocorre desvio
Previsão dedesvio
11
Previsão dedesvio
10
Previsão denão-desvio
01
Previsão denão-desvio
00
desvia
Não desvia
desvia Não-desvia
Não desvia
desvia
Não-desvia
desvia
início
DAP.F96 7
Exemplo Loop: .................................................................
SUBI R1 R1 #8
BNEZ R1 Loop
No início R1 é igual a 80, e bit de previsão igual a 00(não desvia).INÍCIO: Primeira execução de BNEZ: como R1 = 80, desvia, ocorre erro de previsão, muda a previsão na BHT para 01 (não desvia).Segunda execução de BNEZ: como R1 = 72, desvia, ocorre erro de previsão, muda a previsão na BHT para 11 (desvia).Execução de BNEZ subseqüentes: enquanto R1 > 0, desvia, previsão é correta a previsão na BHT continua 11 (desvia).FIM: Última execução de BNEZ: como R1 = 0, não desvia, ocorre erro de previsão, muda a previsão na BHT para 10 (desvia).
Na primeira execução do programa ocorrem 2 erros de previsão, porém, a partir da próxima vez ocorre apenas 1 erro.
DAP.F96 8
Previsão com correlação entre loops
If (aa == 2) aa = 0;If (bb == 2) bb = 0;If (aa!=bb)
DSUBUI R3,R1,#2 BNEZ R3,L1 ; desvio b1 (aa!=2) DADD R1,R0,R0 ; aa = 0L1: DSUBUI R3,R2,#2 BNEZ R3,L2 ; desvio b2 (bb !=2) DADD R2,R0,R0 ; bb=0L2: DSUBU R3,R1,R2 ; R3 = aa-bb BEQZ R3,L3 ; desvio b3 (aa==bb)
Se não ocorrem desvios b1 e b2 então ocorre desvio b3
O previsor faz a correlação entre loops!!
aa
0
bb
DAP.F96 9
Outro exemplo desvio com correlação
if (d ==0) d = 1; if (d ==1)
Código MIPS:
BNEZ R1,L1 ; desvio b1 (d!=0) DADDIU R1,R0,#1 ; d==0 , então d =1 L1: DADDIU R3,R1,#-1 ; R3 = d -1 BNEZ R3,L2 ; desvio b2 (d!=1)... L2:
d
0
DAP.F96 10
Possível seqüência de execução
d antes do desvio b1
d==0? b1 d antes do desvio b2
d==1? b2
0 sim not taken 1 sim not taken
1 não taken 1 sim not taken
2 não taken 2 não taken
BNEZ R1,L1 ; desvio b1 (d!= 0) DADDIU R1,R0,#1 ; d==0 , então d =1 L1: DADDIU R3,R1,#-1 ; R3 = d - 1 BNEZ R3,L2 ; desvio b2 (d!=1)... L2:
DAP.F96 11
Comportamento de um previsor de 1 bit
d = ? previsãode b1
açãode b1
novaprevisãopara b1
previsãode b2
açãode b2
2 NT T T NT T
novaprevisãopara b2
T
0 T NT NT T NT NT
2 NT T T NT T T
0 T NT NT T NT NT
Resultado: todas as previsões foram incorretas.
BNEZ R1,L1 ; desvio b1 (d!= 0) DADDIU R1,R0,#1 ; d==0 , então d =1 L1: DADDIU R3,R1,#-1 ; R3 = d - 1 BNEZ R3,L2 ; desvio b2 (d!=1)... L2:
Sequênciadada
DAP.F96 12
Previsor de 1 bit com correlação• Para cada desvio tem duas previsões (a/b), sendo que para um
determinado momento vale uma das previsões: a ou b
a - se o último desvio do programa é NT
b - se o último desvio do programa é T
notando-se que o último desvio do programa
normalmente não é o desvio que está sendo previsto, e sim, o que está sendo correlacionado.
bits de previsão
(a/b)
se o último desviodo programa
foi NT usa-se o lado (a )
se o último desviodo programa
foi T usa-se o lado ( b)
NT/NT previsão = NT previsão = NT
NT/T previsão = NT previsão = T
T/NT previsão = T previsão = NT
T/T previsão = T previsão = T
DAP.F96 13
Aplicação no exemplo
d = ? previsãode b1
açãode b1
novaprevisãopara b1
previsãode b2
açãode b2
2 NT/NT T T/NT NT/NT T
novaprevisãopara b2
NT/T
0 T/NT NT T/NT NT/T NT NT/T
2 T/NT T T/NT NT/T T NT/T
0 T/NT NT T/NT NT/T NT NT/T
a/b – usa previsão a a/b – usa previsão b
Resultado – apenas 2 erros de previsão iniciais.
Sequênciadada
DAP.F96 14
Previsão por torneio (Tournament predictor)A forma mais comum para previsão multi-nível
O contador é incrementado sempre que o previsor usado é correto e outro incorreto, e decrementado caso contrário.Quando ambos estão corretos ou incorretos, mantém o estado.
LOCAL GLOBAL
DAP.F96 15
Comparação entre os previsores
DAP.F96 16
Endereço de desvio junto com previsão (Branch Target Buffer – BTB)
• Endereço da instrução (PC) é usado como índice do BTB para obter a previsão e endereço de desvio
• Retorna o endereço da instrução prevista
PC
=
Não: previsão não-desvio
Sim: desvio, usar o PCprevisto
Previsão de desvioPrevisão de PC para desvio
(endereço)
Desvio Previsto(certo ou errado)
DAP.F96 17
• Evita desvio em programas incluindo operações (predicados) dentro das instruções condicionais:
if (x) then A = B op C else NOP– se (x) falso, então não ocorre nenhuma operação
– IA-64: tem campos de condição de 1-bit para execução condicional de instruções
• Vantagem– Evita desvio
• Desvantagens – Toma tempo (clock) mesmo que anulada
– Espera enquanto a condição é avaliada
– Condições complexas reduzem a eficiência, implicam em atraso de pipeline
Suporte de HW para mais ILP (Instruction Level Parallelism)
x
A = B op C
DAP.F96 18
Previsão Dinâmica de Desvio Sumário
• Correlação: Desvios executados recentemente correlacionados com o desvio seguinte
• Branch Target Buffer: inclui endereço de desvio & previsão
• Execução com predicado pode reduzir o número de desvios, número de erros em previsões
DAP.F96 19
Tornando CPI < 1: EmitindoMúltiplas Instruções/Ciclo
• Duas variações
• Superscalar: variando número de instruções/ciclo (1 a 8), escalados pelo compilador ou por HW (Tomasulo)
– IBM PowerPC, Sun UltraSparc, DEC Alpha, HP 8000
• Very Long Instruction Words - VLIW:
• instruções paralelizáveis (4 a16) escalados pelo compilador;
• coloca as instruções dispostas como uma única instrução longa
DAP.F96 20
Tornando CPI < 1: EmitindoMúltiplas Instruções/Ciclo
• Superscalar MIPS: 2 instruções, 1 FP & 1 outra qualquer
– Busca (fetch) 64-bits/ciclo de clock (Int. e FP)
Tipo Estágios de Pipeline
Int. instruction IF ID EX MEM WB
FP instruction IF ID EX MEM WB
Int. instruction IF ID EX MEM WB
FP instruction IF ID EX MEM WB
Int. instruction IF ID EX MEM WB
FP instruction IF ID EX MEM WB
DAP.F96 21
Revisão: desenrolamento de loops para minimizar paradas em MIPS pipeline
1 Loop: LD F0,0(R1)2 LD F6,-8(R1)3 LD F10,-16(R1)4 LD F14,-24(R1)5 ADDD F4,F0,F26 ADDD F8,F6,F27 ADDD F12,F10,F28 ADDD F16,F14,F29 SD F4,0(R1)10 SD F8,-8(R1)11 SD F12,-16(R1)12 SUBI R1,R1,#3213 BNEZ R1,LOOP14 SD F16,8(R1) ; 8-32 = -24
14 ciclos de clock, ou 3.5 por iteraçãoCPI = 1
DAP.F96 22
Desenrolamento em Superscalar
Integer instruction FP instruction Clock cycle
Loop: LD F0,0(R1) 1
LD F6,-8(R1) 2
LD F10,-16(R1) ADDD F4,F0,F2 3
LD F14,-24(R1) ADDD F8,F6,F2 4
LD F18,-32(R1) ADDD F12,F10,F2 5
SD F4,0(R1) ADDD F16,F14,F2 6
SD F8,-8(R1) ADDD F20,F18,F2 7
SD F12,-16(R1) 8
SD F16,-24(R1) 9
SUBI R1,R1,#40 10
BNEZ R1,LOOP 11
SD F20,-32(R1) 12
• Desenrola 5 vezes para evitar atrasos
• 12 clocks, ou 2.4 clocks por iteração
• CPI = 12 / 17 = ~0.7
LD para ADDD: 2 CiclosADDD para SD: 2 Ciclos
DAP.F96 23
Desafio de Múltipla Emissão para superescalar
• Enquanto a separação em Inteiros e FPs seja simples em HW, o CPI de 0.5 é possível somente para programas com:
– Exatamente 50% de operações FP– Sem conflitos
• É difícil: emitir ao mesmo tempo, mais que duas instruções
• É também difícil decidir se 2 instruções escalares podem ser emitidas ao mesmo tempo => examinar 2 opcodes, 6 especificadores de registradores,...
DAP.F96 24
VLIW (Very Large Instruction Word)
– A palavra de instrução longa tem espaço para muitas operações
– Todas as operações que o compilador coloca na palavra de instrução longa são independentes => execução em paralelo
– Ex.: 2 operações inteiras, 2 operações FP, 2 refer. memória, 1 desvio
» 16 a 24 bits por campo => 7*16 ou 112 bits a 7*24 ou 168 bits
Necessita de técnicas de compilação que faz a escalação passando por vários desvios
DAP.F96 25
Desenrolamento em VLIW
Memory Memory FP FP Int. op/ Clockreference 1 reference 2 operation 1 op. 2 branchLD F0,0(R1) LD F6,-8(R1) 1LD F10,-16(R1) LD F14,-24(R1) 2LD F18,-32(R1) LD F22,-40(R1) ADDD F4,F0,F2 ADDD F8,F6,F2 3LD F26,-48(R1) ADDD F12,F10,F2 ADDD F16,F14,F2 4
ADDD F20,F18,F2 ADDD F24,F22,F2 5SD F4,0(R1) SD F8,-8(R1) ADDD F28,F26,F2 6SD F12,-16(R1) SD F16,-24(R1) 7SD F20,-32(R1) SD F24,-40(R1) SUBI R1,R1,#48 8SD F28,-0(R1) BNEZ R1,LOOP 9
Desenrola 7 vezes para evitar atrasos 7 resultados em 9 clocks, ou 1.3 clocks por iteração CPI = 23/9 = ~0.39 Nota: Necessita mais registradores em VLIW (15 vs. 6 em Superescalar)
DAP.F96 26
Geração de código para VLIW - Trace Scheduling
• Dois passos:– Seleção de Traço (Trace)
» Encontrar uma sequência provável de blocos básicos, traço, de uma longa sequência de códigos
– Compactação de Traço» Espremer o traço em algumas instruções VLIW
» Necessita de código alternativo no caso de erro de previsão de código
DAP.F96 27
Superscalar vs. VLIW
• Tamanho de código menor
• Compatibilidade através de gerações de hardware
• Hardware Simplificado para decodificação e emissão de instruções
• Sem conflito entre as instruções
• Mais registradores
DAP.F96 28
Software Pipelining
• Observação: se iterações de loops são independentes, pode-se obter mais ILP tomando instruções de diferentes iterações
• Software pipelining: reorganiza loops tal que cada iteração seja composta de instruções de diferentes iterações do loop original
Iteration 0 Iteration
1 Iteration 2 Iteration
3 Iteration 4
Software- pipelined iteration
DAP.F96 29
Exemplo de Software Pipelining
1 LD F0,0(R1)
2 ADDD F4,F0,F2
3 SD F0,0(R1)
4 SUBI R1,R1,#8 5 BNEZ R1,LOOP
1 LD F0,0(R1)
2 ADDD F4,F0,F2
3 SD F0,0(R1)
4 SUBI R1,R1,#8 5 BNEZ R1,LOOP
1 LD F0,0(R1)
2 ADDD F4,F0,F2
3 SD F0,0(R1)
4 SUBI R1,R1,#8 5 BNEZ R1,LOOP
Iteration 0 Iteration
1 Iteration 2 Iteration
3 Iteration 4
Software- pipelined iteration
ITERAÇÃO 0ITERAÇÃO 1
ITERAÇÃO 2
DAP.F96 30
Exemplo de Software Pipelining Antes: desenrolado 3 vezes 1 LD F0,0(R1) 2 ADDD F4,F0,F2 3 SD F4,0(R1) 4 LD F6,-8(R1) 5 ADDD F8,F6,F2 6 SD F8,-8(R1) 7 LD F10,-16(R1) 8 ADDD F12,F10,F2 9 SD F12,-16(R1) 10 SUBI R1,R1,#24 11 BNEZ R1,LOOP
Após: Software Pipeline 1 SD F4,0(R1); Stores M[i] 2 ADDD F4,F0,F2 ; Adds to
M[i-1] 3 LD F0,-16(R1);Loads M[i-
2] 4 SUBI R1,R1,#8 5 BNEZ R1,LOOP
SW Pipeline
Loop Unrolled
Op
s. s
ob
rep
ost
as
Tempo
Tempo
DAP.F96 31
Intel/HP-IA-64 (ITANIUM ) “Explicitly Parallel Instruction
Computer (EPIC)”• Explora a arquitetura VLIW, deixando a detecção do ILP(Instruction Level
Parallelism) para os compiladores
• 3 Instruções em “grupos” de 128 bits; campos determinam se as instruções são dependentes ou independentes
• 64 registradores inteiros + 64 registradores ponto flutuante
• Hardware checa dependências
• Execução com Predicado => 40% menos previsões errôneas
• IA-64 : nome da arquitetura do conjunto de instruções
• Itanium - implementação
• Suporte para instruções IA-32, porém com desempenho menor que as últimas versões do Pentium, por explorarem mais o desempenho nas instruções EPIC (VLIW) e não terem suportes de ILP por hardware.
DAP.F96 32
Pentium 4 640 na tecnologia de 90 nm (2004)
recursos tamanho comentários
BTB de front-end 4K Previsão de desvio para instr. IA32
Trace Cache 12K uops Cache de rastreio
BTB de trace cache 2K Previsão de desvio para uops
Registradores para renomear
128 128 uops podem estar em execução com até 48 loads e 32 stores
Unidades funcionais 2 ALUs simples, ALU complexa, load, store, move de PF, aritm.PF
ALU simples executam no dobro da taxa de clock, aceitando até 2 uops a cada ciclo
Cache de dados L1 16 Kb, associativo de 8 vias, blocos de 64 bytes
Write through
Cache L2 2Mb, associativo de 8 bias, blocos de 128
Write back
DAP.F96 33
Pentium 4
DAP.F96 34
resumo
DAP.F96 35
SPEC benchmark - INTEGER
DAP.F96 36
SPEC benchmark – Ponto Flutuante
DAP.F96 37
Análise de desempenho do Pentium 4
inteirosP
onto flutuante
DAP.F96 38
Erro de especulação em instruções uop
inteirosP
onto flutuante
DAP.F96 39
Falta em caches L1 e L2 por 1000 instruções
Cache L1 Cache L2inteirosP
onto flutuante
DAP.F96 40
CPI
inteirosP
onto flutuante
DAP.F96 41
Pentium 4 x AMD Opteron
inteirosP
onto flutuante
DAP.F96 42
Desempenho do AMD Opteron x Pentium 4
inteirosP
onto flutuante
DAP.F96 43
IBM Power5 x Pentium 4
inteirosPonto flutuante
DAP.F96 44
Processador ideal
• Todas as restrições de ILP são removidas
• 1- renomeação de registrador – um número infinito de registradores virtuais à disposição, por isso todos os WAW e WAR são evitados e um número infinito de instruções pode iniciar simultaneamente
• 2- previsão de desvio – a previsão é perfeita
• 3- previsão de salto – todos os saltos são previstos
• 4- análise de alias de endereço de memória - todos os endereços de memória são conhecidos, e um load pode ser feito antes de um store, desde que os endereços não sejam iguais.
• 5- caches perfeitos – todos os endereços de memória usam 1 ciclo.
DAP.F96 45
ILP num processador ideal
inteiros
Ponto
flututante
DAP.F96 46
O que um processador ideal precisa fazer
• 1- olhar muito adiante para encontrar um conjunto de instruções a despachar (emitir), prevendo todos os desvios perfeitamente
• 2- renomear todos os usos de registrador para evitar WAR e WAW
• 3- determinar se existem dependências de dados entre as instruções no pacote de emissão; se houver renomear adequadamente
• 4- determinar se existe alguma dependência de memória entre as instruções sendo emitidas e tratar delas adequadamente
• 5- oferecer unidades funcionais replicadas suficientes para que todas as instruções prontas sejam emitidas
DAP.F96 47
Efeitos da limitação da janela
inteiros
Ponto
flutuante
DAP.F96 48
Efeitos dos tipos de previsão de desvios
DAP.F96 49
Redução do paralelismo pelo número de registradores para renomeação
Fig.3.5
DAP.F96 50
Efeito de níveis variados de análise de alias sobre programas