stringtranslate.com

Predicción de dependencia de la memoria.

La predicción de la dependencia de la memoria es una técnica empleada por microprocesadores de ejecución desordenada de alto rendimiento que ejecutan operaciones de acceso a la memoria (cargas y almacenes) fuera del orden del programa, para predecir verdaderas dependencias entre cargas y almacenes en el momento de ejecución de la instrucción . Con la información de dependencia prevista, el procesador puede entonces decidir ejecutar especulativamente ciertas cargas y almacenes fuera de orden, mientras evita que otras cargas y almacenes se ejecuten fuera de orden (manteniéndolos en orden). Más adelante en el proceso , se utilizan técnicas de desambiguación de memoria para determinar si las cargas y almacenes se ejecutaron correctamente y, en caso contrario, recuperarlas.

Al utilizar el predictor de dependencia de memoria para mantener en orden la mayoría de las cargas y almacenes dependientes, el procesador obtiene los beneficios de una ejecución agresiva de carga/almacenamiento fuera de orden, pero evita muchas de las violaciones de dependencia de memoria que ocurren cuando las cargas y almacenes se ejecutaron incorrectamente. Esto aumenta el rendimiento porque reduce la cantidad de vaciados de canalización necesarios para recuperarse de estas violaciones de dependencia de memoria. Consulte el artículo de desambiguación de la memoria para obtener más información sobre las dependencias de la memoria, las violaciones de la dependencia de la memoria y la recuperación.

En general, la predicción de la dependencia de la memoria predice si dos operaciones de memoria son dependientes, es decir, si interactúan accediendo a la misma ubicación de memoria. Además de utilizar la predicción de dependencia de memoria de almacenamiento a carga (RAW o verdadera) para la programación desordenada de cargas y almacenes, se han propuesto otras aplicaciones de predicción de dependencia de memoria. Ver por ejemplo. [1]

La predicción de la dependencia de la memoria es una optimización además de la especulación sobre la dependencia de la memoria . La semántica de ejecución secuencial implica que las tiendas y las cargas parecen ejecutarse en el orden especificado por el programa. Sin embargo, al igual que con la ejecución desordenada de otras instrucciones, es posible ejecutar dos operaciones de memoria en un orden diferente al implícito en el programa. Esto es posible cuando las dos operaciones son independientes. En la especulación de la dependencia de la memoria, se puede permitir que una carga se ejecute antes que una tienda que la precede. La especulación tiene éxito cuando la carga es independiente del almacén, es decir, cuando las dos instrucciones acceden a ubicaciones de memoria diferentes. La especulación falla cuando la carga depende del almacén, es decir, cuando los dos accesos se superponen en la memoria. En los primeros diseños desordenados modernos, no se utilizó la especulación de la memoria porque sus beneficios eran limitados. A medida que el alcance de la ejecución desordenada aumentó en unas pocas decenas de instrucciones, se utilizó una especulación ingenua sobre la dependencia de la memoria. En una especulación ingenua sobre la dependencia de la memoria , [2] se permite que una carga omita cualquier almacén anterior. Como ocurre con cualquier forma de especulación, es importante sopesar los beneficios de la especulación correcta frente a la penalización que se paga por la especulación incorrecta. A medida que el alcance de la ejecución desordenada aumenta hasta alcanzar varias decenas de instrucciones, los beneficios de rendimiento de la especulación ingenua disminuyen. Para conservar los beneficios de la especulación agresiva sobre la dependencia de la memoria y al mismo tiempo evitar los costos de la especulación errónea, se han propuesto varios predictores.

