Понимание прогноза ветвления

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

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

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

 Andreas07 апр. 2016 г., 21:01
Вот ссылка на справочное руководство для ARMv8-A:infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0406c/... Это доступно только для зарегистрированных пользователей. Я знаю кое-что о предсказании ветви PPC, если вам интересно. Просто скажи слово.
 Ankit Shubham08 апр. 2016 г., 10:13
Хорошо!:-):-):-).
 Ankit Shubham10 апр. 2016 г., 11:56
Если у вас есть Cortex-A8 ...
 Andreas10 апр. 2016 г., 11:54
Я знаю, есть доступ к справочникам. Есть ли какая-то конкретная модель руки, которая вас интересует?

Ответы на вопрос(2)

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

Предсказание ветвления обязательно должно произойти до того, как инструкции будут декодированы, на этапах выборки. В противном случае вы собираетесь декодировать неправильные инструкции.Обычно вы будете предоставлять дополнительную информацию с предсказанной инструкцией ветвления, например, с прогнозируемой целью. Ветвь будет выполнена, и если реальная цель не соответствует прогнозируемой цели, вам необходимо очистить канал.Это действительно зависит от реализации. Если ветвь выполнена, вы можете использовать реальную цель, как ветвь, которая не была предсказана.Вам, безусловно, нужен механизм для восстановления или дождитесь разрешения ветвей, пока вы не напишите результаты. Это потеряет некоторое время, но не так, как ветвь, которая не была предсказана.
 Ankit Shubham08 апр. 2016 г., 10:29
Спасибо! Это действительно помогло.
Решение Вопроса

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

Из раздела 5.1:

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

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

Из раздела 1.3.1:

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

Инструкция Fetch, первый этап, делает прогноз.

Из раздела 7.6.2:

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

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

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

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

Ваш ответ на вопрос