stringtranslate.com

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

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

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

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

Обзор

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

Варианты

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

Стремительное исполнение

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

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

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

Ранахед

Runahead — это метод, который позволяет компьютерному процессору спекулятивно предварительно обрабатывать инструкции во время циклов промахов кэша . Предварительно обработанные инструкции используются для создания предварительной выборки потоков инструкций и данных путем выполнения инструкций, приводящих к промахам в кэше (обычно называемым загрузками с большой задержкой ) до того, как они обычно происходят, эффективно скрывая задержку памяти . В режиме опережения процессор использует ресурсы простоя выполнения для расчета адресов потоков инструкций и данных, используя доступную информацию, независимую от промаха в кэше. Как только процессор устранит первоначальный промах в кэше, все результаты опережения отбрасываются, и процессор возобновляет выполнение в обычном режиме. Основной вариант использования этой техники — смягчение последствий стены памяти . Этот метод также можно использовать для других целей, таких как предварительное вычисление результатов ветвления для достижения высокоточного предсказания ветвления . [8]

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

Ленивое исполнение

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

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

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

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

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

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

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