Схема выполнения конвейера с интервалом задержки или без него, с возможностью прогнозирования

#assembly #mips #pipeline #cpu-architecture #branch-prediction

Вопрос:

Я работаю над проблемой в теме процессоров. Эта проблема содержится в книге, название которой «Компьютерная организация и дизайн (6-е издание)». Проблема заключается в следующем: введите описание изображения здесь

Очевидно, что эта проблема связана с предсказателем ветвления, и требование для этой проблемы состоит в том, чтобы нарисовать диаграмму выполнения для каждого случая «взято» и «не взято», как указано в коде.

И вот ответ на вопрос 4.14.1 и 4.14.2: введите описание изображения здесь

Проблема кроется в ответе. Когда я читал о прогнозе для ветвей в MIPS, я подумал, что диаграмма будет другой. Для получения более подробной информации:

  1. В задаче 4.14.1 первая условная ветвь «не занята» в порядке, потому что нет слота задержки (как предположение), следующая выборка инструкций происходит только тогда, когда EX выполняется этап ветвления. Тем не менее, за следующей условной ветвью ( beq r3, r0, label1 ) немедленно следует другая условная ветвь ( beq r2, r0, label2 ), которая, я думаю, противоречит требованиям проблемы. Более того, sw r1, 0(r2) инструкция также следует условной ветви. Почему здесь так много конфликтов? Для получения более подробной информации о том, как филиал beq r2, r0, label2 может сразу определить, что следующая инструкция beq r3, r0, label1 даже если он не сталкивается EX со стадией, которая конфликтует с первым случаем, который lw r3, 0(r2) должен подождать, пока EX не будет завершена предыдущая инструкция.
  2. Эта проблема (проблема 4.14.2) немного отличается от предыдущей. В этой задаче используются слоты задержки, которые генерируют код, как в ответе. Это нормально для первой условной ветви ( beq r2, r0, label2 ), которая «к счастью» не взята, поэтому lw r3, 0(r2) она не отбрасывается и продолжает свое выполнение. Однако я не могу понять, что следующая условная ветвь ( beq r3, r0, label1 ) ДОЛЖНА быть получена в такте 6 вместо 5. Здесь что-то не так?
  3. Я обнаружил, что в случае неиспользования слотов задержки выбор того, будет ли взята ветвь или нет, делается до завершения EX этапа. Это отличается в случае использования слотов задержки, которые могут быть выполнены параллельно EX этапу инструкции ветвления. Является ли это уместным наблюдением? Если нет, можете ли вы дать мне дополнительные объяснения разницы между использованием и неиспользованием слотов задержки?

Я также посмотрел несколько видео, и это не дало мне должного объяснения. Поэтому я надеюсь, что вы сможете помочь мне разобраться в этой проблеме. Я с нетерпением жду ваших ответов. Если у вас есть какая-либо недостающая информация об этой проблеме, пожалуйста, сообщите мне.

Комментарии:

1. 1) Я не вижу конфликтов. Ветви, которые вы упоминаете, выполняются в таком порядке, если нет слотов задержки.

2. «что противоречит требованиям проблемы» — в чем заключаются конфликты? Предсказатель ошибается в первой ветви, поэтому он должен очистить конвейер (это не проиллюстрировано, но его эффект виден в следующей инструкции, начинающейся после выхода из ветви). Однако, когда предсказатель корректен, он может выполнять инструкцию за инструкцией без промывки конвейера, и в этом суть предсказателя.

3. @Jester Я обновил свои проблемы в 1 и 2. Вы можете рассмотреть мои мысли

4. @ErikEidt Конфликты были обновлены в моих проблемах. Вы можете рассмотреть более подробно в разделах 1 и 2 в разделе мои проблемы

5. Хорошо, обычно (и без задержек) мы ожидаем, что следующая инструкция после ветви будет либо следующей последовательной инструкцией, либо целью ветви, в зависимости от состояния ветви. С помощью слота задержки 1-я инструкция после ветви, которая находится «в слоте задержки», полностью завершается до выбора ветви или не ветви. Эта инструкция 1-го после всегда выполняется, поэтому никогда не отменяется как часть неправильного толкования. Таким образом, последовательность инструкций по-прежнему зависит от того, занята ветвь или нет, но ветвь откладывается до тех пор, пока не будет выполнена следующая последовательная инструкция.