La ejecución especulativa es una técnica de optimización en la que un sistema informático realiza alguna tarea que puede no ser necesaria. El trabajo se completa antes de que se sepa que realmente se necesita, para evitar demoras que puedan ocurrir al completar el trabajo después de que se sabe que se necesita. Si resulta que el trabajo no es necesario después de todo, la mayoría de los cambios realizados en el trabajo se descartan y los resultados se ignoran.
El objetivo es proporcionar más simultaneidad si hay más recursos disponibles . Este enfoque se utiliza en una variedad de áreas, incluida la predicción de bifurcación en procesadores canalizados , predicción de valor para explotar la localidad de valor, recuperación previa de memoria y archivo , y control de concurrencia optimista en sistemas de base de datos [1] [2] [3] .
El subproceso múltiple especulativo es un caso especial de ejecución especulativa.
Los microprocesadores canalizados modernos utilizan la ejecución especulativa para reducir el costo de las instrucciones de bifurcación condicional mediante circuitos que predicen la ruta de ejecución del programa en función del historial de ejecución de la bifurcación [2] . Para mejorar el rendimiento y la utilización de los recursos informáticos, las instrucciones se pueden programar en un momento en el que aún no se ha determinado que las instrucciones deben ejecutarse antes de la bifurcación [4] [5] .
La computación especulativa se ha relacionado con un concepto anterior [6] .
La ejecución ansiosa es una forma de ejecución especulativa en la que se ejecutan ambos lados de la rama condicional; sin embargo, los resultados solo se capturan si el predicado es verdadero. Con recursos ilimitados, la ejecución activa (también conocida como ejecución de Oracle ) teóricamente proporcionaría el mismo rendimiento que la predicción de bifurcación perfecta . Con recursos limitados, la ejecución activa debe usarse con precaución, ya que la cantidad de recursos necesarios crece exponencialmente con cada nivel de la rama ejecutada con entusiasmo [7] .
La ejecución predictiva es una forma de ejecución especulativa en la que se predice algún resultado y la ejecución continúa a lo largo de la ruta prevista hasta que se conoce el resultado real. Si la predicción es correcta, se permite que se comprometa la ejecución prevista; sin embargo, si hay una predicción errónea, la ejecución debe revertirse y volverse a intentar. Las formas comunes de esto incluyen predictor de rama y predicción de dependencia de memoria . La forma generalizada a veces se denomina previsión de costes [8] .
La ejecución perezosa es lo opuesto a la ejecución ansiosa y no implica especulación. La inclusión de la ejecución especulativa en implementaciones del lenguaje de programación Haskell , un lenguaje perezoso, es un tema de investigación actual. Eager Haskell , una variante del lenguaje, se basa en la idea de ejecución especulativa. En una tesis doctoral de 2003, GHC apoyó un tipo de ejecución especulativa con un mecanismo de conmutación por error en caso de una mala elección, llamada ejecución optimista [9] . Se consideró demasiado complicado [10] .
A partir de 2017, se encontraron varias vulnerabilidades de seguridad en implementaciones de ejecución especulativa en arquitecturas de procesadores comunes, lo que permite la escalada de privilegios .
Éstos incluyen:
Tecnologías de procesadores digitales | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arquitectura | |||||||||
Set de instrucciones arquitectura | |||||||||
palabra maquina | |||||||||
Paralelismo |
| ||||||||
Implementaciones | |||||||||
Componentes | |||||||||
Administración de energía |