2016-04-07 3 views
1

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

  1. На какой стадии трубопровода должна расшириться предсказание случиться?
  2. Как узнать, что предсказание пошло не так? Как датапат узнает, что произошло неправильное предсказание?
  3. Если выяснилось, что произошло неверное предсказание, как он посылает сигнал, чтобы заняться не принятой ветвью?
  4. После того, как это пошло не так, я должен принять тот адрес, который не был сделан ранее. Между тем, что, если произошла запись в память или запись-запись? Как предотвратить это?

Это будет очень полезно, даже если некоторые соответствующие ссылки с канала данных в них предлагаются. Заранее спасибо.

+0

Вот ссылка на ссылки руководство для ARMv8-A: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0406c/index.html Доступно только для зарегистрированных пользователей. Я знаю кое-что о предсказании филиала PPC, если вы заинтересованы. Просто скажи это слово. – Andreas

+0

Хорошо: :-) :-) :-). –

+0

У меня есть доступ к справочным руководствам. Есть ли какая-то конкретная модель оружия, которую вы интересуете? – Andreas

ответ

0

Я взял время на чтение справочное руководство для Cortex-A8: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344k/DDI0344K_cortex_a8_r3p2_trm.pdf

Из раздела 5.1:

Процессор содержит аппаратные средства прогнозирования потока программы, также известный как предсказания ветвлений. При отключении прогноза потока программы все принятые ветви несут штраф в 13 циклов. При прогнозировании потока программы , все неверно предсказанные ветви несут штраф в 13 циклов.

В основном это означает, что предсказание статического ветвления всегда считает ветви ложными. Это отличается от PowerPC, у которого есть «специальные инструкции» для подсказки процессора о принятых/не принятых филиалах (postfix +/-).

Из раздела 1.3.1:

выборки команды блока предсказывает поток команд, извлекает инструкции из кэша L1, и помещает неправдоподобные инструкций в буфер для потребления по трубопроводу декодирования.

  1. выборки команды, первый этап, делает предсказание.

из раздела 7.6.2:

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

Я интерпретирую это, поскольку ничто не достигает стадии выполнения во время обработки ветви. Если происходит неправильное исчисление, как обнаружено при выполнении ветви в инструкции Execute, все инструкции в конвейере «промываются». Они никогда не исполняются. Это должно ответить на вопросы 2 и 4. Не так уверен в том, как выполняется «маркировка».

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

(Для записи я найти справочные руководства PowerPC (e500/e600) I'm привык к тому, гораздо легче понять, из-за многочисленных образцов команд синхронизации.)

1

Я думаю, что есть много различных механизмов, которые возможны, но некоторые быстрые ответы:

  1. прогнозирование Branch, безусловно, должно произойти до того, как инструкции декодируются, во время выборки этапов. В противном случае вы собираетесь декодировать неверные инструкции.
  2. Обычно вы укажете дополнительную информацию с инструкцией о ветке, которая была предсказана, как и цель, которая была предсказана. Филиал будет выполнен, и если реальная цель не соответствует прогнозируемой цели, вам нужно будет промыть трубу.
  3. Это действительно зависит от реализации. Если ветка выполнена, вы можете использовать реальную цель, такую ​​как ветвь, которая не была предсказана.
  4. Вам определенно нужен механизм для восстановления или дождаться разрешения ветвей, пока вы не напишете результаты. Это потеряет некоторое время, но не так сильно, как ветвь, которая не была предсказана.
+0

Спасибо! Это действительно помогло. –

Смежные вопросы