Спекулятивное исполнение
Спекулятивное исполнение — это метод оптимизации , при котором компьютерная система выполняет некоторую задачу, которая может не понадобиться. Работа выполняется до того, как станет известно, действительно ли она необходима, чтобы предотвратить задержку, которая могла бы возникнуть при выполнении работы после того, как станет известно, что она необходима. Если окажется, что работа все-таки не потребовалась, большинство изменений, внесенных в ходе работы, отменяются, а результаты игнорируются.
Цель состоит в том, чтобы обеспечить больший параллелизм при дополнительных ресурсов наличии . Этот подход применяется в различных областях, включая предсказание ветвей в конвейерных процессорах , предсказание значений для использования локальности значений, предварительную выборку памяти и файлов , а также оптимистическое управление параллелизмом в системах баз данных . [1] [2] [3]
Спекулятивная многопоточность — это частный случай спекулятивного выполнения.
Обзор [ править ]
Современные конвейерные микропроцессоры используют спекулятивное выполнение, чтобы снизить стоимость инструкций условного перехода , используя схемы, которые прогнозируют путь выполнения программы на основе истории выполнения ветвей. [2] Чтобы улучшить производительность и использование ресурсов компьютера, инструкции можно планировать в то время, когда еще не определено, что инструкции необходимо выполнить, перед переходом . [4]
Варианты [ править ]
Спекулятивные вычисления были родственной более ранней концепцией. [5]
Стремительное исполнение [ править ]
Нетерпеливое исполнение — это форма спекулятивного исполнения, при которой выполняются обе стороны условного перехода; однако результаты фиксируются только в том случае, если предикат истинен. При неограниченных ресурсах активное выполнение (также известное как выполнение оракула ) теоретически обеспечит ту же производительность, что и идеальное предсказание ветвей . При ограниченных ресурсах к энергичному выполнению следует подходить осторожно, поскольку количество необходимых ресурсов растет экспоненциально с каждым уровнем энергичного выполнения ветвления. [6]
Прогнозируемое исполнение [ править ]
Прогнозирующее исполнение — это форма спекулятивного исполнения, при которой некоторый результат прогнозируется, и выполнение продолжается по предсказанному пути до тех пор, пока не станет известен фактический результат. Если прогноз верен, предсказанное выполнение может быть зафиксировано; однако в случае неверного прогноза выполнение необходимо развернуть и выполнить повторно. Общие формы этого включают предсказатели ветвей и предсказание зависимости от памяти . Обобщенную форму иногда называют прогнозированием значения. [7]
Ранахед [ править ]
Связанные понятия [ править ]
Ленивое исполнение [ править ]
Ленивое исполнение противоположно нетерпеливому исполнению и не предполагает спекуляций. Включение спекулятивного выполнения в реализации языка программирования Haskell , ленивого языка, является текущей темой исследований. Eager Haskell , вариант языка, основан на идее спекулятивного выполнения. Докторская диссертация 2003 года заставила GHC поддержать своего рода спекулятивное исполнение с механизмом прерывания, позволяющим отказаться в случае неправильного выбора, называемого оптимистическим исполнением . [9] Это посчитали слишком сложным. [10]
Уязвимости безопасности [ править ]
ряд уязвимостей безопасности Начиная с 2017 года, в реализациях спекулятивного выполнения на общих процессорных архитектурах был обнаружен , которые эффективно позволяли повышать привилегии .
К ним относятся:
См. также [ править ]
- Антиципараллелизм
- Исполнение вне очереди
- Слипстрим (информатика)
- Спекулятивная многопоточность
- Ошибка аппаратной безопасности
- Уязвимость процессора при временном выполнении
Ссылки [ править ]
- ^ Лэмпсон, Батлер (2006). «Ленивое и спекулятивное исполнение в компьютерных системах» . В Момензаде, Мариам; Шварцман, Александр А. (ред.). Принципы распределенных систем . 10-я Международная конференция по принципам распределенных систем. Конспекты лекций по информатике. Том. 4305. Бордо, Франция: Шпрингер. стр. 1–2. дои : 10.1007/11945529_1 . ISBN 978-3-540-49991-6 .
- ↑ Перейти обратно: Перейти обратно: а б Рагхаван, Прабхакар; Шахнай, Хадас; Янив, Мира (1998). «Динамические схемы спекулятивного выполнения кода» . Материалы шестого международного симпозиума по моделированию, анализу и моделированию компьютерных и телекоммуникационных систем . IEEE. стр. 309–314. дои : 10.1109/MASCOT.1998.693711 . Проверено 18 января 2011 г.
- ^ Кунг, HT ; Джон Т. Робинсон (июнь 1981 г.). «Об оптимистических методах управления параллелизмом» (PDF) . АКМ Транс. Система баз данных . Том. 6. Архивировано (PDF) из оригинала 31 августа 2019 г.
- ^ Бернд Криг-Брюкнер (1992). ESOP '92: 4-й Европейский симпозиум по программированию, Ренн, Франция, 26-28 февраля 1992 г.: материалы . Спрингер. стр. 56–57. ISBN 978-3-540-55253-6 . Проверено 18 января 2011 г.
- ^ Рэнди Б. Осборн (21 марта 1990 г.). «Спекулятивные вычисления в Multilisp» . Параллельный Лисп: языки и системы ( PS ). Конспекты лекций по информатике. Том. 441. Исследовательская лаборатория Digital Equipment Corporation . стр. 103–137. дои : 10.1007/BFb0024152 . ISBN 3-540-52782-6 . Архивировано из оригинала 07 февраля 2017 г. Проверено 26 января 2018 г.
- ^ Юрий Шильц; Борут Робич; Тео Унгерер (1999). Архитектура процессора: от потока данных к суперскаляру и далее . Спрингер. стр. 148-150 . ISBN 978-3-540-64798-0 . Проверено 21 января 2011 г.
- ^ Марк Д., Хилл; Норман П., Жуппи ; Гуриндар С., Сохи (2000). Чтения по компьютерной архитектуре . Морган Кауфман. ISBN 9781558605398 . Проверено 5 января 2018 г.
- ^ Пруэтт, Стивен; Патт, Йельский университет (октябрь 2021 г.). «Branch Runahead: альтернатива прогнозированию ветвей для невозможного предсказать ветвления» . MICRO-54: 54-й ежегодный международный симпозиум IEEE/ACM по микроархитектуре . МИКРО '21. Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники. стр. 804–815. дои : 10.1145/3466752.3480053 . ISBN 978-1-4503-8557-2 . S2CID 239011545 .
- ^ Джонс, Саймон Пейтон; Энналс, Роберт (1 августа 2003 г.). «Оптимистическая оценка: стратегия быстрой оценки для нестрогих программ» . Проверено 15 мая 2019 г. - через www.microsoft.com.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ «[Haskell] Оптимистическая оценка?» . 31 августа 2006 г.