Введение
Техника оптимизации компьютера. Спекулятивное выполнение — это техника оптимизации, при которой компьютерная система выполняет задачу, которая может оказаться ненужной. Работа выполняется до того, как станет известно, действительно ли она необходима, чтобы предотвратить задержку, которая возникла бы при выполнении этой задачи уже после установления её необходимости. Если в итоге окажется, что работа не потребовалась, большинство изменений, внесённых в процессе её выполнения, отменяются, а результаты игнорируются. Цель состоит в повышении параллельности при наличии свободных ресурсов. Этот подход применяется в различных областях, включая предсказание переходов в конвейерных процессорах, предсказание значений для использования локальности данных, предварительную выборку памяти и файлов, а также оптимистичный контроль параллелизма в системах управления базами данных. Спекулятивная многопоточность является частным случаем спекулятивного выполнения.
Speculative execution is an optimization technique where a computer system performs some task that may not be needed. Work is done before it is known whether it is actually needed, so as to prevent a delay that would have to be incurred by doing the work after it is known that it is needed. If it turns out the work was not needed after all, most changes made by the work are reverted and the results are ignored. The objective is to provide more concurrency if extra resources are available. This approach is employed in a variety of areas, including branch prediction in pipelined processors, value prediction for exploiting value locality, prefetching memory and files, and optimistic concurrency control in database systems. Speculative multithreading is a special case of speculative execution.
Обзор
Современные конвейерные микропроцессоры используют спекулятивное выполнение для уменьшения задержек, связанных с условными переходами, применяя схемы, предсказывающие траекторию выполнения программы на основе истории предыдущих переходов.
Варианты
Спекулятивные вычисления — более ранняя смежная концепция.
Стремительная исполнение
Eager execution – это форма спекулятивного исполнения, при которой выполняются обе ветви условного перехода, однако результаты фиксируются только если условие истинно. При неограниченных ресурсах eager execution (также известное как oracle execution) теоретически обеспечило бы такую же производительность, как и идеальное предсказание переходов. При ограниченных ресурсах eager execution следует использовать с осторожностью, поскольку количество необходимых ресурсов растёт экспоненциально с каждым уровнем спекулятивно выполненного перехода.
Прогнозируемое исполнение
Предсказуемое исполнение — это форма спекулятивного исполнения, при которой прогнозируется некоторый исход, и выполнение продолжается по предсказанному пути до тех пор, пока не станет известен фактический результат. Если прогноз верен, предсказанное выполнение разрешается к завершению; однако, в случае неверного прогноза выполнение необходимо откатить и повторить. Распространенные формы включают предсказание переходов и предсказание зависимостей по памяти. Обобщенная форма иногда называется предсказанием значений.
Ленивая исполнение
Ленивое вычисление является противоположностью немедленного вычисления и не включает спекуляции. Включение спекулятивного выполнения в реализации языка программирования Haskell, ленивого по своей природе, является текущей темой исследований. Eager Haskell, один из вариантов языка, разработан с учетом идеи спекулятивного выполнения. Докторская диссертация 2003 года привела к тому, что GHC поддержал своего рода спекулятивное вычисление с механизмом отката для возврата в случае неудачного выбора, называемым оптимистическим вычислением. Однако это оказалось слишком сложным.