Hueco de retardo

Enarquitectura de computadores, unhueco de retardo(Delay Sloten inglés) contiene una instrucción que es ejecutada sin tener en cuenta los efectos de la instrucción precedente. La forma más común consiste en una instrucción arbitraria sencilla colocada inmediatamente después de unainstruccióndesaltoen las arquitecturasRISCoDSP; esta instrucción se ejecutará incluso si el salto precedente es efectivo. De este modo las instrucciones parecen ejecutarse de un modo ilógico o incorrecto. Es típico de loslenguajes ensambladoresreordenar automáticamente las instrucciones, cubriendo de este modo las carencias de algunoscompiladores.
Los huecos de retardo en que se ven involucradas las instrucciones de salto son conocidos comohuecos de retardo de salto. Se encuentran principalmente en las arquitecturasDSPyRISCmás antiguas. Las arquitecturasMIPS,PA-RISC,ETRAX CRIS,SuperHySPARCson arquitecturas RISC que tienen un único huecos de retardo de salto; las arquitecturasPowerPC,ARMy la recientemente diseñadaDEC Alphacarecen de él. Las arquitecturas de losDSPpueden ser de hueco único o doble (ejecutan dos instrucciones entre el inicio de la instrucción de salto y su resolución).
El objetivo de la segmentación RISC clásica es mantener los registros de segmentación ocupados en todo momento. El hueco de retardo de salto es un efecto colateral de las arquitecturas segmentadas debido a losriesgos. Un diseño sencillo insertaría burbujas en la segmentación después del salto hasta que la dirección de destino sea computada y cargada en elcontador de programa. Cada ciclo en que se inserta una burbuja es considerado un hueco de retardo de salto. Un diseño más sofisticado ejecutaría las instrucciones del programa no dependientes del resultado de la instrucción de salto. Esta optimización puede ser realizada mediantesoftwareen tiempo de compilación moviendo instrucciones desde memoria al hueco de retardo de salto, siempre y cuando el hardware soporte esta operación. Otro efecto colateral es el especial cuidado que hay que tener con los puntos de ruptura y las ejecuciones línea a línea durante el proceso dedepuración de programas.
El número ideal de huecos de retardo de salto en una determinada implementación segmentada viene dado por el número de etapas de segmentación, la presencia de unidades anticipadoras, la etapa en que se computen las condiciones de salto, si se utiliza o no un buffer de destino de salto, etc. Los requisitos de compatibilidad de software marcan que una arquitectura no puede cambiar el número de huecos de retardo de una generación a la siguiente. Esto requiere inevitablemente que las nuevas implementaciones del hardware contengan componentes a mayores para asegurar que el comportamiento de la arquitectura se mantiene a pesar de no ser ya relevante.
Un hueco de retardo de carga es una instrucción que se ejecuta inmediatamente después de una carga (copia de memoria a registro) pero que no ve el resultado de dicha carga. Estos huecos de retardo son poco comunes porque los retardos por cargas son altamente impredecibles en el hardware actual. Una carga puede ser satisfecha por la RAM por la caché, y puede ser ralentizada por la distribución de recursos. Los retardos por cargas eran propios de los diseños más primitivos de procesadores RISC. El repertorio de instrucciones MIPS1 (utilizado en los procesadores R3000 y anteriores) sufre este problema.
El siguiente código de ejemplo está escrito en ensamblador MIPS1, mostrando tanto un hueco de retardo de carga como de salto.