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 ...
gshare [McFarling93] • m bit dell’indirizzo BIA sono messi in XOR con il BHSR • Schema molto semplice: 1 BHSR e 1 piccolo PHT • Usato nell’Alpha 21264 BHSR Roberto Giorgi, Universita’ di Siena, C208L05, Slide 11 BIA Di solito sono i bit meno significativi del BIA Inoltre, di solito k == m k m max{k, m} PHT … 2 max{k, m} x j entries Prestazioni di gshare, gselect, GAg Predictor Accuracy (%) 98 96 94 92 90 88 86 84 Grafico da [McFarling93] Roberto Giorgi, Universita’ di Siena, C208L05, Slide 12 prediction 32 64 256 1K 4K 16K 64K Predictor Size(bytes) “global” si riferisce al predittore GAg di Yeh e Patt I benchmark usati sono gli stessi 9 di SPEC-89 usati nei lavori [Yeh92] e [Yeh93] gshare gselect global
Predittori “competitivi” (“Tournament”) • Certi predittori funzionano bene con determinati branch • La prima proposta di usare due predittori competitivi e’ presentata da McFarling [McFarling93] (bimodal+gshare) • Selezionare dinamicamente una predizione fra piu’ predittori • Usare la storia per selezionare un predittore BHT BIA • Esempio: Alpha 21264 Roberto Giorgi, Universita’ di Siena, C208L05, Slide 13 Path History Predictor 1 Predictor 2 M U prediction U X Predictor selection logic • Dimensione totale del predittore pari a 29k bits • A BP = 97.4%(SPEC89 average) 99.9% (SPECfp95 average), 99% (SPECint95 average) Predittore dell’indirizzo di ritorno • Alcuni salti variano l’indirizzo target nello stesso programma • Tali salti sono tipicamente “indirect jumps” • In particolare, fra questi ci sono i salti di ritorno da procedura • Nel caso di SPEC-89 i salti da ritorno da procedura sono l’85% • Predizione delle istruzioni di ritorno da procedura • L’esito e’ facile da predirre: always taken! • Il target non e’ facile da predirre: la stessa procedura puo’ essere invocata da diversi punti di un programma • Il BTB per predirre il target puo’ condurre a misprediction • E’ stato proposto un piccolo stack per mantenere gli indirizzi di ritorno [Kaeli91] • Al momento della chiamata si fa push dell’indirizzo di ritorno in tale stack • Al momento del ritorno basta fare una pop da tale stack • Funziona come una cache dei piu’ recenti indirizzi di ritorno • Se tale stack e’ sufficientemente grande predice tutti i ritorni Roberto Giorgi, Universita’ di Siena, C208L05, Slide 14
- Page 1 and 2: Branch Prediction (parte seconda) C
- Page 3 and 4: Esempio - PowerPC 604 (1) • Micro
- Page 5: Predittori a correlazione: gselect
- Page 9 and 10: Eager Execution [Uht95] • In un g
- Page 11 and 12: Predittore dell’Alpha 21264 [Alph
- Page 13 and 14: Uso del predittore Globale rispetto
- Page 15 and 16: Branch Prediction nel P6 [Shen02]
- Page 17 and 18: P4 - Branch prediction [Boggs03]
- Page 19 and 20: Loop predictor • Cerca di scoprir
Pre<strong>di</strong>ttori “competitivi” (“Tournament”)<br />
• Certi pre<strong>di</strong>ttori funzionano bene con determinati branch<br />
• La prima proposta <strong>di</strong> usare due pre<strong>di</strong>ttori competitivi e’ presentata<br />
da McFarling [McFarling93] (bimodal+gshare)<br />
• Selezionare <strong>di</strong>namicamente una pre<strong>di</strong>zione fra piu’ pre<strong>di</strong>ttori<br />
• Usare la storia per selezionare un pre<strong>di</strong>tt<strong>ore</strong><br />
BHT<br />
BIA<br />
• Esempio: Alpha 2<strong>12</strong>64<br />
Roberto Giorgi, Universita’ <strong>di</strong> Siena, C208L05, Slide 13<br />
Path History<br />
Pre<strong>di</strong>ctor 1<br />
Pre<strong>di</strong>ctor 2<br />
M<br />
U pre<strong>di</strong>ction<br />
U<br />
X<br />
Pre<strong>di</strong>ctor<br />
selection<br />
logic<br />
• Dimensione totale <strong>del</strong> pre<strong>di</strong>tt<strong>ore</strong> pari a 29k bits<br />
• A BP = 97.4%(SPEC89 average)<br />
99.9% (SPECfp95 average), 99% (SPECint95 average)<br />
Pre<strong>di</strong>tt<strong>ore</strong> <strong>del</strong>l’in<strong>di</strong>rizzo <strong>di</strong> ritorno<br />
• Alcuni salti variano l’in<strong>di</strong>rizzo target nello stesso programma<br />
• Tali salti sono tipicamente “in<strong>di</strong>rect jumps”<br />
• In particolare, fra questi ci sono i salti <strong>di</strong> ritorno da procedura<br />
• Nel caso <strong>di</strong> SPEC-89 i salti da ritorno da procedura sono l’85%<br />
• Pre<strong>di</strong>zione <strong>del</strong>le istruzioni <strong>di</strong> ritorno da procedura<br />
• L’esito e’ facile da pre<strong>di</strong>rre: always taken!<br />
• Il target non e’ facile da pre<strong>di</strong>rre: la stessa procedura puo’ essere<br />
invocata da <strong>di</strong>versi punti <strong>di</strong> un programma<br />
• Il BTB per pre<strong>di</strong>rre il target puo’ condurre a mispre<strong>di</strong>ction<br />
• E’ stato proposto un piccolo stack per mantenere gli in<strong>di</strong>rizzi<br />
<strong>di</strong> ritorno [Kaeli91]<br />
• Al momento <strong>del</strong>la chiamata si fa push <strong>del</strong>l’in<strong>di</strong>rizzo <strong>di</strong> ritorno in tale stack<br />
• Al momento <strong>del</strong> ritorno basta fare una pop da tale stack<br />
• Funziona come una cache dei piu’ recenti in<strong>di</strong>rizzi <strong>di</strong> ritorno<br />
• Se tale stack e’ sufficientemente grande pre<strong>di</strong>ce tutti i ritorni<br />
Roberto Giorgi, Universita’ <strong>di</strong> Siena, C208L05, Slide 14