1. Ilustre o pipeline de um MIPS com dual-issue estático, mostrando como instruções ALU e load/store são alinhadas.

Passo 1

O enunciado pede para a gente mostrar como funciona o pipeline de um MIPS com dual-issue estático, isto é, capaz de emitir até duas instruções por ciclo sob regras pré-definidas. Aqui vamos focar em pares formados por uma instrução ALU (ex.: add, sub) e uma instrução load/store (ex.: lw, sw), que é o emparelhamento estático mais comum. Precisamos lembrar que cada “slot” segue 5 estágios: IF, ID, EX, MEM, WB, mas como são dois slots, chamaremos de I F_{1}/I F_{2}, I D_{1}/I D_{2}, E X_{1}/E X_{2}, ME M_{1}/ME M_{2} e W B_{1}/W B_{2}.

Passo 2

Arquitetura e regra de emparelhamento estático:
1) Slot 1 (pipeline 1) aceita qualquer instrução inteiramente no E X_{1} e gravagem em W B_{1}.
2) Slot 2 (pipeline 2) só aceita instruções de load/store, faz cálculo de endereço em E X_{2}, acesso de memória em ME M_{2} e write-back em W B_{2}.
3) Nos estágios ME M_{1} e E X_{2} e ME M_{1} e E X_{2} podem ocorrer bolhas (bubbles) para instruções que não usam aquele estágio.

Passo 3

Fluxo de uma dupla típica I_{1} =ALU e I_{2} =load:
– Ciclo 1: I F_{1} busca I_{1}; I F_{2} busca I_{2}.
– Ciclo 2: I D_{1} decodifica I_{1}; I D_{2} decodifica I_{2}.
– Ciclo 3: E X_{1} executa operação ALU de I_{1}; E X_{2} faz cálculo de endereço de I_{2}.
– Ciclo 4: ME M_{1} é bolha para I_{1} (ALU não acessa memória); ME M_{2} acessa memória para I_{2}.
– Ciclo 5: W B_{1} escreve resultado de I_{1}; W B_{2} write-back de I_{2}.

Passo 4

Para ver como isso se estende a vários pares, considere quatro instruções:
I_{1} =AL U_{1}, I_{2} =L S_{1}, I_{3} =AL U_{2}, I_{4} =L S_{2}. O pipeline fica assim:
Ciclo | I\(F_{1}\)  I\(F_{2}\)  | I\(D_{1}\)  I\(D_{2}\)  | E\(X_{1}\)    E\(X_{2}\)    | ME\(M_{1}\)  ME\(M_{2}\)   | W\(B_{1}\)  W\(B_{2}\)
-----------------------------------------------------------------------
  \(1\)   | \(I_{1} I_{2}\)  |        |         |          |       
  \(2\)   | \(I_{3} I_{4}\)  | \(I_{1} I_{2}\) |         |          |       
  \(3\)   |        | \(I_{3} I_{4}\) | \(I_{1}\)(ALU) \(I_{2}\)(addr) |          |       
  \(4\)   |        |        | \(I_{3}\)(ALU) \(I_{4}\)(addr) | ME\(M_{2}\)(\(I_{2}\)) |       
  \(5\)   |        |        |         | ME\(M_{2}\)(\(I_{4}\)) W\(B_{1}\)(\(I_{1}\)) | W\(B_{2}\)(\(I_{2}\)) 
  \(6\)   |        |        |         | W\(B_{1}\)(\(I_{3}\)) W\(B_{2}\)(\(I_{4}\)) |       
Aqui “addr” no E X_{2} é o cálculo de endereço da load/store. Perceba que em cada ciclo temos até duas instruções em estágios diferentes e que ALU do slot 1 nunca disputa a unidade de MEM com o slot 2.

Passo 5

Conclusão sobre o alinhamento:
  • ALU no slot 1 avança por E X_{1} \toME M_{1}(bolha) \toW B_{1}.
  • Load/store no slot 2 avança por E X_{2}(endereço) \toME M_{2}(acesso) \toW B_{2}.
  • Em cada ciclo só há um acesso real à memória (ME M_{2}), e a E X_{1} do slot 1 corre paralela à E X_{2} do slot 2.

Resposta

O pipeline de um MIPS dual-issue estático, emparelhando ALU e load/store, tem 5 estágios duplicados e alinha as fases de E X_{1} com E X_{2} (para cálculo de endereço), depois ME M_{2} para acesso à memória e W B_{1}/W B_{2} em paralelo, conforme ilustrado no diagrama acima.

Exercícios relacionados