The Instruction Fetch Unit

MO601 - Arquitetura de Computadores II

http://www.ic.unicamp.br/~rodolfo/mo601

Rodolfo Azevedo - rodolfo@ic.unicamp.br

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Verificando conceitos

  1. Quais são os primeiros passos para executar uma instrução?
  2. Descreva cenários onde você precisará de previsão de desvios (branch prediction)
  3. Por que previsão de desvios?
  4. Considerando um preditor de desvio como uma caixa preta, quais são as entradas e as saídas?
MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Quais são os primeiros passos para executar uma instrução?

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Descreva cenários onde você precisará de previsão de desvios (branch prediction)

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Por que previsão de desvios?

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Considerando um preditor de desvio como uma caixa preta, quais são as entradas e as saídas?

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Pipeline de Fetch

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Instruction Cache

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Branch Target Buffer

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Return Address Stack

  • Usa o call-trace para selecionar o endereço de retorno
  • Tabela com poucas entradas
  • Perte uma entrada em cada overflow
  • Pode ser implementado com uma pilha
MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Previsão de Saltos (Branck Predictor)

  • Preditor estático
    • Utiliza um bit da codificação da instrução
  • Preditor dinâmico
    • Local Predictor
    • Correlating predictor (gshare)
    • Tempo de warmup
  • Preditores híbridos
  • Agrupamento com a BTB
MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Par ou ímpar?

for (i = 0; i < 100; i++)

  if (i % 2) 

    printf("%d é ímpar\n", i);

  else

    printf("%d é par\n", i);

Quantas instruções de salto tem esse trecho de código?

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Par ou ímpar?

for (i = 0; i < 100; i++)

  if (i % 2)                     // salto após

    printf("%d é ímpar\n", i);   // salto após

  else

    printf("%d é par\n", i);     // salto após

Quantas instruções de salto tem esse trecho de código?

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Em assembly - quantos saltos?

  mov s0, zero
for:
  andi s1, s0, 1
  beq  s1, zero, else
  lui  a2, %hi(mensagem_impar)
  addi a0, a2, %lo(mensagem_impar)
  mv   a1, s1
  call printf
  j    fim_for
else:
  lui  a2, %hi(mensagem_par)
  addi a0, a2, %lo(mensagem_par)
  mv   a1, s1
  call printf
fim_for:
  addi s1, s1, 1
  li   a0, 99
  ble  s1, a0, for
MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Em assembly - quantos saltos?

  mov s0, zero
for:
  andi s1, s0, 1
  beq  s1, zero, else               # Salto
  lui  a2, %hi(mensagem_impar)
  addi a0, a2, %lo(mensagem_impar)
  mv   a1, s1
  call printf                       # Salto
  j    fim_for                      # Salto
else:
  lui  a2, %hi(mensagem_par)
  addi a0, a2, %lo(mensagem_par)
  mv   a1, s1
  call printf                       # Salto
fim_for:
  addi s1, s1, 1
  li   a0, 99
  ble  s1, a0, for                  # Salto
MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Preditor estático

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Preditor dinâmico - 1 bit

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Preditor dinâmico - 2 bits

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0

Correlating predictor

MO601 - Arquitetura de Computadores II - Rodolfo Azevedo - CC BY-SA 4.0