stringtranslate.com

Ranura de retardo

En arquitectura informática , una ranura de retardo es una ranura de instrucción que se ejecuta sin los efectos de una instrucción anterior. [1] La forma más común es una única instrucción arbitraria ubicada inmediatamente después de una instrucción de rama en una arquitectura RISC o DSP ; Esta instrucción se ejecutará incluso si se toma la rama anterior. Así, por diseño, las instrucciones parecen ejecutarse en un orden ilógico o incorrecto. Es típico que los ensambladores reordenen automáticamente las instrucciones de forma predeterminada, ocultando la incomodidad a los desarrolladores y compiladores de ensambladores. [ cita necesaria ]

Ranuras de retardo de rama

Cuando se trata de una instrucción de bifurcación, la ubicación de la siguiente instrucción de intervalo de retardo en la tubería puede denominarse intervalo de retardo de bifurcación . Las ranuras de retardo de rama se encuentran principalmente en arquitecturas DSP y arquitecturas RISC más antiguas. MIPS , PA-RISC (se puede especificar rama retrasada o no retrasada), [2] ETRAX CRIS , SuperH (las instrucciones de rama incondicional tienen una ranura de retardo), [3] Am29000 , [4] Intel i860 (las instrucciones de rama incondicional tienen una ranura de retardo), [5] MC88000 (se puede especificar rama retrasada o no retrasada), [6] y SPARC son arquitecturas RISC que tienen cada una una única ranura de retardo de rama; PowerPC , ARM , Alpha , V850 y RISC-V no tienen ninguno. Las arquitecturas DSP que tienen cada una una ranura de retardo de rama única incluyen μPD77230 [7] y VS DSP. SHARC DSP y MIPS-X utilizan una ranura de retardo de doble rama ; [8] dicho procesador ejecutará un par de instrucciones después de una instrucción de bifurcación antes de que la bifurcación entre en vigor. Tanto TMS320C3x [9] como TMS320C4x [10] utilizan una ranura de retardo de rama triple. El TMS320C4x tiene ramas retardadas y no retardadas. [10]

El siguiente ejemplo muestra ramas retrasadas en lenguaje ensamblador para SHARC DSP, incluido un par después de la instrucción RTS. Los registros R0 a R9 se borran a cero en orden numérico (el registro borrado después de R6 es R7, no R9). Ninguna instrucción se ejecuta más de una vez.

 R0 = 0; LLAMADA fn (DB); /* llama a una función, debajo en la etiqueta "fn" */ R1 = 0; /* primer intervalo de retardo */ R2 = 0; /* segundo intervalo de retardo */ /***** discontinuidad aquí (la LLAMADA surte efecto) *****/ R6 = 0; /* el CALL/RTS vuelve aquí, no en "R1 = 0" */ Fin del SALTO (DB); R7 = 0; /* primer intervalo de retardo */ R8 = 0; /* segundo intervalo de retardo */ /***** discontinuidad aquí (el SALTO surte efecto) *****/ /* las siguientes 4 instrucciones se llaman desde arriba, como función "fn" */fn: R3 = 0; estrategia en tiempo real (base de datos); /* regresa al llamante, pasando los intervalos de retardo del llamante */ R4 = 0; /* primer intervalo de retardo */ R5 = 0; /* segundo intervalo de retardo */ /***** discontinuidad aquí (el RTS entra en vigor) *****/final: R9 = 0;

El objetivo de una arquitectura canalizada es completar una instrucción en cada ciclo de reloj. Para mantener este ritmo, el canal debe estar lleno de instrucciones en todo momento. El intervalo de retardo de bifurcación es un efecto secundario de las arquitecturas canalizadas debido al riesgo de bifurcación , es decir, el hecho de que la bifurcación no se resolvería hasta que la instrucción se haya abierto camino a través de la canalización. Un diseño simple insertaría paradas en la tubería después de una instrucción de bifurcación hasta que la nueva dirección de destino de bifurcación se calcule y se cargue en el contador del programa . Cada ciclo en el que se inserta una pérdida se considera un intervalo de retardo de rama. Un diseño más sofisticado ejecutaría instrucciones de programa que no dependieran del resultado de la instrucción de bifurcación. Esta optimización se puede realizar en el software en tiempo de compilación moviendo instrucciones a ranuras de retardo de rama en el flujo de instrucciones en memoria, si el hardware lo admite. Otro efecto secundario es que se necesita un manejo especial al administrar puntos de interrupción en instrucciones, así como al realizar pasos durante la depuración dentro del intervalo de retardo de rama. Una interrupción no puede ocurrir durante un intervalo de retardo de bifurcación y se difiere hasta después del intervalo de retardo de bifurcación. [11] [12] Está prohibido o desaprobado colocar instrucciones de bifurcación en la ranura de retardo de bifurcación. [13] [10] [14]

