Разница между спекуляцией и предсказанием
В компьютерной архитектуре
В чем разница между (отраслевым) предсказанием и спекуляцией??
Они кажутся очень похожими, но я думаю, что между ними есть тонкое различие.
3 ответа
Предсказание ветвлений выполняется процессором, чтобы попытаться определить, где выполнение будет продолжено после условного перехода, чтобы он мог прочитать следующую инструкцию (и) из памяти.
Спекулятивное выполнение продвигается на один шаг дальше и определяет, каким будет результат выполнения следующей инструкции. Если прогноз ветвления был верным, используется результат, в противном случае он отбрасывается.
Обратите внимание, что умозрительное выполнение может быть применено, даже если в коде нет фактической условной ветви. Процессор может определить результат по нескольким инструкциям, которые обычно выполняются последовательно, но выполнение может быть остановлено, например, из-за прерывания арифметического переполнения.
Если вы хотите что-то спекулятивно делать, вы увеличиваете свои шансы на то, что это будет полезно, точно предсказывая, по какому пути спекулировать.
В некоторых случаях прогноз является тривиальным (например, прогнозировать, что загрузка / хранение не будет зависать). В других случаях это сложно (предсказание ветвления).
В любом случае вам необходимо иметь возможность отменить / выбросить спекулятивные вычисления, если произойдет исключение.
Можно спекулировать без предсказания, умозрительно выполняя инструкции с обоих направлений ветви, и сохраняя только результат от линии, которая позже окажется верным путем.
Современное оборудование не использует это для ветвей, но то же самое происходит в гораздо меньшем локальном масштабе для таких вещей, как параллельное декодирование инструкций x86. Декодеры начинают декодирование на каждой возможной границе инструкции и выясняют, какая начальная позиция была правильной, как только декодер предыдущей инструкции определяет длину.
Ну, я новичок в программировании и информатике, но это мой вывод. Целью обоих этих "методов" является заполнение трубопровода, предотвращая растрату ресурсов. Когда процессор принимает команду условного тестирования, обычно можно ожидать, что он будет ждать, пока условие не будет проверено, прежде чем перейти к следующей инструкции.
В спекулятивном исполнении вы все равно выполняете инструкцию, "надеясь", что условный тест был ИСТИННЫМ, а не останавливал конвейер и наносил ущерб ресурсам. В противном случае вы просто отбрасываете результаты.
При прогнозировании переходов вы идете на один шаг дальше и прогнозируете, будет ли условие ИСТИНА или нет, основываясь на прошлых результатах условного теста (вы прогнозируете направление, в котором ваша программа будет переходить).
Надеюсь, что все проясняется. Получил информацию отсюда и курс, который я беру в этом семестре. http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html