Ejecución especulativa

Técnica de optimización informática

La ejecución especulativa es una técnica de optimización en la que un sistema informático realiza una tarea que puede no ser necesaria. El trabajo se realiza antes de saber si realmente es necesario, a fin de evitar una demora que se produciría si se hiciera el trabajo después de saber 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 concurrencia si hay recursos adicionales disponibles. Este enfoque se emplea en una variedad de áreas, incluida la predicción de ramificaciones en procesadores segmentados , la predicción de valores para explotar la localidad de valores, la precarga de memoria y archivos , y el control de concurrencia optimista en sistemas de bases de datos . [1] [2] [3]

El subprocesamiento múltiple especulativo es un caso especial de ejecución especulativa.

Descripción general

Los microprocesadores modernos con pipeline utilizan la ejecución especulativa para reducir el costo de las instrucciones de bifurcación condicional utilizando esquemas que predicen la ruta de ejecución de un programa basándose en el historial de ejecuciones de bifurcaciones. [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 necesitarán ser ejecutadas, antes de una bifurcación . [4]

Variantes

El cálculo especulativo fue un concepto anterior relacionado. [5]

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

Ejecución predictiva

La ejecución predictiva es una forma de ejecución especulativa en la que se predice un resultado y la ejecución continúa por el camino predicho hasta que se conoce el resultado real. Si la predicción es verdadera, se permite que la ejecución predicha se ejecute; 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 bifurcación y predicción de dependencia de memoria . Una forma generalizada a veces se conoce como predicción de valor. [7]

Adelante

Runahead es una técnica que permite a un procesador de computadora preprocesar especulativamente instrucciones durante ciclos de falla de caché . Las instrucciones preprocesadas se utilizan para generar prefetchs de instrucciones y flujos de datos ejecutando instrucciones que conducen a fallas de caché (normalmente llamadas cargas de latencia larga ) antes de que ocurran normalmente, ocultando de manera efectiva la latencia de la memoria . En runahead, el procesador utiliza los recursos de ejecución inactivos para calcular las direcciones de las instrucciones y los flujos de datos utilizando la información disponible que es independiente de una falla de caché. Una vez que el procesador ha resuelto la falla de caché inicial, todos los resultados de runahead se descartan y el procesador reanuda la ejecución de manera normal. El caso de uso principal de la técnica es mitigar los efectos del muro de memoria . La técnica también se puede utilizar para otros fines, como precalcular los resultados de las bifurcaciones para lograr una predicción de bifurcaciones altamente precisa . [8]

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 la ejecución especulativa. Una tesis doctoral de 2003 hizo que GHC apoyara un tipo de ejecución especulativa con un mecanismo de aborto para dar marcha atrás en caso de una mala elección llamada ejecución optimista . [9] Se consideró demasiado complicado. [10]

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:

Véase también

Referencias

  1. ^ Lampson, Butler (2006). "Ejecución perezosa y especulativa en sistemas informáticos". En Momenzadeh, Mariam; Shvartsman, Alexander A. (eds.). Principios de sistemas distribuidos . 10.ª Conferencia internacional sobre principios de sistemas distribuidos. Apuntes de clase en informática. Vol. 4305. Burdeos, Francia: Springer. pp. 1–2. doi :10.1007/11945529_1. ISBN 978-3-540-49991-6.
  2. ^ ab Raghavan, Prabhakar; Shachnai, Hadas; Yaniv, Mira (1998). "Esquemas dinámicos para la ejecución especulativa de código". Actas del Sexto Simposio Internacional sobre Modelado, Análisis y Simulación de Sistemas Informáticos y de Telecomunicaciones . IEEE. págs. 309–314. doi :10.1109/MASCOT.1998.693711 . Consultado el 18 de enero de 2011 .
  3. ^ Kung, HT ; John T. Robinson (junio de 1981). "Sobre métodos optimistas para el control de concurrencia" (PDF) . ACM Trans. Database Syst . Vol. 6. Archivado (PDF) desde el original el 31 de agosto de 2019.
  4. ^ Bernd Krieg-Brückner (1992). ESOP '92: Cuarto Simposio Europeo sobre Programación, Rennes, Francia, 26 al 28 de febrero de 1992: actas. Saltador. págs. 56–57. ISBN 978-3-540-55253-6. Recuperado el 18 de enero de 2011 .
  5. ^ Randy B. Osborne (21 de marzo de 1990). "Computación especulativa en Multilisp". Parallel Lisp: lenguajes y sistemas ( PS ). Apuntes de clase sobre informática. Vol. 441. Laboratorio de investigación de Digital Equipment Corporation . págs. 103–137. doi :10.1007/BFb0024152. ISBN. 3-540-52782-6Archivado desde el original el 7 de febrero de 2017. Consultado el 26 de enero de 2018 .
  6. ^ Jurij Šilc; Borut Robič; Theo Ungerer (1999). Arquitectura de procesador: del flujo de datos al superescalar y más allá . Saltador. págs. 148-150. ISBN 978-3-540-64798-0. Recuperado el 21 de enero de 2011 .
  7. ^ Mark D., Hill; Norman P., Jouppi ; Gourindar S., Sohi (2000). Lecturas sobre arquitectura informática. Morgan Kaufman. ISBN 9781558605398. Recuperado el 5 de enero de 2018 .
  8. ^ Pruett, Stephen; Patt, Yale (octubre de 2021). "Branch Runahead: An Alternative to Branch Prediction for Impossible to Predict Branches" (Adelanto de rama: una alternativa a la predicción de rama para ramas imposibles de predecir). MICRO-54: 54.º Simposio internacional anual IEEE/ACM sobre microarquitectura . MICRO '21. Nueva York, NY, EE. UU.: Association for Computing Machinery. págs. 804–815. doi :10.1145/3466752.3480053. ISBN . 978-1-4503-8557-2. Número de identificación del sujeto  239011545.
  9. ^ Jones, Simon Peyton; Ennals, Robert (1 de agosto de 2003). «Optimistic Evaluation: a fast evaluation strategy for non-strict programs» (Evaluación optimista: una estrategia de evaluación rápida para programas no estrictos) . Consultado el 15 de mayo de 2019 en www.microsoft.com. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  10. ^ "[Haskell] ¿Evaluación optimista?". 31 de agosto de 2006.
Obtenido de "https://es.wikipedia.org/w/index.php?title=Ejecución_especulativa&oldid=1221791296"