Branch delay slot
# Branch delay slot

Nell'architettura dei microprocessori la branch delay instruction è l'istruzione immediatamente successiva ad una condizione di salto condizionato che viene eseguita indipendentemente dal fatto che il salto vada eseguito oppure no. Nelle classiche architetture pipeline la posizione di questa istruzione è definita branch delay slot. La Branch delay slot è presente in molte architetture RISC come l'architettura MIPS, SPARC, PA RISC e in diversi DSP come il µPD77230 e il TMS320C3x.

L'obiettivo dell'architettura RISC è mantenere sempre piena la pipeline in modo da massimizzare il numero di istruzioni eseguite dal processore. Il branch delay slot è un effetto indesiderato della pipeline, che non può sapere se un'istruzione di salto sia eseguita fino a quando l'istruzione di salto non sia stata realmente valutata. La pipeline deve decidere come gestire le istruzioni successive al salto che attraversano la pipeline. Un modello semplice per risolvere il problema dei salti è introdurre degli stalli nella pipeline quando si valuta un salto in modo da poter eseguire l'istruzione corretta. Una soluzione migliore ma più complessa prevede che il processore esegua delle istruzioni non dipendenti dal salto mentre il salto viene valutato. Questa ottimizzazione può essere realizzata dal compilatore che segnala le istruzioni indipendenti al processore. Un altro effetto indesiderato lo si ha durante l'esecuzione dei debug dato che le istruzioni eseguite dal processore non coincidono con le istruzioni realmente eseguite dalla pipeline.

Il numero di branch delay slot dipende dalla particolare implementazione della pipeline. Il numero di stadi presenti, la presenza di forwarding e di altre ottimizzazioni del flusso delle pipeline aumentano il numero di branch delay slot.

Con l'esecuzione della predizione delle diramazioni e dell'esecuzione speculativa molti degli slot presenti nelle pipeline sono utilizzati in modo efficiente riducendo le penalizzazioni dovute alle istruzioni di salto.

