De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

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 realiza antes de que se sepa si es realmente necesario, a fin de evitar un retraso en el que tendría que incurrir al realizar el trabajo después de que se sabe que es necesario. 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 rama en procesadores canalizados , la predicción de valor para explotar la localidad de valor, [1] precarga de memoria y archivos y control de concurrencia optimista en sistemas de bases de datos . [2] [3] [4]

El multiproceso especulativo es un caso especial de ejecución especulativa.

Resumen [ editar ]

Los microprocesadores de canalización modernos utilizan la ejecución especulativa para reducir el costo de las instrucciones de bifurcación condicionales mediante esquemas que predicen la ruta de ejecución de un programa basándose en el historial de ejecuciones de bifurcaciones. [3] Con el fin de 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 deberán ejecutarse, antes de una rama . [5]

Variantes [ editar ]

La computación especulativa fue un concepto anterior relacionado. [6]

Ejecución ansiosa [ editar ]

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 ávida (también conocida como ejecución de Oracle ) proporcionaría en teoría el mismo rendimiento que la predicción de rama perfecta . Con recursos limitados, la ejecución ávida debe emplearse con cuidado, ya que la cantidad de recursos necesarios crece exponencialmente con cada nivel de rama ejecutado con entusiasmo. [7]

Ejecución predictiva [ editar ]

La ejecución predictiva es una forma de ejecución especulativa en la que se predice algún resultado y la ejecución procede a lo largo de la ruta prevista hasta que se conoce el resultado real. Si la predicción es verdadera, se permite que la ejecución predicha se confirme; 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 la memoria . En ocasiones, una forma generalizada se denomina predicción de valor. [1] [8]

Conceptos relacionados [ editar ]

Ejecución perezosa [ editar ]

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 respaldara una especie de ejecución especulativa con un mecanismo de aborto para retroceder en caso de una mala elección llamada ejecución optimista . [9] Se consideró demasiado complicado. [10]

Vulnerabilidades de seguridad [ editar ]

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 .

Éstas incluyen:

  • Espectro
  • Fusión de un reactor
  • REVELACIÓN
  • Presagiar
  • Muestreo de datos de microarquitectura

Ver también [ editar ]

  • Predictor de rama
  • Ejecución fuera de orden
  • Slipstream (informática)
  • Multiproceso especulativo
  • Error de seguridad de hardware
  • Vulnerabilidades de CPU de ejecución transitoria

Referencias [ editar ]

  1. ^ a b " Una encuesta de técnicas de predicción de valor para aprovechar la localidad de valor ", S. Mittal, Concurrencia y Computación, 2017
  2. ^ Mayordomo de ejecución perezoso y especulativo Lampson Microsoft Research OPODIS, Burdeos, Francia 12 de diciembre de 2006
  3. ^ a b Corporación de Máquinas de Negocios Internacionales. División de Investigación; Prabhakar Raghavan; Hadas Schachnai; Mira Yaniv (1998). Esquemas dinámicos de ejecución especulativa de código . IBM . Consultado el 18 de enero de 2011 .
  4. ^ Kung, HT ; John T. Robinson (junio de 1981). "Sobre métodos optimistas para el control de la concurrencia" (PDF) . ACM Trans. Syst base de datos . 6 .
  5. ^ Bernd Krieg-Brückner (1992). ESOP '92: IV Simposio Europeo de Programación, Rennes, Francia, 26-28 de febrero de 1992: actas . Saltador. págs. 56–57. ISBN 978-3-540-55253-6. Consultado el 18 de enero de 2011 .
  6. Randy B. Osborne (21 de marzo de 1990). "Computación especulativa en Multilisp" . Lisp paralelo: lenguajes y sistemas ( PS ). Apuntes de conferencias en informática. 441 . Laboratorio de Investigación de Digital Equipment Corporation . págs. 103-137. doi : 10.1007 / BFb0024152 . ISBN 3-540-52782-6. Consultado el 26 de enero de 2018 .
  7. ^ Jurij Šilc; Borut Robič; Theo Ungerer (1999). Arquitectura del procesador: desde el flujo de datos hasta el superescalar y más . Saltador. págs.  148 –150. ISBN 978-3-540-64798-0. Consultado el 21 de enero de 2011 .
  8. ^ Mark D., Hill; Norman P., Jouppi ; Gourindar S., Sohi (2000). Lecturas en Arquitectura de Computadores . Morgan Kaufman. ISBN 9781558605398. Consultado el 5 de enero de 2018 .
  9. ^ Jones, Simon Peyton; Ennals, Robert (1 de agosto de 2003). "Evaluación optimista: una estrategia de evaluación rápida para programas no estrictos" . Consultado el 15 de mayo de 2019 , a través de www.microsoft.com. Cite journal requiere |journal=( ayuda )
  10. ^ https://mail.haskell.org/pipermail/haskell/2006-August/018424.html