18 / 24 · Concepto
Dependencias, riesgos de recursos y reenvío
Compara detenciones y reenvío cuando una operación necesita un resultado anterior.
Las lecciones se pueden leer gratis. Inscríbete para guardar el progreso.
El solapamiento requiere más que conservar el orden
Los cálculos independientes de un flujo no leen resultados anteriores, por lo que las transacciones pueden solaparse de forma segura. En cambio, un operador con banco de registros puede necesitar el resultado de una operación precedente. Leer un registro antes de que esté disponible una escritura más antigua crea un riesgo de datos de lectura después de escritura. La aritmética puede ser correcta aunque su operando se haya muestreado demasiado pronto.
Empieza con R1=4. Haz que I0 realice R1←R1+3 e I1 realice R2←R1×2. En este ejemplo, I0 captura el operando 4 en el flanco 0, calcula 7 durante el ciclo siguiente y escribe R1 en el flanco 1. I1 al muestrear R1 en el flanco 1 puede ver el valor anterior 4 y producir R2=8. La ejecución secuencial requiere R2=14. Especifica explícitamente el comportamiento de lectura y escritura del banco de registros en el mismo flanco.
| Solución | Operando visto por I1 | Requisito |
|---|---|---|
| Leer R1 anterior | 4 | Incorrecto aquí |
| Detener hasta el flanco 2 | 7 | Conservar operación y campos acompañantes |
| Reenviar resultado de ejecución | 7 justo antes del flanco 1 | Resultado disponible y camino que cumple la temporización |
El reenvío selecciona un resultado calculado antes de que llegue al almacenamiento arquitectónico. Que coincidan los números de destino no basta: el productor debe ser válido, escribir realmente en el registro y tener el resultado listo. Con varios productores coincidentes, elige la operación anterior más reciente. Nunca reenvíes una burbuja ni una operación cancelada por vaciado.
Una carga cuya respuesta aún no ha llegado no se resuelve reenviando datos no disponibles. Detén al consumidor conservando el código de operación, los identificadores de origen y la etiqueta. Decide si pueden continuar otras etapas independientes.
Los riesgos estructurales aparecen cuando dos etapas necesitan el mismo puerto de memoria a la vez. Se requiere arbitraje o recursos adicionales incluso sin dependencia de datos. Las bifurcaciones introducen riesgos de control que requieren cancelar trabajo del camino equivocado. Analiza qué espera cada operación y qué estado debe conservarse. Nuestro proyecto final sigue siendo un flujo independiente; superarlo no demuestra gestión de dependencias de CPU.
Inténtalo tú
Con R1=4, I0 suma tres e I1 duplica el resultado. Compara el resultado de I1 desde el almacenamiento anterior y con reenvío correcto. ¿Qué pasa si I0 es una carga cuyos datos aún no están disponibles?
Leer la explicación
Leer el 4 anterior da 8; reenviar 7 da 14. Un resultado de carga no disponible requiere detener al consumidor conservando su operación y su etiqueta. Una coincidencia de destino no justifica reenviar datos sin terminar.