Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Обзор [ править ]

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

Варианты [ править ]

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

Нетерпеливое исполнение [ править ]

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

Прогнозируемое исполнение [ править ]

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

Понятия, связанные с данным [ править ]

Ленивое выполнение [ править ]

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

Уязвимости безопасности [ править ]

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

Это включает:

  • Призрак
  • Meltdown
  • СПОЙЛЕР
  • Предзнаменование
  • Выборка микроархитектурных данных

См. Также [ править ]

  • Предиктор ветвления
  • Внеочередное исполнение
  • Slipstream (информатика)
  • Спекулятивная многопоточность
  • Ошибка безопасности оборудования
  • Уязвимости процессора временного исполнения

Ссылки [ править ]

  1. ^ a b « Обзор методов прогнозирования ценности для использования локальности ценности », С. Миттал, Параллелизм и вычисления, 2017 г.
  2. ^ Ленивое и спекулятивное исполнение Батлер Лэмпсон Microsoft Research OPODIS, Бордо, Франция, 12 декабря 2006 г.
  3. ^ a b Международная корпорация бизнес-машин. Исследовательский отдел; Прабхакар Рагхаван; Хадас Шахнаи; Мира Янив (1998). Динамические схемы для умозрительного исполнения кода . IBM . Проверено 18 января 2011 года .
  4. ^ Кунг, HT ; Джон Т. Робинсон (июнь 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. ^ Рэнди Б. Осборн (1990-03-21). «Спекулятивные вычисления в Multilisp» . Параллельный Лисп: языки и системы ( PS ). Конспект лекций по информатике. 441 . Исследовательская лаборатория Digital Equipment Corporation . С. 103–137. DOI : 10.1007 / BFb0024152 . ISBN 3-540-52782-6. Проверено 26 января 2018 .
  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. Цитировать журнал требует |journal=( помощь )
  10. ^ https://mail.haskell.org/pipermail/haskell/2006-August/018424.html