El número ideal de espacios de retardo de rama en una implementación particular de la tubería está dictado por la cantidad de etapas de la tubería, la presencia de reenvío de registros , en qué etapa de la tubería se calculan las condiciones de la rama, si se utiliza o no un búfer de destino de rama (BTB). y muchos otros factores. Los requisitos de compatibilidad de software dictan que una arquitectura no puede cambiar el número de ranuras de retardo de una generación a la siguiente. Esto inevitablemente requiere que las implementaciones de hardware más nuevas contengan hardware adicional para garantizar que se siga el comportamiento arquitectónico a pesar de que ya no sea relevante.

Ranura de retardo de carga

Una ranura de retardo de carga es una instrucción que se ejecuta inmediatamente después de una carga (de un registro de la memoria) pero no ve ni necesita esperar el resultado de la carga. Los intervalos de retraso de carga son muy poco comunes porque los retrasos de carga son muy impredecibles en el hardware moderno. Una carga puede satisfacerse desde la RAM o desde una caché, y puede verse ralentizada por la contención de recursos. Se observaron retrasos en la carga en los primeros diseños de procesadores RISC. El MIPS I ISA (implementado en los microprocesadores R2000 y R3000 ) sufre este problema.

El siguiente ejemplo es código ensamblador MIPS I y muestra una ranura de retardo de carga y una ranura de retardo de rama.

 lw v0 , 4 ( v1 ) # cargar palabra desde la dirección v1+4 en v0 nop # ranura de retardo de carga desperdiciada jr v0 # saltar a la dirección especificada por v0 nop # ranura de retardo de rama desperdiciada         

Ver también

Referencias

  1. ^ A. Patterson, David; L. Hennessy, John (1990). Arquitectura informática: un enfoque cuantitativo . Editores Morgan Kaufmann. pag. 275.ISBN​ 1-55860-069-8.
  2. ^ DeRosa, John A.; Levy, Henry M. "Una evaluación de arquitecturas de sucursales". pag. 1 . Consultado el 27 de enero de 2024 .
  3. ^ "Manual de hardware SH7020 y SH7021Motor SuperH RISC". pag. 42,70 . Consultado el 17 de diciembre de 2023 .
  4. ^ "Evaluación y programación de la tercera edición de la familia RISC 29K - BORRADOR" (PDF) . pag. 54 . Consultado el 20 de diciembre de 2023 .
  5. ^ "Manual de referencia del programador del microprocesador i860 ™ de 64 bits" (PDF) . pag. 70(5-11) . Consultado el 21 de diciembre de 2023 .
  6. ^ "Manual del usuario del microprocesador RISC MC88100" (PDF) . pag. 81(3-26) . Consultado el 21 de diciembre de 2023 .
  7. ^ "Procesador de señal avanzado μPD77230" (PDF) . pag. 191(4-76) . Consultado el 5 de noviembre de 2023 .
  8. ^ "Conjunto de instrucciones y manual del programador de MIPS-X" (PDF) . pag. 18 . Consultado el 3 de diciembre de 2023 .
  9. ^ "El procesador de señal digital de punto flotante TMS320C30" (PDF) . ti.com. pag. 14 . Consultado el 4 de noviembre de 2023 .
  10. ^ a b "Guía del usuario de TMS320C4x" (PDF) . pag. 171(7-9) . Consultado el 29 de octubre de 2023 .
  11. ^ "Procesador de señal avanzado μPD77230" (PDF) . págs.38(3-39), 70(3-41) . Consultado el 17 de noviembre de 2023 .
  12. ^ "Guía del usuario de TMS320C4x" (PDF) . pag. 75(3-15) . Consultado el 2 de diciembre de 2023 .
  13. ^ "Procesador de señal avanzado μPD77230" (PDF) . pag. 191(4-76) . Consultado el 28 de octubre de 2023 .
  14. ^ "Manual del usuario del microprocesador RISC MC88100" (PDF) . pag. 88(3-33) . Consultado el 30 de diciembre de 2023 .

enlaces externos