La predicción selectiva de la dependencia de la memoria [2] [3] detiene cargas específicas hasta que esté seguro de que no se puede producir ninguna infracción. No predice explícitamente dependencias. Este predictor puede retrasar las cargas más de lo necesario y, por tanto, dar lugar a un rendimiento subóptimo. De hecho, en algunos casos funciona peor que especular ingenuamente con todas las cargas lo antes posible. Esto se debe a que a menudo es más rápido especular erróneamente y recuperarse que esperar a que se ejecuten todos los almacenes anteriores. La predicción exacta de la dependencia de la memoria se desarrolló en la Universidad de Wisconsin-Madison. Específicamente, la especulación dinámica y la sincronización [2] [3] retrasan las cargas solo el tiempo necesario al predecir el almacén exacto que debe esperar una carga. Este predictor predice dependencias exactas (par de almacenamiento y carga). El predictor de sinónimos [1] agrupa todas las dependencias que comparten una instrucción de carga o almacenamiento común. El predictor de conjuntos de tiendas [4] representa múltiples dependencias potenciales de manera eficiente al agrupar todas las tiendas posibles de las que puede depender una carga. El predictor de barrera de la tienda [5] trata ciertas instrucciones de la tienda como barreras. Es decir, no se permite que todas las operaciones de carga o almacenamiento posteriores pasen por alto el almacén específico. El predictor de barreras de la tienda no predice explícitamente las dependencias. Este predictor puede retrasar innecesariamente cargas posteriores, aunque independientes. La predicción de la dependencia de la memoria tiene otras aplicaciones más allá de la programación de cargas y almacenes. Por ejemplo, el encubrimiento de la memoria especulativa [1] y la omisión de la memoria especulativa [1] utilizan la predicción de la dependencia de la memoria para agilizar la comunicación de valores a través de la memoria.

Analogía con la predicción de ramas

La predicción de la dependencia de la memoria para cargas y almacenes es análoga a la predicción de bifurcación para instrucciones de bifurcación condicionales . En la predicción de bifurcaciones, el predictor de bifurcaciones predice en qué dirección se resolverá la bifurcación antes de que se sepa. Luego, el procesador puede buscar y ejecutar instrucciones de forma especulativa por una de las rutas de la rama. Más tarde, cuando se ejecuta la instrucción de bifurcación, se puede determinar si la instrucción de bifurcación se predijo correctamente. De lo contrario, se trata de una predicción errónea de rama y es necesario realizar un vaciado de la tubería para descartar instrucciones que se obtuvieron y ejecutaron de forma especulativa.

La predicción de ramas puede considerarse como un proceso de dos pasos. Primero, el predictor determina la dirección de la rama (tomada o no). Esta es una decisión binaria. Luego, el predictor determina la dirección de destino real. De manera similar, la predicción de la dependencia de la memoria puede considerarse como un proceso de dos pasos. Primero, el predictor determina si existe dependencia. Luego determina cuál es esta dependencia.

Ver también

Referencias

  1. ^ abcdMoshovos , A.; Sohi, GS (1997). "Simplificación de la comunicación de memoria entre operaciones mediante la predicción de la dependencia de datos". Actas del 30º Simposio Internacional Anual sobre Microarquitectura . MICRÓ'97 . págs. 235–245. doi :10.1109/MICRO.1997.645814.
  2. ^ abc Moshovos, Andreas; Incumplimiento, Scott E.; Vijaykumar, Tennessee; Sohi, Gurindar S. (1997). "Especulación dinámica y sincronización de dependencias de datos". Actas del 24º simposio internacional anual sobre arquitectura informática . ISCA'97 . págs. 181-193. doi :10.1145/264107.264189.También como informe técnico, Departamento de Ciencias de la Computación, Universidad de Wisconsin–Madison, marzo de 1996.
  3. ^ ab Predicción de la dependencia de la memoria, Moshovos, Ph.D. Tesis, Departamento de Ciencias de la Computación, Universidad de Wisconsin-Madison, diciembre de 1998.
  4. ^ Crisos, GZ; Emer, JS (1998). "Predicción de la dependencia de la memoria mediante conjuntos de tiendas". Actas del 25º Simposio Internacional Anual sobre Arquitectura de Computadores . ISCA'98 . págs. 142-153. doi :10.1109/ISCA.1998.694770.
  5. ^ Aparato para controlar dinámicamente la ejecución desordenada de instrucciones de almacenamiento de carga en un procesador capaz de enviar, emitir y ejecutar múltiples instrucciones en un solo ciclo de procesador, Hesson, LeBlanc y Ciavaglia, IBM, patente de EE. UU. 5.615.350, marzo de 1997.