LEZIONE #05 del 12-Mag-2008 (2 ore) - Dipartimento di Ingegneria ...
LEZIONE #05 del 12-Mag-2008 (2 ore) - Dipartimento di Ingegneria ...
LEZIONE #05 del 12-Mag-2008 (2 ore) - Dipartimento di Ingegneria ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Branch Pre<strong>di</strong>ction nel P6 [Shen02]<br />
• Risoluzione <strong>del</strong> branch (taken/not taken)<br />
• E’ effettuata nella JEU (Jump Execution Unit)<br />
• Il BTB pre<strong>di</strong>ce il target non appena la IFU (Instruction Fetch Unit) lo<br />
preleva<br />
• Tutti gli in<strong>di</strong>rizzi sono verificati dal BAC (Branch Address Calculator) o<br />
dalla JEU<br />
• Branch Target Buffer (BTB)<br />
• Opera nei primi sta<strong>di</strong> <strong>del</strong>la pipeline<br />
• Parte dall’in<strong>di</strong>rizzo <strong>del</strong>l’IP (Instruction Pointer) e produce una<br />
pre<strong>di</strong>zione <strong>del</strong>l’esito e <strong>del</strong> target<br />
• L’in<strong>di</strong>rizzo target predetto viene inviato alla IFU per il prelievo<br />
• Aggiornamento <strong>del</strong> BTB<br />
• Il BTB viene aggiornato non appena la JEU risolve il branch<br />
• Questo puo’ essere troppo tar<strong>di</strong> se il branch successivo arriva<br />
nelle istruzioni imme<strong>di</strong>atamente successive<br />
-Il BTB viene pertanto speculaticamente aggiornato al momento <strong>del</strong>la pre<strong>di</strong>zione<br />
Roberto Giorgi, Universita’ <strong>di</strong> Siena, C208L05, Slide 29<br />
P6 - Algoritmo <strong>di</strong> Branch Pre<strong>di</strong>ction<br />
• Basato sullo schema 2-level adaptive [Yeh92]<br />
• Primo livello – storia degli esiti dei branch<br />
• Secondo livello – comportamento <strong>del</strong> branch per un dato pattern <strong>di</strong> storia<br />
• Differenze rispetto a [Yeh92]<br />
- C’e’ una copia speculativa <strong>del</strong> BHT che consente <strong>di</strong> effettuare le pre<strong>di</strong>zioni prima che si<br />
abbia la risoluzione (e l’aggiornamento)<br />
• Per ogni branch…<br />
• Il BTB mantiene k bit <strong>di</strong> storia “reale” (detta BHR ==BHT)<br />
- Taken/Not-taken per gli ultimi N salti<br />
• Il BHT in<strong>di</strong>cizza una tabella <strong>di</strong> 2k elementi <strong>di</strong> stato (Pattern Table – PT ==PHT)<br />
- La FSM relativa e’ il solito contat<strong>ore</strong> a saturazione<br />
• La BTB usa 4-bit <strong>di</strong> pattern table “semilocale” per set<br />
• Ogni elemento ha 4 bit <strong>di</strong> storia<br />
• Quattro branch in un set usano la stessa pattern table<br />
• Aggiornamento speculativo <strong>del</strong> BHR<br />
• Una copia speculativa <strong>del</strong> BHR viene aggiornata con l’attuale pre<strong>di</strong>zione<br />
- Tale copia viene utilizzata nel caso arrivi un branch prima che il precedente sia risolto<br />
• La BHR reale viene aggiornato con l’esito effettivo dopo la risoluzione <strong>del</strong> branch<br />
Roberto Giorgi, Universita’ <strong>di</strong> Siena, C208L05, Slide 30