Ejecución especulativa
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 hace antes de que se sepa si realmente se necesita, para evitar un retraso en el que se tendría que incurrir al hacer el trabajo después de que se sabe que se necesita. Si resulta que el trabajo no era necesario después de todo, la mayoría de los cambios realizados por el trabajo se revierten y los resultados se ignoran.
El objetivo es proporcionar más simultaneidad si hay recursos adicionales disponibles. Este enfoque se emplea en una variedad de áreas, incluida la predicción de bifurcación en procesadores canalizados, la predicción de valor para explotar la localidad de valor, la recuperación previa de memoria y archivos, y el control de concurrencia optimista en sistemas de bases de datos.
El subproceso múltiple especulativo es un caso especial de ejecución especulativa.
Resumen
Los microprocesadores canalizados modernos utilizan la ejecución especulativa para reducir el costo de las instrucciones de bifurcación condicional mediante esquemas que predicen la ruta de ejecución de un programa en función del historial de ejecuciones de bifurcación. 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 será necesario ejecutar las instrucciones, antes de una bifurcación.
Variantes
El cómputo especulativo era un concepto anterior relacionado.
Ejecución ansiosa
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 se confirman solo si el predicado es verdadero. Con recursos ilimitados, la ejecución entusiasta (también conocida como ejecución de Oracle) en teoría proporcionaría el mismo rendimiento que la predicción de bifurcación perfecta. Con recursos limitados, la ejecución entusiasta debe emplearse con cuidado, ya que la cantidad de recursos necesarios crece exponencialmente con cada nivel de rama que se ejecuta con entusiasmo.
Ejecución predictiva
La ejecución predictiva es una forma de ejecución especulativa en la que se predice algún resultado y la ejecución sigue la ruta prevista hasta que se conoce el resultado real. Si la predicción es verdadera, se permite confirmar la ejecución prevista; sin embargo, si hay una predicción errónea, la ejecución debe desenrollarse y volver a ejecutarse. Las formas comunes de esto incluyen predictores de rama y predicción de dependencia de memoria. Una forma generalizada a veces se denomina predicción de valor.
A la cabeza
Conceptos relacionados
Ejecución perezosa
La ejecución perezosa es lo opuesto a la ejecución ansiosa y no implica especulación. La incorporación de la ejecución especulativa en las implementaciones del lenguaje de programación Haskell, un lenguaje perezoso, es un tema de investigación actual. Eager Haskell, una variante del lenguaje, está diseñado en torno a la idea de ejecución especulativa. Una tesis doctoral de 2003 hizo que GHC apoyara una especie de ejecución especulativa con un mecanismo de aborto para retroceder en caso de una mala elección llamada ejecución optimista. Se consideró demasiado complicado.
Vulnerabilidades de seguridad
A partir de 2017, se encontraron una serie de vulnerabilidades de seguridad en las implementaciones de ejecución especulativa en arquitecturas de procesadores comunes que permitieron efectivamente una elevación de privilegios.
Estos incluyen:
- Foreshadow
- Meltdown
- Microarquitectural Muestra de datos
- Spectre
- SPOILER
- Pacman
Contenido relacionado
Estudio FL
Alan Miller (diseñador de juegos)
Sistema de instalación programable de Nullsoft