07.06.2013 Views

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 ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Eager Execution [Uht95]<br />

• In un gruppo <strong>di</strong> 4 istruzioni e’ possibile che tutte e 4<br />

siano branch<br />

• Si deve far ricorso ad un BTB a 4 porte<br />

(similmente al pre<strong>di</strong>tt<strong>ore</strong> multiplo <strong>di</strong> Yeh)<br />

• Eager Execution<br />

• Si eseguono sia il ramo taken che quello not-taken senza pre<strong>di</strong>zioni<br />

- Il fetch avviene da entrambi i rami taken e not-taken<br />

- Nel lavoro <strong>di</strong> Uht il fetch viene limitato a 6 ramificazioni<br />

- Vengono via via buttati i rami sbagliatai nel momento in cui i branch sono risolti<br />

- Naturalmente viene buttato parecchio lavoro… ma e’ veloce!<br />

• Disjoint Eager Execution<br />

- In questo caso si considera la brench pre<strong>di</strong>ction mentre si fa il fetch<br />

- Si prelevano solo istruzioni dai rami predetti, fino a 6 ramificazioni<br />

- Se il ramo e’ sbagliato, semplicemente si fa ripartire la pipeline<br />

Roberto Giorgi, Universita’ <strong>di</strong> Siena, C208L05, Slide 17<br />

Trace Cache<br />

• Cattura sequenze <strong>di</strong> basic-blocks (tracce <strong>di</strong>naniche) in una cache che<br />

sostituisce la cache istruzioni<br />

• Tale cache e’ in<strong>di</strong>cizzata dal target <strong>di</strong> un salto<br />

• Gli elementi <strong>di</strong> tale cache sono asssemblati <strong>di</strong>namicamente mentre il programma esegue le<br />

sue istruzioni<br />

• Se c’e’ hit nella trace cache<br />

• Le istruzioni vengono prelevate dalla trace cache<br />

• La sequenza prelevata tipicamente contiene piu’ basic-block<br />

(ovvero una sequenza <strong>di</strong> piu’ taken branch)<br />

• Si elimina la necessita’ <strong>di</strong> fare il fetch <strong>di</strong> piu’ target<br />

• Inoltre la cache non deve essere con piu’ porte<br />

Quando il co<strong>di</strong>ce viene eseguito<br />

la prima volta: si registra la<br />

sequenza nella trace cache<br />

Roberto Giorgi, Universita’ <strong>di</strong> Siena, C208L05, Slide 18<br />

B1<br />

B2 B3<br />

B4<br />

B1 B3 B4<br />

va nella trace cache<br />

B1<br />

B3<br />

B4<br />

La volta successiva si<br />

legge la sequenza dalla<br />

trace cache: non c’e’<br />

bisogno <strong>di</strong> pre<strong>di</strong>rla !

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!