1. (Análise de Hazards em Pipeline Dual-Issue) Um MIPS com dual-issue estático executa o seguinte código:
    1: add $t0, $s0, $s1
    2: lw $s2, 0($t0)
    3: mul $t1, $s2, $s3
    4: sw $t1, 4($t0)
    Sabendo que:
    EX data hazard entre add e lw causa 1 stall.
    Load-use hazard entre lw e mul causa 2 stalls.
    Calcule o número total de ciclos para executar o código.

Passo 1

O enunciado trata de uma pipeline MIPS static dual-issue, ou seja, em cada ciclo idealmente podem partir duas instruções ao mesmo tempo (desde que não haja conflito). Temos quatro instruções e dois tipos de hazard já quantificados:
  • EX data hazard entre add e lw que causa 1 ciclo de stall;
  • load-use hazard entre lw e mul que causa 2 ciclos de stall.
    Para resolver, vamos:
  1. Calcular o número de ciclos “ideais” sem stalls em dual-issue;
  2. Somar as penalidades de stalls dadas pelos hazards;
  3. Obter o total de ciclos.

Passo 2

Em dual-issue estático, sem nenhum stall, a taxa ideal é de duas instruções emitidas por ciclo. Com 4 instruções, o número mínimo de ciclos de emissão é
\left\lceil \frac{4}{2} \right\rceil = 2
ou seja, seriam 2 ciclos para emitir todas as instruções se não houvesse nenhum impedimento.

Passo 3

Agora contabilizamos os stall cycles trazidos pelos hazards:
  • O EX data hazard entre add e lw introduz 1 ciclo de stall.
  • O load-use hazard entre lw e mul introduz 2 ciclos de stall.
No total, os stalls somam
1 + 2 = 3

Passo 4

Somando ciclos ideais e ciclos de stall, temos
\text{Ciclos totais} = 2 \;(\text{ideal}) + 3 \;(\text{stalls}) = 5

Resposta

O código leva 5 ciclos para ser executado.

Exercícios relacionados