Спекулятивное исполнение - Speculative execution

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

Цель - предоставить больше параллелизм если дополнительно Ресурсы доступны. Этот подход используется в различных областях, в том числе предсказание ветвления в конвейерный процессоры, прогноз стоимости для использования местоположения стоимости,[1] предварительная выборка объем памяти и файлы, и оптимистичный контроль параллелизма в системы баз данных.[2][3][4]

Спекулятивная многопоточность это частный случай спекулятивного исполнения.

Обзор

Современное конвейерный микропроцессоры использовать спекулятивное исполнение, чтобы снизить стоимость условная ветвь инструкции, использующие схемы, которые прогнозируют путь выполнения программы на основе истории выполнения переходов.[3] Для повышения производительности и использования компьютерных ресурсов инструкции могут быть запланированы на время, когда еще не определено, что инструкции должны быть выполнены, до ответвляться.[5]

Варианты

Спекулятивные вычисления была связана более ранняя концепция.[6]

Нетерпеливое исполнение

Нетерпеливое исполнение - это форма спекулятивного исполнения, при которой выполняются обе стороны условной ветви; однако результаты фиксируются, только если предикат истинен. С неограниченными ресурсами, энергичным исполнением (также известное как казнь оракула) теоретически обеспечит такую ​​же производительность, как и perfect предсказание ветвления. При ограниченных ресурсах следует осторожно подходить к исполнению с нетерпением, поскольку количество необходимых ресурсов растет. экспоненциально с нетерпеливым исполнением каждого уровня ветки.[7]

Прогнозируемое исполнение

Прогнозируемое исполнение - это форма спекулятивного исполнения, при которой предсказывается некоторый результат, и исполнение продолжается по предсказанному пути, пока не станет известен фактический результат. Если предсказание истинно, предсказанное выполнение разрешается зафиксировать; однако, если есть неверное предсказание, выполнение должно быть развернуто и выполнено повторно. Общие формы этого включают: предикторы ветвления и прогноз зависимости от памяти. Обобщенную форму иногда называют прогнозом стоимости.[1][8]

Связанные понятия

Ленивая казнь

Ленивое исполнение противоположно нетерпеливому исполнению и не предполагает спекуляций. Включение спекулятивного исполнения в реализации Язык программирования Haskell ленивый язык - актуальная тема для исследований. Нетерпеливый Haskell, вариант языка, основан на идее спекулятивного исполнения. В 2003 г. была защищена кандидатская диссертация. GHC поддерживать своего рода спекулятивное исполнение с механизмом аборта, чтобы отступить в случае неправильного выбора, называемого оптимистичное исполнение.[9] Это сочли слишком сложным.[10]

Уязвимости безопасности

Начиная с 2017 года, в реализациях спекулятивного исполнения на общих архитектурах процессоров был обнаружен ряд уязвимостей безопасности, что позволило эффективно повысить уровень привилегии.

К ним относятся:

Смотрите также

Рекомендации

  1. ^ а б "Обзор методов прогнозирования стоимости для повышения эффективности локализации стоимости ", С. Миттал, Параллелизм и вычисления, 2017 г.
  2. ^ Ленивое и спекулятивное исполнение Батлер Лэмпсон Microsoft Research OPODIS, Бордо, Франция, 12 декабря 2006 г.
  3. ^ а б Международная корпорация бизнес-машин. Исследовательский отдел; Прабхакар Рагхаван; Хадас Шахнаи; Мира Янив (1998). Динамические схемы для спекулятивного исполнения кода. IBM. Получено 18 января 2011.
  4. ^ Кунг, Х. Т.; Джон Т. Робинсон (июнь 1981 г.). «Об оптимистических методах управления параллелизмом» (PDF). ACM Trans. База данных Syst. 6.
  5. ^ Бернд Криг-Брюкнер (1992). ESOP '92: 4-й Европейский симпозиум по программированию, Ренн, Франция, 26-28 февраля 1992 г .: доклады. Springer. С. 56–57. ISBN  978-3-540-55253-6. Получено 18 января 2011.
  6. ^ Рэнди Б. Осборн (21 марта 1990 г.). «Спекулятивные вычисления в Multilisp». Параллельный Лисп: языки и системы (PS ). Конспект лекций по информатике. 441. Исследовательская лаборатория Digital Equipment Corporation. С. 103–137. Дои:10.1007 / BFb0024152. ISBN  3-540-52782-6. Получено 2018-01-26.
  7. ^ Юрий Шилц; Борут Робич; Тео Унгерер (1999). Архитектура процессора: от потока данных до суперскалярной и не только. Springer. стр.148 –150. ISBN  978-3-540-64798-0. Получено 21 января 2011.
  8. ^ Марк Д., Хилл; Норман П., Джуппи; Гуриндар С., Сохи (2000). Чтения по компьютерной архитектуре. Морган Кауфман. ISBN  9781558605398. Получено 5 января 2018.
  9. ^ Джонс, Саймон Пейтон; Энналс, Роберт (1 августа 2003 г.). «Оптимистическая оценка: стратегия быстрой оценки для нестрогих программ». Получено 15 мая 2019 - через www.microsoft.com. Цитировать журнал требует | журнал = (помощь)
  10. ^ https://mail.haskell.org/pipermail/haskell/2006-August/018424.html