Ранний MIPS оценивал условия ветвления с помощью специального исполнительного блока на этапе декодирования, поэтому ему требовался только 1 цикл цикла (который он заполняет 1 слотом задержки ветвления: Что такое слоты точки задержки? ).
Источник: Классический RISC Википедии (5-ступенчатый конвейер) статья
Декодирование инструкции
(4-й абзац) Если декодированная инструкция была ветвью или переходом, целевой адрес ветви или перехода вычислялся параллельно со считыванием файла регистра.Условие ветвления вычисляется после считывания файла регистра, и если выполняется ветвление или если инструкция является переходом, предиктору ПК на первом этапе назначается цель ветвления, а не вычисленный увеличенный ПК.
Следует отметить, что некоторые архитектуры использовали ALU на этапе выполнения за счет небольшого уменьшения пропускной способности команд.
Также: Какова роль EXстадия ветвления в конвейерной MIPS w Forwarding?
Для этого потребуется, чтобы входные данные были готовы раньше, чем обычно, однако, поэтому придется останавливаться, если ветвление происходит в результате slt
или другогоинструкция, которая все еще находится в стадии EX, пока эта в ID.Или это? Как MIPS I перенаправляет из EX в ID для филиалов без остановок?
Другие источники (например, эти слайды: http://home.deib.polimi.it/santambr/dida/phd/wonderland/2014/doc/PDF/4_BranchHazard_StaticPrediction_V0.pdf) говорит "Результат филиала и целевой адрес филиала"готовы в конце этапа EX (3-й этап) "к классической инструкции MIPS beq
. Это было бы частью" некоторых архитектур "того, что говорится в Википедии, но неясно, верно ли это для реального MIPS I (R2000).
Многие дискуссии о MIPS на самом деле касаются гипотетических 5-этапных конвейеров RISC, подобных MIPS, а не реального MIPS R2000 или классического Stanford MIPS CPU, на котором был основан R2000 (но это был aполная переработка ). Поэтому трудно понять, применимо ли что-либо, касающееся «MIPS», к R2000 (gcc -march=mips1
) или для упрощенной обучающей версии MIPS.
Разные архитектуры могут делать разные выборы , например, останавливать или использовать прогноз ветвления + умозрительное извлечение / декодирование, если это необходимо, пока они ожидают, что результат ветвления будет готов к тому, чтокогда-либо этап производит это.
И возможно даже спекулятивное выполнение (но все еще в порядке, так что неправильная спекуляция может быть обнаружена прежде, чем она достигнет обратной записи или MEM.Вам не нужны спекулятивные магазины, записанные в кеш.)