понимание сборки MIPS с конвейерной обработкой
Со стандартным 5-ступенчатым конвейером для архитектуры MIPS и предположением, что некоторые инструкции зависят друг от друга, как пузырьки конвейера вставляются в следующий код сборки?
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
Во-первых, что мы вставляем пузырь, мы
I1: IF ID EX MEM WB
I2: IF ID EX MEM
I3: IF ID --
I4: IF ID
Как видите, пока I3 остановлен, I4 может приступить к декодированию. Разве это не правильно? Следующий,
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
Я думаю, что это возможно со стандартным конвейером MIPS, но некоторые говорят, что всякий раз, когда пузырь вставляется, весь конвейер останавливается. Как это можно выяснить?