#assembly #mips #pipeline #cpu-architecture #branch-prediction
Вопрос:
Я работаю над проблемой в теме процессоров. Эта проблема содержится в книге, название которой «Компьютерная организация и дизайн (6-е издание)». Проблема заключается в следующем:
Очевидно, что эта проблема связана с предсказателем ветвления, и требование для этой проблемы состоит в том, чтобы нарисовать диаграмму выполнения для каждого случая «взято» и «не взято», как указано в коде.
И вот ответ на вопрос 4.14.1 и 4.14.2:
Проблема кроется в ответе. Когда я читал о прогнозе для ветвей в MIPS, я подумал, что диаграмма будет другой. Для получения более подробной информации:
- В задаче 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
не будет завершена предыдущая инструкция. - Эта проблема (проблема 4.14.2) немного отличается от предыдущей. В этой задаче используются слоты задержки, которые генерируют код, как в ответе. Это нормально для первой условной ветви (
beq r2, r0, label2
), которая «к счастью» не взята, поэтомуlw r3, 0(r2)
она не отбрасывается и продолжает свое выполнение. Однако я не могу понять, что следующая условная ветвь (beq r3, r0, label1
) ДОЛЖНА быть получена в такте 6 вместо 5. Здесь что-то не так? - Я обнаружил, что в случае неиспользования слотов задержки выбор того, будет ли взята ветвь или нет, делается до завершения
EX
этапа. Это отличается в случае использования слотов задержки, которые могут быть выполнены параллельноEX
этапу инструкции ветвления. Является ли это уместным наблюдением? Если нет, можете ли вы дать мне дополнительные объяснения разницы между использованием и неиспользованием слотов задержки?
Я также посмотрел несколько видео, и это не дало мне должного объяснения. Поэтому я надеюсь, что вы сможете помочь мне разобраться в этой проблеме. Я с нетерпением жду ваших ответов. Если у вас есть какая-либо недостающая информация об этой проблеме, пожалуйста, сообщите мне.
Комментарии:
1. 1) Я не вижу конфликтов. Ветви, которые вы упоминаете, выполняются в таком порядке, если нет слотов задержки.
2. «что противоречит требованиям проблемы» — в чем заключаются конфликты? Предсказатель ошибается в первой ветви, поэтому он должен очистить конвейер (это не проиллюстрировано, но его эффект виден в следующей инструкции, начинающейся после выхода из ветви). Однако, когда предсказатель корректен, он может выполнять инструкцию за инструкцией без промывки конвейера, и в этом суть предсказателя.
3. @Jester Я обновил свои проблемы в 1 и 2. Вы можете рассмотреть мои мысли
4. @ErikEidt Конфликты были обновлены в моих проблемах. Вы можете рассмотреть более подробно в разделах 1 и 2 в разделе мои проблемы
5. Хорошо, обычно (и без задержек) мы ожидаем, что следующая инструкция после ветви будет либо следующей последовательной инструкцией, либо целью ветви, в зависимости от состояния ветви. С помощью слота задержки 1-я инструкция после ветви, которая находится «в слоте задержки», полностью завершается до выбора ветви или не ветви. Эта инструкция 1-го после всегда выполняется, поэтому никогда не отменяется как часть неправильного толкования. Таким образом, последовательность инструкций по-прежнему зависит от того, занята ветвь или нет, но ветвь откладывается до тех пор, пока не будет выполнена следующая последовательная инструкция.