Какой вид предсказания ветвления важнее?


11

Я заметил, что существует два различных типа состояний в предсказании ветвлений.

  1. В суперскалярном выполнении, где прогноз ветвления очень важен, и он в основном в задержке выполнения, а не в задержке выборки.

  2. В конвейере команд, где выборка является более проблемной, поскольку инструкции на самом деле не выполняются до позднего времени.

Какой из них является очень важным (как и в какой из них действительно имеет значение в CPU теперь-дней)? Если оба одинаково важны или если второй более важен, то Почему у нас нет двух конвейеров инструкций (вероятно, на половину длины), а затем в зависимости от ветвей, просто выберите один из них и затем снова начните заполнение с начало?


1
Может быть, оба важны, в зависимости от обстоятельств?
Рафаэль

Ответы:


6

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

Прежде всего, вам понадобится двойной провод, который будет потреблять в два раза больше энергии и производить в два раза больше тепла при активной работе. Хотя это и не нужно, с другой стороны, это было бы совершенно бесполезно. Таким образом, можно утверждать, что это не очень хорошее использование ресурсов, которые редки на современных процессорах.

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

Давайте сделаем приблизительный расчет. Для простоты предположим, что обработка двух конвейеров вместо одного не приводит к дополнительным затратам на управление. Ожидаемая стоимость (например, энергия, тепло) составляет с одним конвейером ( стоимость выполнения любой альтернативы, вероятность отката и стоимость отката без затрат на выполнение другого альтернатива) но либо либо даже - либо намного больше, чем если и относительно малы, ас р с т 2 с 2 с + р с т С р с т р т + р ( т г + т ) т т + р т т рC=c+p(cr+c)cpcr2c2c+pcrCpcrpконечно (насколько я знаю, современные отраслевые прогнозы имеют точность более 90%). И мы не получаем много за эту стоимость! Ожидаемое время выполнения: с одним конвейером и соответственно. с двумя; так как мало, экономия времени незначительна.t+p(tr+t)tt+ptrp


Насколько я знаю, Intel попыталась «прочитать инструкции для обеих сторон ветви» и даже «выполнить инструкции для обеих сторон ветви» и перестала это делать. Либо потому, что он ничего не получил, либо потому, что стоимость и сложность были настолько высоки, что они могли получить больше выгод разными способами за ту же цену.
gnasher729

@ gnasher729 И это было, вероятно, до того, как мы узнали о недостатках безопасности, связанных с такими функциями, как эта?
Рафаэль

2

В одном смысле эффект предсказания перехода более важен при получении команд, так как команда, которая не выбрана, не может быть выполнена.

Что касается выполнения обоих путей ветви, это называется нетерпеливым выполнением и было исследовано несколько существенно. Стоит взглянуть на книгу Августа К. Ухта и Виджая Синдаги «Несвязанное нетерпеливое казнь: оптимальная форма умозрительного исполнения» (1995).

Стремительное исполнение имеет несколько проблем. Для глубокого предположения, количество путей, которые должны быть отслежены, может расти экспоненциально (каждый разветвленный путь ветки может встретить ветку). Прогноз ветвления также часто очень точен (> 90% правильно), поэтому всегда выполнение обоих путей будет расточительным. Стремительное выполнение может также «загрязнить» кеши бесполезным контентом. (Вышеупомянутый документ предлагал разумно ограниченное стремление к исполнению, чтобы избежать некоторых из этих проблем.) Ограниченное стремление извлекать альтернативный путь имеет меньше проблем и может быть несколько привлекательным для уменьшения задержки восстановления неверного прогноза в более коротких конвейерах.

Другой подход, который был предложен, - это динамическое предсказание ветвей «гамака» (короткие прямые ветви, которые присоединяются к основному пути потока команд). Артур Клаузер и др. «Динамическое прогнозирование гамака для непредсказуемых архитектур наборов инструкций» (1998), возможно, стоит прочитать для этой идеи. («Желательные ветви: объединение условного ветвления и предиката для адаптивного прогнозируемого выполнения» (Hyesoon Kim et al.) Предлагает добавить ветки ISA, которые упрощают предикацию гамаков, и расширяет этот метод предрасположения для трудно предсказуемых ветвей цикла.)


Это действительно хороший ответ! Спасибо. :-)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.