Esecuzione fuori servizio

L' esecuzione dell'ordine ("  esecuzione fuori servizio  " in inglese) serve a riorganizzare l'ordine in cui le istruzioni vengono eseguite nel processore . Queste istruzioni non vengono quindi necessariamente eseguite nell'ordine in cui appaiono nel programma.

Ciò permette di sfruttare al meglio le risorse di un processore e quindi di risparmiare tempo di calcolo rispetto all'esecuzione in order ("  in-order  ") che consiste nell'eseguire le istruzioni nell'ordine previsto dal compilatore. Tuttavia, quest'ultimo consente di ridurre i costi e il consumo di energia semplificando il processore. Questo è ad esempio il caso dei processori Intel Atom (tranne dalla fine del 2013) e parte degli ARM .

Dipendenze dai dati

L'esecuzione fuori ordine impedisce l'inserimento di bolle nella pipeline quando due istruzioni con una dipendenza dai dati vengono caricate nella pipeline. Per dipendenze dai dati, intendiamo che una delle istruzioni leggerà o scriverà allo stesso indirizzo o allo stesso registro in un modo che impone un rigoroso ordine di esecuzione per le nostre istruzioni. Esistono tre tipi di dipendenze dai dati.

Dipendenze dai dati
genere Effetti
Leggi dopo aver scritto La prima istruzione scriverà il suo risultato su un registro o RAM, e poco dopo la seconda leggerà quel risultato ed eseguirà un'operazione su di esso.
Scrivi dopo aver letto La prima istruzione leggerà un registro o il contenuto di un indirizzo nella RAM e la seconda ne scriverà il risultato nello stesso punto poco dopo.
Scrivi dopo Scrivi Le nostre due istruzioni scrivono nello stesso posto: registro o indirizzo di memoria.

Queste dipendenze impongono un certo ordine di esecuzione per le istruzioni. L'ordine di esecuzione delle letture e delle scritture non deve cambiare, altrimenti il ​​risultato del programma potrebbe essere modificato. Tuttavia, su processori dotati di pipeline, è possibile che le letture e le scritture cambino ordine: le letture e le scritture nei registri non vengono eseguite sugli stessi stadi, e quindi un'istruzione può leggere dati non ancora scritti, ecc. Ciò accade quando si eseguono istruzioni a più cicli o quando non è presente una rete di inoltro. In queste condizioni, il processore inserisce le bolle nella pipeline per mantenere l'ordine di letture / scritture come specificato dal programmatore. L'esecuzione fuori servizio consiste nel sostituire queste bolle con le istruzioni che seguono l'istruzione bloccata.

Fuori servizio, fuori servizio

Gli algoritmi di esecuzione fuori ordine più semplici cambiano solo l'ordine in cui vengono eseguite le istruzioni, nonché l'ordine in cui i risultati sono disponibili come output dall'unità di calcolo. Non cambia invece l'ordine di Emissione, di invio delle istruzioni alle unità funzionali: le istruzioni vengono prelevate, decodificate ed emesse nell'ordine imposto dal programma. Esistono due algoritmi di questo tipo: scoreboarding e l'algoritmo di Tomasulo. Tutti i processori che implementano l'esecuzione fuori ordine hanno diverse unità funzionali, come le unità di calcolo.

Scoreboarding

L'algoritmo di scoreboarding utilizza il rilevamento centralizzato e la gestione delle dipendenze: un unico circuito si occupa di rilevare e gestire tutte le dipendenze tra le istruzioni. Questo circuito è chiamato tabellone.

Questo si basa su 4 fasi principali: il risultato, la lettura degli operandi, l'esecuzione e la scrittura dei risultati. Queste 4 fasi della pipeline sono talvolta presenti in altri processori che non gestiscono l'esecuzione fuori servizio. Ma questi non funzionano allo stesso modo nell'algoritmo di scoreboarding.

È il tabellone segnapunti che controlla il passaggio di ogni istruzione da un piano all'altro. Per questo, deve rilevare le dipendenze tra le istruzioni in funzione delle informazioni inviatele dagli altri circuiti del processore. Per fare questo memorizza, per ogni istruzione:

Il tabellone deve inoltre memorizzare lo stato corrente di ciascuna unità funzionale del processore, al fine di rilevare le dipendenze strutturali e alcune dipendenze di lettura dopo scrittura. Pertanto, il tabellone può decidere quando un'istruzione in sospeso nella fase di lettura dell'operando può procedere alla fase di esecuzione nell'unità funzionale che le è stata riservata. Questo tabellone deve quindi memorizzare:

Algoritmo di Tomasulo

L' algoritmo di Tomasulo è un algoritmo di esecuzione in disordine che incorpora tecniche di ridenominazione dei registri per rimuovere le dipendenze non necessarie tra le istruzioni e migliorare l'efficienza dell'esecuzione degli ordini, nonché un bypass per la rete che riduce l'effetto di alcune dipendenze Read After Write sulle prestazioni.

Fuori servizio, fuori servizio

Alcuni algoritmi leggermente più sofisticati sono in grado non solo di eseguire istruzioni fuori ordine, ma anche di emetterle fuori ordine. Questi algoritmi possono essere visti come variazioni del tabellone dei punteggi o dell'algoritmo di Tomasulo, ma a cui è stato aggiunto un circuito: l'istruzione di Windows, chiamata anche Issue Queue. Questo circuito è una memoria buffer, inserita tra lo stadio di uscita e lo stadio precedente (decodifica o ridenominazione dei registri). Questo buffer verrà utilizzato per memorizzare le istruzioni fino a quando non saranno pronte per essere eseguite. Pertanto, se un'istruzione non può essere eseguita, a causa di una dipendenza strutturale o irrisolvibile, non bloccherà il resto della pipeline. Invece, nuove istruzioni possono essere caricate e inviate alle unità di calcolo, se possibile.

Note e riferimenti

  1. "Unità di esecuzione OOO" in onversity.com

Vedi anche

Articoli Correlati