Ejecución especulativa

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
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 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

Runahead es una técnica que permite a un procesador de ordenador a las instrucciones de preproceso especulativamente durante ciclos de falta de caché. Las instrucciones preprocesadas se utilizan para generar instrucción y prefetches de flujo de datos mediante la ejecución de instrucciones que conducen a faltas de caché (normalmente llamadas cargas largas de latencia) antes de que normalmente ocurran, ocultando efectivamente latencia de memoria. En runahead, el procesador utiliza los recursos de ejecución idle para calcular las direcciones de instrucciones y flujo de datos utilizando la información disponible que es independiente de una falta de caché. Una vez que el procesador ha resuelto la caída inicial de caché, todos los resultados de runahead son descartados, y el procesador reanudar la ejecución como normal. El caso de uso primario de la técnica es mitigar los efectos de la pared de memoria. La técnica también se puede utilizar para otros fines, como los resultados de la rama de precomputación para lograr una predicción de rama altamente precisa.

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

FL Studio es una estación de trabajo de audio digital desarrollada por la empresa belga Image-Line. Cuenta con una interfaz gráfica de usuario con un...

Alan Miller (diseñador de juegos)

Miller estudió ingeniería eléctrica e informática en la Universidad de California, Berkeley, y se graduó en...

Sistema de instalación programable de Nullsoft

Nullsoft Scriptable Install System es una herramienta de creación de instaladores basada en scripts para Microsoft Windows respaldada por Nullsoft, los...
Más resultados...
Tamaño del texto:
Copiar