Differenza tra esecuzione in ordine e fuori servizio sulla CPU

Differenza tra esecuzione in ordine e fuori servizio sulla CPU

Il primo processore con esecuzione fuori ordine era l'IBM POWER 1, che sarebbe stato la base per i processori RISC con lo stesso nome e per i PowerPC. Intel ha adottato questa tecnologia per l'x86 nel suo Pentium Pro. Da allora tutte le CPU per PC utilizzano la tecnologia fuori servizio come una delle basi per ottenere le massime prestazioni possibili.

La preoccupazione principale nella progettazione dei processori spesso non è quella di ottenere la massima potenza, ma le migliori prestazioni durante l'esecuzione delle istruzioni. Comprendiamo le prestazioni come il fatto di avvicinarsi all'ideale teorico del funzionamento di un processore. È inutile avere il più potente CPU se, a causa delle limitazioni, l'unica cosa che ha è il potenziale per essere e non lo è.

Due modi per affrontare il parallelismo

Limite TLP ILP IPC

Esistono due modi per trattare il parallelismo nel codice di un programma: parallelismo a livello di thread o ILP e parallelismo didattico o TLP.

Nel TLP, il codice è suddiviso in più sottoprogrammi, che sono indipendenti dagli altri e funzionano in modo asincrono, ciò significa che ognuno di essi non dipende dal codice del resto. Quando siamo in un processore TLP, la chiave è che se si verifica un'interruzione di esecuzione per qualche motivo, il processore TLP prende un altro dei thread di esecuzione e mette quello inattivo in attesa.

I processori ILP sono diversi, il loro parallelismo è a livello di istruzione e quindi nello stesso thread di esecuzione, quindi non possono barare mettendo il thread principale in attesa. Al giorno d'oggi, le CPU combinano i due tipi di esecuzione, ma l'ILP è ancora un'esclusiva delle CPU ed è qui che ottengono un grande vantaggio in termini di codice seriale rispetto al codice completamente parallelizzabile.

Ley Amdahl

Non possiamo dimenticare che secondo la legge di Amdahl, un codice è composto da parti in serie, che possono essere eseguite da un solo processore, e in parallelo, che possono essere eseguite da più processori. Tuttavia, non tutto può essere parallelizzato e ci sono parti seriali del codice che richiedono un'operazione seriale.

Negli ultimi 15 anni è stato sviluppato il concetto in cui vengono eseguiti algoritmi paralleli su GPU, i cui core sono di tipo TLP, mentre il codice seriale viene eseguito su CPU di tipo ILP.

Esecuzione in ordine delle istruzioni

Ciclo Istruzione Unidad Control

L'esecuzione in ordine è la classica esecuzione dell'istruzione, il suo nome è dovuto al fatto che le istruzioni vengono eseguite nell'ordine in cui appaiono nel codice e l'istruzione successiva non può continuare finché quella precedente non è stata risolta.

La difficoltà maggiore dell'esecuzione in ordine risiede nelle istruzioni condizionali e di salto, poiché verranno eseguite quando si verifica la condizione, rallentando notevolmente la velocità di esecuzione del codice. Questo è un problema enorme quando il numero di stadi in un processore è estremamente alto, che è ciò che accade quando una CPU funziona a velocità di clock elevate.

La trappola per ottenere velocità di clock elevate è segmentare la risoluzione delle istruzioni al massimo con un gran numero di sottofasi del ciclo di istruzione. Quando si verifica un salto o una condizione errata, viene perso un numero considerevole di cicli di istruzione.

Fuori servizio, accelerando l'ILP

GELID-supporto-ritenzione-cpu-AM4

Fuori servizio o esecuzione fuori servizio è il modo in cui le CPU più avanzate eseguono il codice e si pensa di evitare che l'esecuzione si interrompa. Come indica il nome, consiste nell'eseguire le istruzioni di un processore in un ordine diverso da quelli indicati nel codice.

Il motivo per cui ciò viene fatto è perché ogni tipo di istruzione ha un tipo di unità di esecuzione assegnata. A seconda del tipo di istruzione, la CPU utilizza un tipo di unità di esecuzione o un'altra, ma queste sono limitate. Questo può causare un arresto nell'esecuzione, quindi quello che si fa è far avanzare l'istruzione successiva nella sua esecuzione, puntando in una memoria o registro interno che è il vero ordine delle istruzioni, una volta che sono state eseguite vengono rimandate indietro l'ordine originale in cui erano nel codice.

L'utilizzo di out-of-order consente di espandere il numero medio di istruzioni risolte per ciclo e avvicinarlo all'ideale di prestazione. Ad esempio, il primo Intel Pentium aveva un'esecuzione in ordine ed era una CPU in grado di funzionare con due istruzioni contro il 486 che poteva funzionare solo con una, ma nonostante ciò le sue prestazioni dovute agli stop erano solo del 40% in più.

Fasi aggiuntive per fuori servizio

Fuori servizio

L'implementazione dell'esecuzione fuori ordine aggiunge ulteriori fasi al ciclo di istruzione, di cui abbiamo già parlato nell'articolo intitolato Questo è il modo in cui la tua CPU esegue le istruzioni fornite dal software, che puoi trovare in HardZone.

Infatti solo la parte centrale dell'esecuzione dell'istruzione varia rispetto all'esecuzione in ordine, queste modifiche avvengono prima della fase di esecuzione, quindi le prime due che vengono recuperate e decodificate non vengono influenzate, ma due nuove fasi sono aggiunto, che si verificano prima e dopo l'esecuzione delle istruzioni.

La prima fase sono le stazioni di standby, in cui l'hardware attende che le unità di esecuzione siano libere. La sua implementazione è complessa, poiché si basa su un meccanismo che non solo controlla quando un'unità di esecuzione è libera, ma conta anche la durata media in cicli di clock di ciascuna istruzione che viene eseguita per sapere come deve riordinare le istruzioni.

La seconda fase è il buffer di riordino, che ha il compito di ordinare le istruzioni in ordine di output. Tieni presente che per velocizzare l'output delle istruzioni nell'esecuzione fuori ordine, vengono eseguiti tutti i rami di istruzione speculativa nel codice. L'istruzione speculativa è quella che viene data quando c'è un salto condizionale indipendentemente dal fatto che la condizione sia soddisfatta o meno. Quindi è in questa fase che i rami di esecuzione non confermati vengono scartati.