Если инструкция не нуждается в этапе MEM, она не будет передавать сигнал, связанный с памятью на этом этапе, но она все равно должна пройти его .
Она равна трата времени, но все же улучшение по сравнению с нетрубопроводной обработкой.
Одна из идей сделать так, чтобы классический 5-ступенчатый станок MIPS пропускал MEM по требованию, состоит в добавлении канала данных из EX в WB и добавлении некоторой логики.
Если после команды R-типа следует послепри загрузке / сохранении возникнет конфликт:
IF ID EX MEM WB
IF ID EX WB <-- Conflict: two instructions in WB
ЦП может отправлять выходные данные EX как в MEM, так и в WB, плюс этап MEM будет маскировать канал данных из EX в WB, когда этот этап необходим, ибудет маскировать путь данных MEM-WB, когда он не нужен.
Таким образом, когда в MEM уже есть инструкция, следующая инструкция в EX будет идти в MEM (а не в WB) в следующем цикле:
IF ID EX MEM <-- Here EX-WB is masked (since MEM is used) and MEM-WB is allowed
IF ID EX <-- Can go to both MEM and WB but EX-WB is masked off
IF ID EX MEM WB <-- So this instruction's next stage is WB (as usual)
IF ID EX MEM <-- This goes to MEM instead, so the pipe keeps flowing
Если предыдущей инструкции не требовалось MEM, можно пропустить один этап:
IF ID EX <-- Here EX-WB is allowed (assume no prev instructions) and MEM-WB is not since (MEM was not used)
IF ID
IF ID EX WB <-- Instruction skips MEM stage since EX-WB was allowed
IF ID EX <-- Next instruction, again, EX-WB is allowed since MEM was not used
IF ID EX WB <-- Done
IF ID EX WB <-- Stage MEM skipped
ADDENDUM
Стоит отметить, что в случаеконфликта для соединения стека WB в самом первом примере, лучше остановить весь конвейер за 1 цикл, иначе конфликт никогда не разрешится, и все последующие инструкции пройдут этап MEM независимо отТип EIR.
Без остановки:
mem = Useless MEM stage but necessary to avoid a WB confict
MEM = Instruction uses the MEM stage
IF ID EX MEM WB
IF ID EX mem WB
IF ID EX mem Wb
Если мы введем остановку одного цикла, мы разрешим конфликт:
Lowercase names means stalled cycles
IF ID EX MEM WB
IF ID EX ex WB
IF ID id EX WB
IF if ID EX WB
IF ID EX WB
IF ID EX WB
Обратите внимание, как с точки зрения пропускной способности этоОптимизация на самом деле не приносит ничего полезного.
Конвейер стабилизируется на более короткой длине, но если вы сравните эту диаграмму с диаграммой, где MEM является обязательной, вы получите все этапы WB в тех же циклах!
Если A зависит отB тогда A нужно дождаться, пока B достигнет своей стадии WB (или EX, если в конвейере есть пересылка), и, поскольку позиции ступеней WB (или EX) одинаковы с этой оптимизацией или без нее, это не является прямымнаблюдаемый к программному обеспечению (то есть это не имеет никакой выгоды).
Однако более короткий конвейер потребляет меньше энергии, и после флеша быстрее заполнять, но для того, чтобы реально использовать возможность пропустить этап, нужен суперскалярный процессор (который имеет более одного исполнительного блока, так что EX и MEMможет перекрываться).