previsão de desviosclaudio/cursos/aoc2/slides/oc2-cap08.pdf · 2007-01-15 · 7 dependências em...

21
1 Previsão de Desvios Branch Prediction Organização de Computadores 2 Prof. Cláudio C. Rodrigues Branch Prediction 1. Introdução 2. Custo de Desvios 3. Técnicas p/ redução do custo de desvio 4. Técnicas implementadas em software Delayed Branch Branch Folding In-line Desenrolamento de loops 5. Técnicas implementadas em hardware Previsão Estática Previsão Dinâmica Predição determinada pela história do desvio Previsã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íbridos 7. Conclusões

Upload: hoangxuyen

Post on 28-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

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