El reenvío de operandos (o reenvío de datos ) es una optimización en las CPU canalizadas para limitar los déficits de rendimiento que se producen debido a las paradas de la canalización . [1] [2] Un riesgo de datos puede llevar a una parada de la tubería cuando la operación actual tiene que esperar los resultados de una operación anterior que aún no ha finalizado.
Ejemplo
AÑADIR ABC # A = B + CSUB DCA # D = CA
Si estas dos instrucciones de pseudocódigo de ensamblado se ejecutan en una canalización, después de obtener y decodificar la segunda instrucción, la canalización se detiene y espera hasta que se escribe y lee el resultado de la adición.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
Obtener ADD | Decodificar AÑADIR | Leer operandos AÑADIR | Ejecutar ADD | Escribir resultado | |||
Obtener SUB | Decodificar SUB | puesto | puesto | Leer operandos SUB | Ejecutar SUB | Escribir resultado |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
Obtener ADD | Decodificar AÑADIR | Leer operandos AÑADIR | Ejecutar ADD | Escribir resultado | ||
Obtener SUB | Decodificar SUB | puesto | Leer operandos SUB: usar el resultado de la operación anterior | Ejecutar SUB | Escribir resultado |
En algunos casos, todos los bloqueos de estos peligros de datos de lectura tras escritura pueden eliminarse por completo mediante el reenvío de operandos: [3] [4] [5]
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
Obtener ADD | Decodificar AÑADIR | Leer operandos AÑADIR | Ejecutar ADD | Escribir resultado | |
Obtener SUB | Decodificar SUB | Leer operandos SUB: usar el resultado de la operación anterior | Ejecutar SUB | Escribir resultado |
Realización técnica
La unidad de control de la CPU debe implementar la lógica para detectar dependencias donde el reenvío de operandos tiene sentido. A continuación, se puede utilizar un multiplexor para seleccionar el registro o flip-flop adecuado para leer el operando.
Ver también
Referencias
- ^ "Conferencia 19 de CMSC 411, reenvío de datos de canalización" . Departamento de Ciencias de la Computación e Ingeniería Eléctrica del Condado de Baltimore de la Universidad de Maryland . Consultado el 22 de enero de 2020 .
- ^ "Computación de alto rendimiento, Notas de la clase 11" . hpc.serc.iisc.ernet.in. Septiembre de 2000. Archivado desde el original el 27 de diciembre de 2013 . Consultado el 8 de febrero de 2014 .
- ^ Gurpur M. Prabhu. "Tutorial de Arquitectura de Computadores". Secciones "Reenvío" . y "Clasificación de datos peligrosos" .
- ^ Dr. Orion Lawlor. "Pipelining, Pipeline Stalls y Operand Forwarding" .
- ^ Larry Snyder. "Revisión de la tubería" .