Entendendo a montagem MIPS com pipelining
Com o pipeline padrão de 5 estágios para a arquitetura MIPS e assumindo que algumas instruções dependem umas das outras, como as bolhas do pipeline são inseridas no código de montagem a seguir?
I1: lw $1, 0($0)
I2: lw $2, 4($0)
I3: add $3, $1, $2 ; I1 & I2 -> I3
I4: sw $3, 12($0) ; I3 -> I4
I5: lw $4, 8($0)
I6: add $5, $1, $4 ; I1 & I5 -> I6
I7: sw $5, 16($0) ; I6 -> I7
Em primeiro lugar em que inserimos uma bolha,
I1: IF ID EX MEM WB
I2: IF ID EX MEM
I3: IF ID --
I4: IF ID
Como você pode ver, enquanto o I3 está parado, o I4 pode prosseguir para a decodificação. Não é mesmo? Próximo,
I1: IF ID EX MEM WB
I2: IF ID EX MEM WB
I3: IF ID -- EX MEM WB
I4: IF ID -- -- EX MEM WB
I5: IF ID EX MEM WB
I6: IF ID -- EX MEM WB
I7: IF ID -- -- EX MEM WB
Eu acho que isso é possível com o pipeline padrão do MIPS, mas alguns dizem que sempre que uma bolha é inserida, todo o pipeline fica parado. Como isso pode ser descoberto?