Как предсказатель перехода узнает, является ли оно неверным?

#caching #branch #cpu

#кэширование #ветвление #процессор

Вопрос:

Итак, я выполнил поиск по этому вопросу, но ответ, который я нашел, я не совсем понял.

Что я понимаю для центрального процессора, так это то, что модуль выборки команд получает инструкции исключительно от предсказателя перехода; затем он будет проходить через кэш L1i / L2 / L3 / RAM, чтобы найти предсказанную команду для выполнения, а затем она уходит.

Однако проблема, с которой я сталкиваюсь, заключается в том, как предсказатель ветвления узнает, было ли то, что он сделал, правильным или нет?

Ответ №1:

Сама инструкция перехода все еще выполняется, т.е. условие вычислено и цель определена. Для условной ветви, если и условие, и цель были правильно предсказаны, предсказатель обычно был бы проинформирован, чтобы состояние могло быть обновлено до сильно принятого / не принятого (если предыдущее состояние было слабо принято / не принято).1

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


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

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

1. Понятно, но как предсказатель делает это: «Если условие или цель были неправильно предсказаны, предсказатель получает правильную информацию», ? Откуда он получает информацию о том, что оно правильное или нет?

2. @user3423509 Выполнение инструкции перехода проверяет условие, определяя, должно было ли оно быть принято или не принято; предсказание принято / не принято переносится вместе с инструкцией перехода, чтобы можно было определить, было ли предсказание правильным. Определение цели обрабатывается аналогичным образом, хотя для ветвей, относящихся к адресам команд, это может быть вычислено заранее, поскольку постоянное смещение доступно после декодирования команды (ранее с классическим RISC).

3. Извините, что так долго отвечаю. Однако я все еще не совсем понимаю. Что именно происходит в этой инструкции «ветвления». Это последовательность предсказания? Как устройство узнает, было ли предсказание правильным или нет, перед прогнозированием? Я в замешательстве…