Dynamic Execution
Usata per la prima volta nei processori P6 (o di sesta generazione) di Intel, l'esecuzione dinamica consentiva al processore di eseguire più istruzioni in parallelo, in modo da completare le operazioni più rapidamente. La tecnologia è composta da tre elementi principali:
- Branch prediction multipla - predice il flusso del programma attraverso diverse diramazioni
- Analisi Dataflow - stabilisce che le operazioni devono essere eseguite quando sono pronte, indipendentemente dal loro ordine nel programma originale
- Speculative execution - aumenta la velocità di esecuzione "guardando dopo" il contatore del programma ed eseguendo le istruzioni che probabilmente saranno necessarie
Branch Prediction
La branch prediction è una caratteristica presente solo nei processori di fascia alta per mainframe. Permette al processore di mantenere piena la pipeline istruzioni mentre opera a un'elevata velocità. Una speciale unità fetch/decode nel processore usa un algoritmo di branch prediction altamente ottimizzato per predire la direzione e il risultato delle istruzioni eseguite attraverso più livelli di branches, calls e returns. È simile a un giocatore di scacchi che lavora su più strategie in anticipo rispetto a quanto avviene, prevedendo la strategia dell'avversario diverse mosse in futuro. Prevendendo l'istruzione richiesta in anticipo, le istruzioni possono essere eseguite senza attesa.
Analisi Dataflow
L'analisi dataflow studia il flusso di dati nel processore per rilevare qualsiasi opportunità di esecuzione di istruzioni out of order (OOO). Un'unità speciale di dispatch/esecuzione nel processore monitora molte istruzioni e può eseguirle in modo da ottimizzare l'uso delle unità superscalari. L'esecuzione di istruzioni OOO risultante può mantenere le unità occupate persino quando cache miss e altre istruzioni dipendenti dai dati potrebbero frenare tutto.
Speculative Execution
L'esecuzione speculativa è la capacità del processore di eseguire istruzioni in anticipo rispetto al contatore effettivo. L'unità di dispatch/esecuzione del processore usa l'analisi del dataflow per eseguire tutte le istruzioni disponibili nel pool istruzioni e immagazzinare i risultati in registri temporanei. Un'unità di "retirement" poi ricerca nel pool le istruzioni completate che non sono più dipendenti dai dati, nel tentativo di trovare altre istruzioni da eseguire o quelle che hanno branch prediction irrisolte. Se si trova qualcuna di queste istruzioni completate, l'unità di "retirement" impegna i risultati in memoria nell'ordine in cui sono stati emessi in origine. E poi sono ritirati dal pool.
L'esecuzione dinamica rimuove il vincolo e la dipendenza dal sequenziamento lineare dell'istruzione. Promuovendo l'esecuzione OOO dell'istruzione, mantiene l'unità istruction al lavoro piuttosto che aspettare i dati dalla memoria. Anche se le istruzioni si possono prevedere ed eseguite non in ordine, i risultati sono impegnati nella sequenza originale in modo da non interrompere o modificare il flusso del programma. Questo permette al P6 di eseguire il software esistente sull'architettura Intel esattamente come il P5 (Pentium) e i processori precedenti, solo un bel po' più in fretta!