Branch target predictor
# Branch target predictor

Nell'architettura dei microprocessori la branch target predictor è un'unità funzionale dedicata alla predizione dell'indirizzo di arrivo di una diramazione condizionata o di un salto non condizionato prima che l'istruzione sia stata caricata dalla cache istruzioni. La cache istruzioni è una cache specializzata.

La branch target predictor non va confusa con l'unita di predizione delle diramazioni dato che questa unità cerca di predire se la diramazione varra seguita o no.

In molti processori paralleli la cache istruzioni ha una latenza relativamente elevata e quindi l'individuazione dell'indirizzo di arrivo del salto rappresenta un collo di bottiglia. Il procedimento per la sua individuazione esegue le seguenti operazioni:

* La cache istruzioni fornisce un blocco di istruzioni
* Il blocco di istruzioni viene analizzato alla ricerca delle diramazioni
* L'unità di predizione delle diramazioni individua il primo salto che dovrebbe essere eseguito
* Viene calcolato l'indirizzo di arrivo del salto
* Vengono caricate le istruzioni a partire da quell'indirizzo

In molti processori queste operazioni richiedono due cicli di clock e quindi il processore perde un ciclo di clock completo per caricare le nuove istruzioni dopo ogni salto predetto. Dato che mediamente un salto predetto è presente ogni dieci istruzioni eseguite la perdita di prestazioni può essere significativa. Alcuni processori hanno una latenza elevata della cache istruzioni e quindi il degrado delle prestazioni è ancora più elevato. Per ridurre la perdita di prestazione molti processori includono un'unità di branch target predictor, dato l'indirizzo del salto questa unità predice la destinazione del salto. Un miglioramento dell'idea predice l'inizio delle istruzioni sequenziali a partire dall'indirizzo del precedente blocco di istruzioni sequenziali.

La predizione riduce le operazioni da eseguire che diventano:

* Hash dell'indirizzo della prima istruzione sequenziale
* Caricamento dal predittore dell'indirizzo dei salti presenti nel blocco di istruzioni in esecuzione
* Selezione dell'indirizzo di arrivo del primo salto predetto

Il predittore occupa circa il 5-10% dello spazio della cache istruzioni ma il caricamento delle istruzioni dopo il salto viene velocizzato notevolmente. Se non fosse sufficientemente veloce si potrebbe parallelizzare la predizione degli indirizzi dei salti e la predizione dei salti.

La percentuale di predizione di un salto si aggira intorno al 93% di successi.

