# Ranura de retard

A l'arquitectura d'ordinadors, una ranura de retard és una ranura d'instrucció que s'executa sense els efectes d'una instrucció anterior. La forma més comuna és una única instrucció arbitrària situada immediatament després d'una instrucció de branca en una arquitectura RISC o DSP; aquesta instrucció s'executarà encara que es prengui la branca anterior. Així, per disseny, les instruccions semblen executar-se en un ordre il·lògic o incorrecte. És habitual que els assembladors reordenin automàticament les instruccions per defecte, amagant la incomoditat dels desenvolupadors i compiladors d'assemblatges.

## Ranures de retard de branques

Quan hi ha una instrucció de branca, la ubicació de la següent instrucció de ranura de retard a la canalització es pot anomenar ranura de retard de branca. Les ranures de retard de branca es troben principalment en arquitectures DSP i arquitectures RISC més antigues. MIPS, PA-RISC, ETRAX CRIS, SuperH i SPARC són arquitectures RISC que tenen cadascuna una única ranura de retard de branca; PowerPC, ARM, Alpha i RISC-V no en tenen cap. Les arquitectures DSP que tenen cadascuna una ranura de retard de branca inclouen μPD77230 i el VS DSP. El SHARC DSP i el MIPS-X utilitzen una ranura de retard de doble branca; aquest processador executarà un parell d'instruccions seguint una instrucció de branca abans que la branca tingui efecte. Tant TMS320C3x com TMS320C4x utilitzen una ranura de retard de triple branca.
L'exemple següent mostra ramificacions retardades en llenguatge ensamblador per al DSP SHARC, inclòs un parell després de la instrucció RTS. Els registres R0 a R9 s'esborren a zero en ordre per nombre (el registre esborrat després de R6 és R7, no R9). Cap instrucció s'executa més d'una vegada.
L'objectiu d'una arquitectura canalitzada és completar una instrucció cada cicle de rellotge. Per mantenir aquesta taxa, el gasoducte ha d'estar ple d'instruccions en tot moment. La ranura de retard de branca és un efecte secundari de les arquitectures canalitzades a causa del perill de la branca, és a dir, el fet que la branca no es resoldria fins que la instrucció s'hagi fet camí a través de la canalització. Un disseny senzill inseriria parades a la canalització després d'una instrucció de branca fins que es calcula la nova adreça de destinació de la branca i es carrega al comptador del programa. Cada cicle on s'insereix una parada es considera una ranura de retard de branca. Un disseny més sofisticat executaria instruccions del programa que no depenen del resultat de la instrucció de branca. Aquesta optimització es pot dur a terme al programari en temps de compilació movent les instruccions a les ranures de retard de la branca del flux d'instruccions a la memòria, si el maquinari ho admet. Un altre efecte secundari és que es necessita un maneig especial quan es gestionen els punts d'interrupció a les instruccions, així com quan es fa un pas mentre es depura dins de la ranura de retard de la branca.

## Ranura de retard de càrrega

Una ranura de retard de càrrega és una instrucció que s'executa immediatament després d'una càrrega (d'un registre de la memòria) però no veu, i no cal esperar, el resultat de la càrrega. Les ranures de retard de càrrega són molt poc freqüents perquè els retards de càrrega són molt impredictibles en el maquinari modern. Una càrrega es pot satisfer des de la memòria RAM o des d'una memòria cau, i es pot alentir per la contenció de recursos. Es van observar retards de càrrega en dissenys de processadors RISC molt primerencs. El MIPS I ISA (implementat als microprocessadors R2000 i R3000) pateix aquest problema.

## Referències

* ↑ A.Patterson, David. Computer Archtecture A Quantitative Approach (en anglès). Morgan Kaufmann Publishers, 1990, p. 275. ISBN 1-55860-069-8.
* ↑ «μPD77230 Advanced Signal Processor» (en anglès). [Consulta: 5 novembre 2023].
* ↑ «The TMS320C30 Floating-Point Digital Signal Processor» (en anglès). ti.com. [Consulta: 4 novembre 2023].
* ↑ «TMS320C4x User's Guide» (en anglès). [Consulta: 29 octubre 2023].