RIESGOS EN UNA UNIDAD SEGMENTADA Uno de los límites en la segmentación son los riesgos. Los riesgos impiden que la siguiente instrucción se ejecute en el ciclo de reloj que le corresponde. Pueden ser de tres tipos:
Riesgos de datos: la instrucción depende de resultados de instrucciones previas que aún están en el cauce Riesgos estructurales: el HW no puede soportar esta combinación de instrucciones Riesgos de control: la segmentación de instrucciones de salto condicional y de otros tipos de instrucciones que cambian el PC
La solución más común a estos problemas consiste en detener el cauce hasta que el riesgo desaparece, esto provoca la inserción de burbujas en el funcionamiento del cauce 2
RIESGOS DE DATOS Instr1 seguida de Instr2
Riesgo Read After Write (RAW) Instr2 trata de leer un operando fuente antes de que la instr1 lo escriba Riesgo Write After Write (WAW) Instr2 trata de escribir un operando antes de que la instr1 lo escriba Si se escribe en más de una etapa, cuando se detiene la primera escritura y se permite la segunda Riesgo Write After Read (WAR) Instr2 trata de escribir un resultado antes de que la instr1 lo lea Instrucciones que escriben resultados al comienzo del cauce con otras que leen un operando fuente tarde dentro del cauce 3
RIESGOS DE DATOS: READ AFTER WRITE (RAW) 4 Instr J trata de leer un operando antes de que la Instr I lo escriba
Este problema se produce por una “Dependencia” (en terminología del compilador). Este riesgo es el resultado de de una necesidad real de comunicación de un dato.
“True” dependence (Gp:) I: add r1,r2,r3 J: sub r4,r1,r3
RIESGOS DE DATOS: WRITE AFTER READ (WAR) 5 La Instr J escribe el operando antes de que la Instr I lo lea Los diseñadores de compiladores denominan a este tipo de dependencia, “anti-dependencia” . Se produce como resultado de la reutilización del registro “r1”. En el caso de la arquitectura DLX con 5 etapas en el cauce no se puede producir ya que: Todas las instrucciones tienen 5 etapas, Las lecturas son siempre en la etapa 2 (ID), Las escrituras en la etapa 5 (WB) También llamada “Name dependence” (Gp:) I: sub r4,r1,r3 J: add r1,r2,r3 K: mul r6,r1,r7
RIESGOS DE DATOS: WRITE AFTER WRITE (WAW) InstrJ escribe el operando antes de que la InstrI escribe en reg. Los diseñadores de compiladores denominan a este tipo de dependencia, “dependencia de salida” .Se produce también como resultado de la reutilización del nombre “r1”. En el caso de la arquitectura DLX con 5 etapas en el cauce no se puede producir ya que : Todas las instrucciones son de 5 etapas, y Las escrituras se realizan siempre en la etapa 5
También llamada “Name dependence” 6 (Gp:) I: sub r1,r4,r3 J: add r1,r2,r3 K: mul r6,r1,r7
EL HW/SW deben preservar el orden del programa: el orden en el que las instrucciones deben ejecutarse si se ejecutan secuencialmente una cada vez, viene determinado por su posición en el programa original Objetivo del HW/SW: explotar el paralelismo preservando el orden del programa, solo donde este afecte a la salida del programa. Las instrucciones implicadas en dependencias de nombre pueden ejecutarse simultáneamente si el nombre usado en la instrucción es modificado para que no exista conflicto Renombrado de registros resuelve la dependencias de nombre producidas por la reutilización de los registros Esto puede hacerse por compilador o por HW 7 ILP (PARALELISMO A NIVEL DE INSTRUCCIÓN) Y RIESGOS DE DATOS
RIESGOS DE DATOS 8 Problemas con el comienzo de las siguientes instrucciones antes de que termine la primera Las dependencias que retroceden en el tiempo son de “datos” (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb
(Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb
(Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb
Escritura: r2 sub r2, r1, r3 and r12, r2, r5 or r13, r6, r2 and r14, r2, r2 sw r15, 100 (r2) (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb
1 2 3 4 5 6 7 8 Tiempo (ciclos de reloj) Orden progr. (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb
¿Cuales son lecturas incorrectas del reg r2?
SOLUCIONES A LOS RIESGOS DE DATOS Los riesgos de datos pueden tratarse de diversas formas: Software: si el HW del proc. segmentado no es capaz de detectar y resolver los riesgos, esto tiene que resolverse en el compilador. El compilador introduce instr de no-op después de cada instrucción que cause o pueda causar riesgos. Evita el malfuncionamiento, pero no reduce los retardos. El compilador puede reordenar el código del programa (planificación de instr) para mejorar el funcionamiento (se uso este enfoque en los primeros RISC). Hardware: Se pueden distinguir tres soluciones: Interbloqueo. Es la forma más simple, y consiste en detectar el riesgo y detener el cauce hasta que este desaparezca. Esta solución provoca burbujas en el cauce. Forwarding (anticipación). Es más sofisticada, requiere hardware adicional. Consiste en no esperar a leer los datos hasta el momento en que se escriban en estos, sino leerlo en cuanto que esta disponible. Como el forwarding no es capaz de resolver todos los riesgos de datos, hay que combinarlo con el interbloqueo. 9
RIESGOS RAW: SOLUCIÓN SW 10 Introducir instrucciones de NOP (el compilador) Problema: esto ralentiza mucho el funcionamiento (Gp:) sub r2, r1, r3 nop nop and r12, r2, r5 or r13, r6, r2 and r14, r2, r2 sw r15, 100 (r2) (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb (Gp:) IF (Gp:) ID (Gp:) – (Gp:) – (Gp:) – (Gp:) Escritura: r2 (Gp:) IF (Gp:) ID (Gp:) – (Gp:) – (Gp:) – (Gp:) 1 2 3 4 5 6 7 8 (Gp:) Tiempo (ciclos de reloj) (Gp:) Orden progr. (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb (Gp:) IF (Gp:) ID (Gp:) Ex (Gp:) M (Gp:) Wb (Gp:) Lectura: r2
Página siguiente |