2012-06-30 1 views
9

Desidero sapere come funziona la previsione delle branch del processore Intel i7?Informazioni su Branch Prediction of i7

Correntemente, conosco il predittore chiamato "previsione dinamica del ramo".

Per 1 bit predittore: L'hardware predice sempre un'istruzione di salto a prendere la stessa direzione ha preso l'ultima volta che è stato eseguito.

Una versione raffinata che funziona meglio nella pratica è il predittore a 2 bit. Nell'ordine per migliorare ulteriormente la precisione di previsione, sono stati introdotti schemi di predizione a 2 bit. In questi schemi la previsione deve essere sbagliata due volte prima che venga cambiata.

I7 ha lo stesso predittore di cui sopra?

+4

Posso quasi garantirvi che tutti i dettagli sono segreti di proprietà dell'azienda. – Mysticial

risposta

9

La maggior parte di ciò che sappiamo del predittore di ramo proviene dai test. Intel non ha rilasciato molto in termini di dettagli. La penalità di errore di stima è di circa 18 cicli di clock, quindi è importante la previsione del ramo in modo accurato.

Intel utilizza un predittore di ramo a due livelli. Si ritiene che il livello interno sia invariato rispetto alle CPU Core 2.

Il livello esterno è più sofisticato e può anche prevedere correttamente i loop con i conteggi fisse fino a vengono utilizzati tamponi 64. Due 18-bit globali di storia. Uno contiene tutti i salti che sono stati presi almeno una volta. L'altro contiene i salti più importanti. (Il numero di voci in questi buffer è sconosciuta.)

Nota che salti indiretti e le chiamate hanno un proprio predittore.

6

La risposta breve è no.

Sono ragionevolmente certo non CPU Intel ha utilizzato il predittore di un bit che descrivi.

Il Pentium originale utilizzato un descrittore a due bit, proprio come si descrive. I quattro valori usati erano normalmente descritti come "fortemente non presi", "debolmente non presi", "debolmente presi" e "fortemente presi". Ogni volta che viene preso un ramo, il contatore viene spostato di un punto verso "preso con decisione". Ogni volta che un ramo non viene preso, viene spostato di un punto verso "fortemente non preso". È un contatore di saturazione, quindi se (per esempio) viene preso un ramo quando il contatore è già in "preso con decisione", il contatore semplicemente non cambia. [Dovrei aggiungere: questo è il modo in cui Intel l'ha documentato, e apparentemente l'ha destinato a funzionare - se la memoria serve, Agner Fog e Terje Mathiesen hanno scoperto che funziona davvero in modo un po 'diverso - e, generalmente, non così bene come sarebbe).

A partire dal Pentium/MMX e Pentium Pro, hanno progettato un po 'più sofisticato a due livelli predizione delle diramazioni. Aggiunse una cronologia di ramificazione a 4 bit, che usava per selezionare uno dei 16 contatori a 2 bit. Questo significava che se avevi uno schema (per esempio) preso, preso, non preso, preso, (quindi ripetuto) si sarebbe rapidamente adattato a quello, e prevedere tutti i rami correttamente.

io non sono sicuro circa i dettagli della branch prediction nel i7, ma penso che sia giusto dire che è almeno altrettanto complesse come il Pentium Pro è stato, non è un ritorno all'originale Pentium.

+0

Si prega di notare che i predittori a due bit possono essere saturi (cioè da uno stato a quello successivo, con limiti fortemente assunti o fortemente assenti), OPPURE potrebbero avere un contatore di isteresi, che consente loro di passare da poco a non presi a fortemente preso e da poco preso a fortemente non preso direttamente. –