0

Изучая конвейерные процессоры, и они упоминают о предсказании ветви, принимаемой или не принятой, вставляя основные инструкции в виде «промежуточных», прежде чем мы решим, занята ли ветка или нет, но затем «раздавить» их, если мы догадываемся неправильно.Что это значит для «сквоша» инструкции?

Как мы их сквошем? Мы просто не пишем? Сколько инструкций мы можем вставить в промежутке между вычислением его ветви и вычислением, если принято или не принято. Я думаю, что один, правильно - потому что мы выясняем, что это ветка в идентификаторе, а затем выяснить, взяли или нет в EX? Так что всего лишь один из них?

ИФ> ID-> EX-> мем-> WB

ответ

2

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

Поскольку исполнение выполнено в порядке, а окончательное разрешение ветви известно на EX, у вас должно быть достаточно времени, чтобы сообщить следующую инструкцию в конвейере об отмене себя (эффективно заменяя их пузырьками, где машина ничего не делает для них на любом из следующих этапов труб). Этапы, на которых вы оказываете влияние на машины, находятся дальше по трубе, поэтому ни одна из плохих инструкций не дойдет до них слишком рано. Это будет намного сложнее на машине без порядка, но это совсем другая история. Единственная потерянная работа находится на предыдущих этапах, из которых у вас есть 2 (IF + ID) и, возможно, (в зависимости от вашего дизайна) следующая инструкция, которая должна быть отправлена ​​в IF в следующем цикле (в случае, у вас есть время, чтобы исправить ваш счетчик программ, следующий за веткой. На более сложных машинах у вас может быть более глубокий трубопровод с большим количеством этапов, поэтому штраф увеличивается.

Как правило, вызывается очищение плохих инструкций, следующих за неверно предсказанной веткой промывка, очистка или раздавливание (обратите внимание, что эти термины также могут иметь разные значения в компьютерной архитектуре, поэтому это не технический термин, так как это графическое описание)

1

Я добавлю к Leeor ответ, сказав, что ответ ветвления является более влиятельным в случае сильно конвейерных суперскалярных процессоров. Хотя динамизм (исходящий из OoO) и спекуляция (исходя из прогноза ветвления) - это две отдельные концепции, их interplay является сложным. Более того, поскольку они обычно появляются вместе на современных архитектурах, они когда-то запутываются.

В простейшем пятиступенчатом трубопроводе, который вы считаете, требуется один такт между ID и EX, чтобы определить, была ли выбрана ветка или нет. На более сложных архитектурах штраф за ошибочное предсказание составляет порядка десятков тактовых циклов, что потенциально соответствует еще более загруженным инструкциям, если архитектура суперскалярна.

При рассмотрении такого большого набора извлеченных команд даже раздавливание становится сложным, например. что произойдет, если есть хранилище значения, которое мы не уверены в правильности? Что, если мы встретим другую ветку и т. Д.

Кроме того, неправильное предсказание соответствует большому удару с точки зрения производительности, поэтому для улучшения этого штрафа используются более совершенные методы, такие как Selective Replay и Value Prediction.