Позднее обновление lhr / ghr в длинном конвейере

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

Это жизнеспособный сценарий, как это обходится?

2 ответа

Сценарий, который вы упомянули в вопросе, кажется правдоподобным, хотя я сомневаюсь, что это вызовет какие-либо функциональные проблемы / проблемы производительности, связанные с Branch Predictor. Рассмотрим сценарий, в котором есть две параллельные ветви, тогда результат прогнозирования более старой ветви не будет виден более молодой ветви. Но когда у нас есть параллельные ветви, возможны следующие результаты:

  • Более старая ветвь взята и правильно предсказана - поскольку ветвление было предсказано правильно, алгоритм предиктора будет использовать результат предсказания и использовать информацию для предсказания младшей ветви. Обновление не повлияет на результат предсказания, так как более старая ветвь уже была предсказана правильно.
  • Старая ветвь взята и не предсказана правильно - в этом случае младшая ветвь сама по себе не рассматривается, так как процессор все равно уничтожит все инструкции / обновления, сделанные в тени старой ветки. Следовательно, прогноз будет бесполезен.

То же самое относится и к сценарию, где ветвление не берется и прогнозируется правильно / неправильно. Надеюсь, что это отвечает на ваш запрос.

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

Другие вопросы по тегам