Ranura de retardo


En la arquitectura de computadoras , una ranura de retardo es una ranura de instrucción que se ejecuta sin los efectos de una instrucción anterior. La forma más común es una sola instrucción arbitraria ubicada inmediatamente después de una instrucción de bifurcación en una arquitectura RISC o DSP ; esta instrucción se ejecutará incluso si se toma la bifurcación 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 de los desarrolladores y compiladores de ensambladores. [ cita requerida ]

Cuando se trata de una instrucción de bifurcación, la ubicación de la siguiente instrucción de ranura de retardo en la canalización puede denominarse ranura de retardo de bifurcación . Las ranuras de retardo de bifurcación se encuentran principalmente en arquitecturas DSP y arquitecturas RISC más antiguas . MIPS , PA-RISC , ETRAX CRIS , SuperH y SPARC son arquitecturas RISC que tienen cada una una única ranura de retardo de rama; PowerPC , ARM , Alpha y RISC-V no tienen ninguno. Las arquitecturas DSP que tienen cada una una sola ranura de retardo de rama incluyen el VS DSP, μPD77230 y TMS320C3x . SHARC DSP y MIPS-X utilizan una ranura de retardo de rama doble; dicho procesador ejecutará un par de instrucciones después de una instrucción de bifurcación antes de que la bifurcación surta efecto. El TMS320C4x utiliza una ranura de retardo de rama triple.

El siguiente ejemplo muestra bifurcaciones 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 por número (el registro borrado después de R6 es R7, no R9). Ninguna instrucción se ejecuta más de una vez.

El objetivo de una arquitectura segmentada es completar una instrucción en cada ciclo de reloj. Para mantener este ritmo, la canalización debe estar llena de instrucciones en todo momento. La ranura 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 canalización después de una instrucción de bifurcación hasta que la nueva dirección de destino de la bifurcación se calcule y cargue en el contador del programa.. Cada ciclo en el que se inserta una parada se considera una ranura de retardo de bifurcación. Un diseño más sofisticado ejecutaría instrucciones de programa que no dependen del resultado de la instrucción de bifurcación. Esta optimización se puede realizar en el software en tiempo de compilación moviendo las instrucciones a las ranuras de retardo de bifurcación en el flujo de instrucciones en memoria, si el hardware lo admite. Otro efecto secundario es que se necesita un manejo especial cuando se administran los puntos de interrupción en las instrucciones, así como también cuando se ejecuta la depuración dentro de la ranura de retraso de bifurcación.

El número ideal de intervalos de demora de ramificación en una implementación de tubería en particular 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 ramificación, ya sea que se use o no un búfer de destino de ramificación (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 requiere inevitablemente que las implementaciones de hardware más nuevas contengan hardware adicional para garantizar que se siga el comportamiento de la arquitectura a pesar de que ya no sea relevante.

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 el resultado de la carga y no necesita esperarlo. Las ranuras de retraso de carga son muy poco comunes porque los retrasos de carga son muy impredecibles en el hardware moderno. Una carga puede ser satisfecha desde la RAM o desde un 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 ) adolece de este problema.