stringtranslate.com

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 realiza antes de que se sepa si realmente es necesario, para evitar un retraso en el que se tendría que incurrir al realizar el trabajo después de que se sepa que es necesario. Si resulta que, después de todo, el trabajo no era necesario, la mayoría de los cambios realizados en 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 ramificaciones en procesadores canalizados , la predicción de valores para explotar la localidad de valores, la captación previa de memoria y archivos y el control de concurrencia optimista en sistemas de bases de datos . [1] [2] [3]

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

Descripción general

Los microprocesadores canalizados 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 en función del 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 será necesario ejecutarlas, antes de una rama . [4]

Variantes

La computación especulativa 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 sólo si el predicado es verdadero. Con recursos ilimitados, la ejecución ansiosa (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 entusiasta debe emplearse con cuidado, ya que la cantidad de recursos necesarios crece exponencialmente con cada nivel de rama ejecutado con entusiasmo. [6]

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 continúa a lo largo del camino previsto hasta que se conoce el resultado real. Si la predicción es verdadera, se permite que se confirme la ejecución prevista; sin embargo, si hay una predicción errónea, la ejecución debe desenrollarse y volverse a ejecutar. Las formas comunes de esto incluyen predictores de rama y predicción de dependencia de memoria . A veces se hace referencia a una forma generalizada como predicción de valor. [7]

Adelanto

Runahead es una técnica que permite al procesador de una computadora preprocesar instrucciones de manera especulativa durante los ciclos de pérdida de caché . Las instrucciones preprocesadas se utilizan para generar captaciones previas de instrucciones y flujos de datos mediante la ejecución de instrucciones que provocan errores de caché (normalmente llamados cargas de latencia larga ) antes de que ocurran normalmente, ocultando efectivamente la latencia de la memoria . En runahead, el procesador utiliza los recursos de ejecución inactivos para calcular direcciones de flujo de datos e instrucciones utilizando la información disponible que es independiente de una pérdida de caché. Una vez que el procesador ha resuelto el error de caché inicial, todos los resultados de runahead se descartan y el procesador reanuda la ejecución normalmente. El principal caso de uso de la técnica es mitigar los efectos del muro de la memoria . La técnica también se puede utilizar para otros fines, como precalcular los resultados de las ramas para lograr una predicción de ramas altamente precisa . [8]

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 implementaciones del lenguaje de programación Haskell , un lenguaje vago, 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 . [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 .

Éstas incluyen:

Ver también

Referencias

  1. ^ Lampson, mayordomo (2006). "Ejecución vaga y especulativa en sistemas informáticos". En Momenzadeh, Mariam; Shvartsman, Alexander A. (eds.). Principios de los sistemas distribuidos . Décima Conferencia Internacional sobre Principios de Sistemas Distribuidos. Apuntes de conferencias sobre informática. vol. 4305. Burdeos, Francia: Springer. págs. 1–2. doi :10.1007/11945529_1. ISBN 978-3-540-49991-6.
  2. ^ ab Raghavan, Prabhakar; Shajnai, 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 la concurrencia" (PDF) . Transmisión ACM. Sistema de base de datos . 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. Consultado el 18 de enero de 2011 .
  5. ^ Randy B. Osborne (21 de marzo de 1990). "Computación especulativa en Multilisp". Lisp paralelo: lenguajes y sistemas ( PS ). Apuntes de conferencias 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-6. Archivado 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. Consultado el 21 de enero de 2011 .
  7. ^ Mark D., colina; Norman P., Jouppi ; Gourindar S., Sohi (2000). Lecturas en Arquitectura de Computadores. Morgan Kaufman. ISBN 9781558605398. Consultado el 5 de enero de 2018 .
  8. ^ Pruett, Stephen; Patt, Yale (octubre de 2021). "Branch Runahead: una alternativa a la predicción de sucursales para sucursales imposibles de predecir". MICRO-54: 54º Simposio Internacional Anual IEEE/ACM sobre Microarquitectura . MICRO'21. Nueva York, NY, EE.UU.: Asociación de Maquinaria de Computación. págs. 804–815. doi :10.1145/3466752.3480053. ISBN 978-1-4503-8557-2. S2CID  239011545.
  9. ^ Jones, Simón 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}}: Citar diario requiere |journal=( ayuda )
  10. ^ "[Haskell] ¿Evaluación optimista?". 31 de agosto de 2006.