Articulo de referencia

predicción de la dependencia de la memoria

La predicción de dependencias de memoria es una técnica empleada por microprocesadores de alto rendimiento con ejecución fuera de orden, que ejecutan operaciones de acceso a mem...

La predicción de dependencias de memoria es una técnica empleada por microprocesadores de alto rendimiento con ejecución fuera de orden, que ejecutan operaciones de acceso a memoria (cargas y almacenamientos) fuera del orden del programa, para predecir las dependencias reales entre cargas y almacenamientos en el momento de la ejecución de las instrucciones . Con la información de dependencia predicha, el procesador puede decidir ejecutar de forma especulativa ciertas cargas y almacenamientos fuera de orden, mientras impide que otras se ejecuten fuera de orden (manteniéndolas en orden). Posteriormente, en la tubería de procesamiento , se utilizan técnicas de desambiguación de memoria para determinar si las cargas y almacenamientos se ejecutaron correctamente y, en caso contrario, para recuperarse.

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

En general, la predicción de dependencia de 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 true) para la planificación fuera de orden de cargas y almacenamientos, se han propuesto otras aplicaciones de la predicción de dependencia de memoria. Véase, por ejemplo, [ 1 ].

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

La predicción selectiva de dependencia de memoria [ 2 ] [ 3 ] retrasa cargas específicas hasta que se tenga la certeza de que no puede ocurrir ninguna violación. No predice explícitamente las dependencias. Este predictor puede retrasar las cargas más de lo necesario y, por lo tanto, resultar en un rendimiento subóptimo. De hecho, en algunos casos, funciona peor que especular ingenuamente 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 todas las escrituras precedentes. La predicción exacta de dependencia de memoria se desarrolló en la Universidad de Wisconsin-Madison. Específicamente, la especulación y sincronización dinámica [ 2 ] [ 3 ] retrasa las cargas solo el tiempo necesario al predecir la escritura exacta que una carga debe esperar. Este predictor predice dependencias exactas (par de escritura y carga). El predictor de sinónimos [ 1 ] agrupa todas las dependencias que comparten una instrucción de carga o escritura común. El predictor de conjuntos de escritura [ 4 ] representa múltiples dependencias potenciales de manera eficiente al agrupar todas las escrituras posibles de las que una carga puede depender. El predictor de barrera de almacenamiento [ 5 ] trata ciertas instrucciones de almacenamiento como barreras. Es decir, todas las operaciones de carga o almacenamiento subsiguientes no pueden eludir el almacenamiento específico. El predictor de barrera de almacenamiento no predice explícitamente las dependencias. Este predictor puede retrasar innecesariamente las cargas subsiguientes, aunque independientes. La predicción de dependencia de memoria tiene otras aplicaciones más allá de la planificación de cargas y almacenamientos. Por ejemplo, el enmascaramiento de memoria especulativa [ 1 ] y el desvío de memoria especulativa [ 1 ] utilizan la predicción de dependencia de memoria para optimizar la comunicación de valores a través de la memoria.

Analogía con la predicción de ramas

La predicción de dependencias de memoria para cargas y almacenamientos es análoga a la predicción de bifurcaciones para instrucciones de bifurcación condicional . En la predicción de bifurcaciones, el predictor predice hacia dónde se resolverá la bifurcación antes de que se conozca. El procesador puede entonces buscar y ejecutar instrucciones de forma especulativa a través de una de las rutas de la bifurcación. Posteriormente, cuando se ejecuta la instrucción de bifurcación, se puede determinar si la predicción fue correcta. De no ser así, se trata de una predicción errónea de bifurcación , y es necesario vaciar la tubería para descartar las instrucciones que se buscaron y ejecutaron de forma especulativa.

La predicción de bifurcaciones puede considerarse un proceso de dos pasos. Primero, el predictor determina la dirección de la bifurcación (si se toma 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 dependencias de memoria puede considerarse un proceso de dos pasos. Primero, el predictor determina si existe una dependencia. Luego, determina cuál es esta dependencia.

Véase también

Referencias

  1. 1 2 3 4 Moshovos, A.; Sohi, GS (1997). "Streamlining Inter-Operation Memory Communication via Data Dependence Prediction". Proceedings of 30th Annual International Symposium on Microarchitecture . MICRO '97. pp. 235– 245. doi : 10.1109/MICRO.1997.645814 . 
  2. 1 2 3 Moshovos, Andreas; Breach, Scott E.; Vijaykumar, TN; Sohi, Gurindar S. (1997). "Especulación dinámica y sincronización de dependencias de datos". Actas del 24.º simposio internacional anual sobre arquitectura de computadoras . 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. 1 2 Predicción de dependencia de memoria, Moshovos, Tesis doctoral, Departamento de Ciencias de la Computación, Universidad de Wisconsin-Madison, diciembre de 1998.
  4. Chrysos, GZ; Emer, JS (1998). "Predicción de dependencia de memoria mediante conjuntos de almacenamiento". Actas del 25.º Simposio Internacional Anual sobre Arquitectura de Computadoras . ISCA '98. págs. 142–153 . doi : 10.1109/ISCA.1998.694770 . 
  5. Aparato para controlar dinámicamente la ejecución fuera de orden de instrucciones de carga y almacenamiento en un procesador capaz de despachar, emitir y ejecutar múltiples instrucciones en un solo ciclo del procesador, Hesson, LeBlanc y Ciavaglia, IBM, Patente estadounidense 5,615,350, marzo de 1997.