Hueco de retardo

De Wikipedia, la enciclopedia libre

En arquitectura de computadores, un hueco de retardo (Delay Slot en 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 una instrucción de salto en las arquitecturas RISC o DSP; 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 los lenguajes ensambladores reordenar automáticamente las instrucciones, cubriendo de este modo las carencias de algunos compiladores.

Huecos de retardo de salto[editar]

Los huecos de retardo en que se ven involucradas las instrucciones de salto son conocidos como huecos de retardo de salto. Se encuentran principalmente en las arquitecturas DSP y RISC más antiguas. Las arquitecturas MIPS, PA-RISC, ETRAX CRIS, SuperH y SPARC son arquitecturas RISC que tienen un único huecos de retardo de salto; las arquitecturas PowerPC, ARM y la recientemente diseñada DEC Alpha carecen de él. Las arquitecturas de los DSP pueden 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 los riesgos. 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 el contador 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 mediante software en 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 de depuració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.

Hueco de retardo de carga[editar]

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.

  lw   v0,4(v1)   # carga de la palabra almacenada en la dirección v1+4 en el registro v0
  nop             # hueco de retardo de carga
  jr   v0         # salto incondicional a la dirección especificada por el registro v0
  nop             # hueco de retardo de salto

Enlaces externos[editar]