Зачем нужны целевые буферы ветвей для нерегистрационных инструкций перехода?



Для конвейера этапа MIPS 5 цель ветвления известна на этапе декодирования, потому что ее можно легко извлечь, если смещение ветвления находится в инструкции, а также Вы читаете регистры на этапе декодирования.



Таким образом, для неупорядоченного конвейера вы, очевидно, столкнетесь с проблемой с инструкциями типа 'jr', которые могут использовать регистр, который еще не был вычислен. Для таких применений существует четкое использование целевого буфера ветви.



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



Являются ли скачки регистров единственными инструкциями, использующими целевой буфер ветви, или я что-то упустил?

644   1  

1 ответ:

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

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

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

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


Читайте также медленно СПМ-инструкция для х86 эталоном гигантский последовательность перехода к следующему-инструкция. (то есть относительное смещение = 0). Он замедляется, когда последовательность достаточно длинна, чтобы не вписываться в BTB.

Comments

    Ничего не найдено.