Но законен ли этот обходной путь ??
Нет, это не так: P Вы не только увеличиваете тактовую частоту кеша, но и, очевидно, тактовую частоту памяти.И если вы можете запустить кэш-память в 5 раз быстрее и при этом соблюдать ограничения по времени, это означает, что вы должны синхронизировать весь процессор в 5 раз быстрее, если вы стремитесь к максимальной производительности.
A классический 5-ступенчатый RISC конвейер предполагает и рассчитан на задержку одного цикла для кеша попадания (и одновременный доступ к данным и кешу инструкций), но останавливается при пропуске кеша .(Расчет загрузки / хранения адреса происходит в EX, а доступ к кешу в MEM, поэтому эта стадия существует)
Задержка логически эквивалентна вставке NOP, так что вы можете сделать это в кешеМисс.Счетчик программы не должен увеличиваться, но в остальном это должно быть довольно локальное изменение.
Если бы у вас были аппаратные счетчики производительности, вы, возможно, захотите провести различие между реальными инструкциями и поддельными NOP, поэтомуВы могли бы считать реальные выполненные инструкции.
Вам нужно будет реализовать блокировки конвейера для других этапов, которые останавливают ожидание готовности своих входных данных, например, загрузка из-за пропуска кэша, за которой следует add
который использует результат.
MIPS У меня были слоты задержки загрузки (вы не можете использовать результат загрузки в следующей инструкции, потому что этап MEM находится после EX).Таким образом, это правило ISA скрывает задержку в 1 цикл при обращении к кешу, не требуя, чтобы HW обнаружил зависимость и остановил ее.
Но кеш miss все еще должен был быть обнаружен.Вероятно, это остановило весь конвейер, была ли зависимость или нет.(Опять же, как вставка NOP для остальной части конвейера при удержании входящей инструкции. За исключением того, что это не первый этап, поэтому он должен сигнализировать предыдущему этапу, что он останавливается.)
Более поздние версии MIPS удалили слот задержки загрузки, чтобы избежать вздутия кода с NOP, когда компиляторы не могли заполнить слот.Затем Simple HW пришлось обнаруживать зависимость и останавливаться, если это необходимо, но более умное оборудование, вероятно, отслеживало нагрузки в любом случае, чтобы они могли попадать под промах и так далее.Не останавливать конвейер до тех пор, пока инструкция фактически не попытается прочитать результат загрузки, который не был готов.
MIPS = "Микропроцессор без блокированных этапов конвейера" (то есть без обнаружения опасности для данных).Но он все равно должен был остановиться из-за пропусков в кеше.
Альтернативное расширение для аббревиатуры (которое все еще соответствует MIPS II, где слот задержки загрузки, как удалено, требующий блокировок HW для обнаружения этой опасности данных) будет «Минимально заблокированными этапами конвейера»но, по всей видимости, я обдумал это, спасибо @PaulClayton за то, что поймал это.