- (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.
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
elw
que causa 1 ciclo de stall; - load-use hazard entre
lw
emul
que causa 2 ciclos de stall.
Para resolver, vamos:
- Calcular o número de ciclos “ideais” sem stalls em dual-issue;
- Somar as penalidades de stalls dadas pelos hazards;
- 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 é
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
elw
introduz 1 ciclo de stall. - O load-use hazard entre
lw
emul
introduz 2 ciclos de stall.
No total, os stalls somam
Passo 4
Somando ciclos ideais e ciclos de stall, temos
Resposta
O código leva 5 ciclos para ser executado.