Esecuzione fuori ordine: differenze tra le versioni

m
Bot: Aggiungo: fr:Exécution out-of-order; modifiche estetiche
m (→‎Storia: Coerenza dei tempi verbali)
m (Bot: Aggiungo: fr:Exécution out-of-order; modifiche estetiche)
[[ImmagineFile:Schema generale processore superscalare.png|thumb|right|300px|Schema concettuale dell'esecuzione fuori ordine. Il programma viene caricato come istruzioni seriali, le istruzioni vengono analizzate, riordinate tenendo conto delle dipendenze, eseguite in parallelo, ed riordinate prima di provvedere al salvataggio dei dati in memoria.]]
In informatica l''''esecuzione fuori ordine''' indica la capacità di molti [[microprocessore|processori]] di eseguire le singole istruzioni senza rispettare necessariamente l'ordine imposto dal programmatore. Il processore in sostanza analizza il codice che dovrà eseguire, individua le istruzioni che non sono vincolate da altre istruzioni e le esegue in parallelo con il codice principale. Questa strategia permette di migliorare le prestazioni dei moderni microprocessori dato che l'esecuzione fuori ordine permette di riempire unità funzionali del processore che altrimenti rimarrebbero inutilizzate.
 
La rilevazione delle dipendenza tra le varie istruzioni è un compito complesso dato che le istruzioni possono essere vincolate in vari modi. Per esempio se si ha un'istruzione che esegue una somma tra due registri e poi il risultato della somma viene utilizzato come operando per una divisione va da se che la divisione e la somma non possono essere eseguite in parallelo senza generare conflitti. Il problema può essere risolto replicando delle unità funzionali oppure eseguendo in parallelo all'istruzione di somma un'istruzione che non ha dipendenze e rimandando la divisione. In generale queste unità funzionali decodificano le istruzioni e pongono le istruzioni che non hanno vincoli (o che hanno vincoli che sono stati risolti) entro buffer ([[reservation station]]) che alimenta le [[pipeline dati|pipeline]]. Dopo le pipeline vi è un'unita ([[Buffer di riordino|ROB]]) che utilizzando delle etichette collegate alle istruzioni ricostruisce l'ordine cronologico delle istruzioni facendo uscire dal processore i risultati delle istruzioni con l'ordine cronologico impostato dal programma. Questa unità inoltre provvede ad eliminare le eventuali operazioni eseguite erroneamente dal processore. La presenza di unità di predizione dei salti implica che il processore spesso esegua delle istruzioni presupponendo che il processore esegua ( o non esegua) un certo salto. Ma, se la previsione fornita dall'[[Predizione delle diramazioni|unità di predizione dei salti]] si dovesse dimostrare non corretta le istruzioni eseguite erroneamente vanno eliminate per preservare il corretto funzionamento del programma.
 
== Svantaggi ==
L'esecuzione di istruzioni fuori ordine implica la realizzazione di alcune unità aggiuntive all'interno del microprocessore che ne innalzano i costi di sviluppo e di realizzazione. La complessità di queste unità aggiuntive dipende molto dal set di istruzioni da analizzare. Alcuni set di istruzioni segnalano esplicitamente al processore quali istruzioni possono essere eseguite fuori ordine e quindi l'implementazione dell'esecuzione fuori ordine è un'operazione banale mentre altri set di istruzioni ([[architettura x86]] per esempio) non prevedevano minimamente questa possibilità e quindi la realizzazione di queste unità richiede molti transistor e complica di molto l'architettura del processore. Comunque visto il basso costo dei singoli transistor e vista la richiesta di prestazioni sempre più elevate quasi tutti i processori attuali implementano l'esecuzione fuori ordine.
 
[[en:Out-of-order execution]]
[[es:Ejecución fuera de orden]]
[[fr:Exécution out-of-order]]
[[ja:アウト・オブ・オーダー実行]]
[[ko:비순차적 명령어 처리]]
8 576

contributi