El búfer de almacenamiento es una técnica utilizada en los procesadores informáticos para aumentar la eficiencia de los procesadores superescalares . Permite que se ejecuten varias instrucciones simultáneamente, independientemente de las dependencias de datos entre ellas. Esto posibilita la ejecución fuera de orden , lo que incrementa el rendimiento del microprocesador.
Fondo
Un procesador superescalar permite la ejecución simultánea de varias instrucciones en su núcleo, si bien este comportamiento no debe confundirse con el de un sistema multiprocesador. La mayoría de los procesadores modernos son superescalares. En un procesador superescalar, se envían múltiples instrucciones desde el mismo hilo. Los procesadores multinúcleo contienen varios procesadores que ejecutan hilos independientes.
Problemas con las dependencias de datos
La ejecución de instrucciones en paralelo (es decir, simultáneamente) plantea problemas de dependencia de datos, lo que significa que algunas instrucciones pueden depender de los resultados de otras, por lo que se debe tener cuidado de ejecutarlas en el orden correcto.
Tomemos como ejemplo esta secuencia de instrucciones:
r1 = r2 + r3 r7 = r1 + r4
La actualización de r7 introduce una dependencia de datos de lectura después de escritura (Read After Write) . La primera línea de instrucciones debe completarse antes de que comience la ejecución de la segunda, ya que r7 requiere que se conozca el valor correcto de r1 (registro 1) antes de su ejecución. Este tipo de instrucción no puede ejecutarse de forma concurrente ni simultánea; el orden de las operaciones es implícitamente serial.
Cómo funciona
En un procesador superescalar, la ventana de instrucciones se llena con una cantidad determinada de instrucciones (conocida como tasa de emisión). Dependiendo del esquema que utilice el procesador superescalar para enviar estas instrucciones desde la ventana al núcleo de ejecución de la CPU, pueden surgir problemas si existe una dependencia similar a la descrita anteriormente.
Consideremos una ventana de instrucciones de 3 instrucciones de ancho, que contiene i1, i2, i3 (instrucciones 1, 2 y 3). Supongamos que i2 depende de una instrucción que aún no ha terminado de ejecutarse y que, por lo tanto, no puede ejecutarse todavía.
Sin el uso de un búfer de almacenamiento temporal, el procesador superescalar ejecutará i1, esperará hasta que se pueda ejecutar i2 y luego ejecutará i2 e i3 simultáneamente.
Sin embargo, con el uso de un búfer de almacenamiento temporal, la ventana de instrucciones se vacía en dichos búferes, independientemente de su contenido. A continuación, el procesador busca en estos búferes un número adecuado de instrucciones que puedan ejecutarse en paralelo (es decir, sin dependencias).
Por lo tanto, el procesador tiene una mayor probabilidad de ejecutar el número máximo de instrucciones simultáneamente y maximizar el rendimiento.
Referencias
- Dezso Sima, El espacio de diseño de las estanterías (PDF) , archivado del original (PDF) el 28 de septiembre de 2013.
- Computación paralela