Previsão de Desviosclaudio/Cursos/AOC2/Slides/oc2-cap08.pdf · 2007-01-15 · 7 Dependências em...
-
Upload
hoangxuyen -
Category
Documents
-
view
216 -
download
0
Transcript of Previsão de Desviosclaudio/Cursos/AOC2/Slides/oc2-cap08.pdf · 2007-01-15 · 7 Dependências em...
1
Previsão de DesviosBranch Prediction
Organização de Computadores 2Prof. Cláudio C. Rodrigues
2
Branch Prediction
1. Introdução2. Custo de Desvios3. Técnicas p/ redução do custo de desvio4. Técnicas implementadas em software
Delayed BranchBranch FoldingIn-lineDesenrolamento de loops
5. Técnicas implementadas em hardwarePrevisão EstáticaPrevisão DinâmicaPredição determinada pela história do desvioPrevisão via tabela com alvos dos desvios (Branch Target Buffer)Previsão dinâmica em dois níveis
6. Preditores Híbridos e Multi-Híbridos7. Conclusões
3
1. Introdução
Pipeline é uma técnica de exploração do paralelismo na execução de instruções a fim de aumentar o seudesempenho
Esse paralelismo permite a execução parcial de até ninstruções simultaneamente, onde n é o número de estágios do pipeline. O desempenho do pipeline só será máximo se não ocorrero bloqueio da execução contínua dos diversos estágios de execução.As instruções de desvio condicional provocam uma quedano desempenho desses processadores, já que bloqueiam a operação contínua do pipe.
O comando de desvio pode acarretar na troca do fluxoesperado de instruções , fazendo com que parte do conteúdo do pipeline seja descartado e recarregadonovamente, diminuindo o desempenho.
4
Dependencias de Dados e Controle
Dependências de controle são particularmente críticasquando da execução de desvios condicionais.
add $5, $3, $2
sub $6, $5, $2
beq $6, $7, somewhere
and $9, $3, $1
data dependences
control dependence
5
Quando os desvios são resolvidos?Instruction Fetch Instruction Decode Execute/
Address CalculationMemory Access Write Back
Instructionmemory
Address
4
32
0
Add Addresult
Shiftleft 2
IF/ID EX/MEM MEM/WB
Mux
0
1
Add
PC
0Writedata
Mux
1Registers
Readdata 1
Readdata 2
Readregister 1
Readregister 2
16Sign
extend
Writeregister
Writedata
Readdata
1
ALUresult
Mux
ALUZero
ID/EX
Datamemory
Address
Branch target address is put in PC during Mem stage.Correct instruction is fetched during branch’s WB stage.
6
Branch Hazards
IM Reg
ALU DM Reg
IM Reg
ALU DM
IM Reg
ALU DM Reg
IM Reg
ALU DM Reg
IM Reg
ALU DM Reg
CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8
beq $2, $1, here
here: lw ...
sub ...
lw ...
add ...
Estas instruçõesnão devem ser executadas!
Finalmente, a instrução correta!
7
Dependências em desvios
efeito de desvios condicionaisse o desvio ocorre, pipeline precisa ser esvaziadonão se sabe se desvio ocorrerá ou não, até o momentode sua execução
desviocondicional
decisão sobre desvio
instruções abandonadas próximainstrução
8
Dependências em desvios
instruções abandonadas não podem ter afetado conteúdode registradores e memórias
isto é usualmente automático, porque escrita de valores ésempre feita no último estágio do pipeline
deve-se procurar antecipar a decisão sobre o desvio para o estágio mais cedo possíveldesvios incondicionais
sabe-se que é um desvio desde a decodificação da instrução( segundo estágio do pipeline )é possível evitar abandono de número maior de instruções.problema:
Em qual estágio é feito o cálculo do endereço efetivo do desvio?
9
2. Custo de desvios
Segundo [HEN 96] os desvios e as trocas de fluxos são classificados em quatro tipos:
desvios condicionais;
desvios incondicionais;
chamada a procedimentos e
retorno de procedimentos.
Benchmarks:65% a 80% dos desvios são condicionais e incondicionais e o desvios de procedimentos são em torno de 10% a 20% cada.
Através da análise desses dados e considerando que as dependências de controle afetam drasticamente o desempenho de processadores pipeline e que os desvios condicionais são os que melhor representam este efeito negativo.
10
Custo de Desvios
Como evitar o efeito dos desvios?Empregar técnicas de previsão de desviosUsando essa previsão, as instruções pertencentes ao fluxo com maior probabilidade de execução podem ser buscadas, decodificadas e executadas antecipadamente.Porém é necessário mecanismos para desfazer eventuais operações provenientes de caminhos previstos erroneamente, acrescentando complexidade no hardware.
Técnicas p/ redução do custo de desvio:Implementadas em software
Implementadas em hardware
11
3. Técnicas p/ redução do custo do desvio
Implementadas em SoftwareEstas técnicas são empregadas durante a compilação do programa de aplicação.
Técnicas:Delayed BranchBranch FoldingIn-lineLoop Unrolling
12
Delayed Branch
Essa técnica de redução do custo de desvio consiste em reorganizar as instruções do programa. Essa reorganização deve preservar a equivalência semântica dos programas e minimizar os retardos impostos pela ramificação. Em uma máquina do tipo pipelining, podemos associar a cada desvio o número de instruções seguintes que serão executadas independentemente do desvio ser tomado ou não.
Em outras palavras, uma instrução de desvio armazenada na posição b e que indica a posição L como alvo, é um delayedbranch com retardo n se as instruções armazenadas nas posições b, b+1, ..., b+n, L forem executadas.
13
Delayed Branch
Considere o trecho abaixo: 1. A := B; 2. B := B -1; 3. if A = Q then go to 7 4. Q := Q +1; 5. D := E; 6. E := F; 7. X := Q;
Se o retardo da instrução (3) for igual a 1, então a seqüência de instruções executadas (se A = Q) seria: 1, 2, 3, 4, 7. Nesse caso, se o valor inicial da variável Q = q, então teremos X = q+1 no final do programa.
14
Delayed Branch
Uma estratégia capaz de neutralizar o indesejável efeito da busca antecipada e execução do próximo comando, seria introduzir n instruções do tipo NOP após cada instrução de desvio com retardo igual a n . 1. A := B; 2. B := B -1; 3. if A = Q then go to 8 4. NOP; 5. Q := Q +1; 6. D := E; 7. E := F; 8. X := Q;
Conforme podemos verificar, o trecho de programa seráexecutado corretamente após a introdução do comando NOP. A seqüência de instruções para um retardo n = 1 e com A = Q seria: 1, 2, 3, 4 e 8.
15
Delayed Branch
Acréscimo de NOPs degrada o desempenho e o tamanho do código objeto. Assim, é aplicado técnicas de movimentação de código que consiste em movimentar a instrução de desvio nposições acima. Supondo n = 1 temos: 1. A := B; 2. if A = Q then go to 7 3. B := B -1; 4. Q := Q +1; 5. D := E; 6. E := F; 7. X := Q;
Para fazer essas movimentações, o compilador deve levar em consideração as relações de dependência entre as instruções, de forma que a equivalência semântica do programa seja preservada.
16
Branch Folding
Nesta técnica, cada instrução inclui o endereço da sua sucessora. Em tempo de execução as instruções deste processador são decodificadas e armazenadas em uma memória cache de instruções, em conjunto com o endereço da próxima instrução a ser executada.
No caso de um comando de desvio incondicional, o endereço almejado fica armazenado na instrução que precede o comando de desvio, eliminando-se desta forma a necessidade de executar instruções de transferência de controle incondicional.
17
Branch Folding
Um tratamento diferenciado é reservado para os comandos de desvio condicional. Como nos outros tipos de instruções, o endereço da sucessora do comando de desvio é armazenado no campo apropriado da instrução que antecede o comando de ramificação condicional. Compete ao compilador a tarefa de especificar qual das duas sucessoras do desvio terá seuendereço armazenado na instrução precedendo a transferênciade controle. O compilador realiza esta tarefa, ou seja, especifica qual será a provável instrução sucessora empregando uma técnica de previsão estática. Assim ele seleciona o endereço com maiorprobabilidade de execução e o inclui na instrução anterior aocomando de desvio.
18
In-line
As técnicas de previsão de desvios apresentam uma reduzida taxa de acertos quando do tratamento de instruções de retorno de funções, já que um procedimento pode ser chamado de diferentes pontos do programa e portanto, a técnica de predição precisaria armazenar longos padrões de ativações / retornos para aumentar a taxa de acerto.
Este fato motivou o desenvolvimento de técnicas de otimização de código como a in-line, que consiste em substituir os procedimentos dos programas pelo código objeto correspondente nos locais onde os procedimentos são ativados.
19
Loop Unrolling
Esta técnica reduz o custo das instruções de desvios condicionais existentes no comando for. Observe abaixo a tradução da estrutura for:
for(cv = a; cv<=b; cv++) s; L2: ...avalia limites a e b
faz cv = a
se cv > b, desvio condicional para L2
L1 código para execução de s
Incrementa cv
se cv < b, desvio condicional para L1
L2 ....
Na seqüência, a e b são respectivamente os limites inferior e superior do for e cv é a variável de controle.
20
Loop Unrolling
Para ilustrar esta técnica de desenrolamento, vamos considerar o trecho do programa a seguir:
for (i=1; i<100;i++)
c[i] = a[i] + b[i];
......
Vamos assumir que os registradores r1 .... r8 armazenam: • r1 : a variável de controle i (inicialmente com o valor do
limite inferior do for)
• r2 : o limite superior do for
• r3 .... r5 : os endereços iniciais dos vetores a, b e c respectivamente
• r6 .... r8 : os valores dos elementos a[i], b[i] e c[i] durante a i-ésima iteração, respectivamente
21
Loop Unrolling
O código objeto do trecho é: Loop: load r6 (carrega a[i])
load r7 (carrega b[i])
add r8, r6, r7 (c[i] = a[i] + b[i])
sto r8 (armazena c[i])
add r1, r1, 1 incrementa var. controle
comp r1, r2 (i > 100) ?
bnez loop desvia para loop se i <= 100
....
22
Loop Unrolling
Desenrolando o loop duas vezes, ficamos com o seguinte código objeto:
Loop load r6 (carrega a[i]) load r7 (carrega b[i]) add r8, r6, r7 (c[i] = a[i] + b[i]) sto r8 (armazena c[i]) load r6 (carrega a[i+1]) load r7 (carrega b[i+1]) add r8, r6, r7 (c[i+1] = a[i+1] + b[i+1]) sto r8 (armazena c[i+1]) add r1, r1, 2 incrementa var. controle comp r1, r2 (i > 100) ? bnez loop desvia para loop se i <= 100
O loop desenrolado conta com 11 instruções enquanto que originalmente ele era formado por 7 instruções. Dinamicamente, o loop desenrolado executa 550instruções ao invés das 700 instruções do código original.
23
Técnicas implementadas em Hardware
Diferentemente das técnicas implementadas porsoftware, estas técnicas atuam durante a execuçãodo programa e são implementadas pela unidade de controle do processador.Existem dois tipos de técnicas implementadas porhardware:
técnicas estáticasa previsão ocorre baseado em definições feitas emtempo de projeto de um novo processador;
técnicas dinâmicasrealizam dinamicamente as previsões de desviobaseado nas informações coletadas em tempo de execução.
24
Previsão Estática
supor sempre mesma direção para o desviodesvio sempre ocorredesvio nunca ocorreO código da operação determina a previsão
compilador define direção mais provávelinstrução de desvio contém bit de previsão, ligado / desligado pelo compiladorinício de laço ( ou desvio para frente ):
desvio improvávelfinal de laço ( ou desvio para trás ):
desvio provável
Técnicas estáticas alcançam taxas de 85% de acerto.
25
Previsão Dinâmica
A unidade de controle realiza a previsão de desviosdinamicamente.Usualmente, essas técnicas são mais eficientes do que as estáticas.Técnicas dinâmicas armazenam informações coletadas emtempo de execução das instruções de desvio e, quando o desviofor novamente executado, o mecanismo de previsão verifica o que ocorreu no passado mais recente e baseado nessainformação, prevê qual o resultado que será produzido pelainstrução de desvio.
As informações ficam armazenadas numa pequena tabeladenominada Tabela de História dos Desvios (Branch History Table).
26
Previsão Dinâmica
Por exemplo, o processador pode incluir uma BHT para
armazenar informações relacionadas com as mais recentes
execuções dos comandos de desvio. Os campos de cada
entrada podem conter ou o endereço do desvio e o endereço dasucessora.
O endereço da instrução é usada como chave para acesso à
tabela. Se a instrução estiver armazenada no campo de
endereço de desvio isto significa que o endereço no campo
endereço da sucessora será utilizado para buscar a próxima
instrução.
27
Predição dinâmica
tabela look-up associativaendereçoinstrução
endereçodesvio
bit de validade
PC
fetch
carga do endereçode desvio
endereço
instrução
28
Predição dinâmica
tabela look-up associativa armazena triplasendereços das instruções de desvio condicional maisrecentemente executadasendereços de destino destes desviosbit de validade, indicando se desvio foi tomado na últimaexecução
quando instrução de desvio condicional é buscada na memóriaé feita comparação associativa na tabela, à procura do endereço desta instruçãose endereço é encontrado e bit de validade está ligado, o endereço de desvio armazenado na tabela é usadoao final da execução da instrução, endereço efetivo de destinodo desvio e bit de validade são atualizados na tabela
tabela pode utilizar diversos mapeamentos e algoritmos de substituição
29
Previsão determinada pela história do desvio
Essa técnica verifica o que ocorreu com as k mais recentesexecuções de um desvio e realiza uma previsão do resultadoque será produzido pela corrente execução do desvio. Os k maisrecentes resultados de cada desvio ficam armazenados numaTabela da História dos Desvios (BHT - Branch History Table) que é atualizada após a conclusão da instrução de desvio.
Fisicamente, as entradas contendo a história dos desvios podemser armazenadas num conjunto de registradores ou então numamemória cache no interior do processador.
30
1-bit predictors
O esquema consiste em utilizar o resultado da última execuçãoda instrução de desvio. Nesse caso, um bit seria suficiente paraarmazenar o resultado anterior da instrução de desvio.
Se a previsão indicar que o desvio deve ser tomado e se o estágio de execução indicar o contrário, a tabela BHT éatualizada, as instruções nos estágios precedentes sãodescartadas e o estágio de busca inicia a transferência de instruções pertencentes ao fluxo apropriado.
Se a instrução de desvio estiver sendo executada pela primeiravez, utiliza-se uma das duas técnicas estáticas apresentadaspreviamente e em seguida, inclui-se o desvio na BHT.
31
1-bit predictors
O autômato para esse mecanismo é muito simples e é mostradona figura abaixo
O número de bits de história (previsão) é um fator de extremarelevância na escolha do algoritmo de previsão. Acima foi mostradoum autômato para previsão com 1 bit de história. O maior problemaem se usar esta técnica é quando se faz necessário prever o destinode desvios de controle do laços, e o laço é executado mais de uma vez(loops aninhados).
32
2-bit Prediction Scheme
Registra as últimas duas decisões do desvio. Altera a prediçãosomente após duas previsões consecutivas erradas.
Taken
Taken
Taken
Taken
Not taken
Not taken
Not taken
Not taken
Predict taken Predict taken
Predict not taken Predict not taken
33
Saturated 2-bits predictors
mecanismo com 2 bits de história registra o resultado das duasúltimas execuções, e a próxima previsão é modificada apenas se as duas últimas previsões foram incorretas.Nos estados onde os dois bits coincidem, a previsão segue o resultado indicado por ambos.Nos estados onde os dois bits diferem, a previsão segue a indicação do bit que registra o estado mais antigo.
34
Exemplo: 2-bit Branch Prediction
Nested loop:Loop1: …
…Loop2: …
bne r1,r0,loop2…
bne r2,r0,loop1
Execução do loop externo:00 → prediz NT; realizou T → atualizado p/ 01 (predição errada)01 → prediz NT; realizou T → atualizado p/ 10 (predição errada)10 → prediz T; realizou T → atualizado p/ 1111 → prediz T; realizou T…11 → prediz T; realizou NT → atualizado p/ 10 (predição errada)
35
Exemplo: continuação
Execução do loop interno:10 → prediz T; realizou T → atualizado p/ 1111 → prediz T; realizou T → atualizado p/ 10 …11 → prediz T; realizou NT → atualizado p/ 10 (prediçãoerrada)
Taxas de previsões errôneas para o 2-bit predictors considerando 4096 entradas no buffer é de 1% a 18%.
36
Correlating or 2-level Predictors
A previsão depende do contexto do desvio.Exemplo:
if (a == 2)a = 0;
if (b == 2)b = 0;
if (a != b) {…}
DSUBUI R3,R1,2BNEZ R3,L1DADD R1,R0,R0
L1:DSUBUI R3,R2,2BNEZ R3,L2DADD R2,R0,R0
L2: DSUBU R3,R1,R2BEQZ R3,L3
Se ambos desvios nãosão realizados entãoa==b==0 e o últimodesvio será realizadocom certeza.
37
Previsão via tabela com alvo dos desvios:Branch Target Buffer
Uma técnica alternativa para previsão é a que emprega umatabela contendo os alvos das instruções de desvios. Denominada BTB - Branch Target Buffer, essa tabela é umaevolução da BHT.Como anteriormente, a tabela BTB inclui campos para identificara instrução de desvio e para armazenar a história das recentesexecuções do comando de desvio. Adicionalmente, a BTB incluium campo contendo informações sobre a instrução sucessorado desvio: geralmente o campo armazena o endereço efetivo dasucessora; em outras implementações, a instrução sucessoratambém.
A BTB torna o processador mais eficiente do que aqueles queusam simplesmente uma BHT por causa do potencial oferecidopelas informações sobre a sucessora do desvio.
38
Previsão dinâmica em dois níveis
A idéia de coletar dinamicamente dois níveis de história de desvios foi proposta por Yeh e Patt [YEH 91].
O primeiro nível armazena a história dos últimos K desviosencontrados.
O segundo nível armazena o que aconteceu com as últimasj ocorrências de um padrão específico para os K desvios.
O primeiro nível é denominado History Register Table e o segundo nível de Pattern Table.
O endereço de um desvio é mapeado para acessar o primeiro nível assim como em uma BTB convencional.
Após mapear a entrada correta, o registrador de história(Branch History Register) fornece o padrão de bits que irádeterminar qual entrada será acessada no segundo nível.
Ao acessar o segundo nível, o mecanismo dispõe então do bit de previsão que indicará o caminho a ser seguido pelo estágio de buscapara acessar as instruções seguintes.
39
Previsão dinâmica em dois níveis
40
Preditores híbridos e multi-híbridos
Preditores híbridos incluem diversas técnicas, todas operandoem paralelo, mas somente a técnica com maior probabilidade de acerto é a que fornece o resultado da predição para a unidadede busca de instruções.
O preditor híbrido proposto por McFarling é formado por doispreditores simples que são controlados por um mecanismo queseleciona dinamicamente qual das duas predições seráconsiderada.
O preditor multi-híbrido emprega um número maior de componentes e, ao aumentar esse número, os autores verificamque previsões com maior índice de precisão foram obtidas.
41
Bibliografia
[LEE84] LEE, J. K.; SMITH, A. J. "Branch Prediction Strategies and Branch Target Buffer Design", IEEE Computer, vol. 17, No 1, January 1984, pp. 6-22.[MCF93] S. McFarling, "Combining Branch Predictors", Technical Report TN-36, Digital Western Research Laboratory, June 1993.[HEN96] HENESSY, Jhon L.; PATTERSON, David, Computer Architecture: A Quantitative Approach. 2.ed. Palo Alto: Morgan Kaufmann, 1996[UHT97] Uht, A.; Sindagi, V.; Somanathan, S.; Branch EffectReduction Techniques – IEEE Computer, May1997