Cosè lesecuzione fuori servizio?

I computer sono macchine complesse con nessuna parte più complessa della CPU. A livello di panoramica di base, sembra che la CPU dovrebbe essere relativamente semplice. Prende una serie di comandi, li elabora e quindi emette i dati. Tuttavia, questo ha poca somiglianza con il funzionamento effettivo delle moderne CPU.

Da sub-scalare a super-scalare

Le prime CPU erano esattamente come ti aspetteresti. Hanno preso le istruzioni individualmente, nell'ordine in cui sono state date loro, le hanno elaborate fino al completamento, quindi sono passate all'istruzione successiva. Le CPU di questo tipo erano sub-scalari, in grado di completare meno di un'istruzione per ciclo di clock. I progettisti di CPU hanno identificato che c'erano molte fasi diverse per il completamento di un'istruzione. Ognuna di queste fasi richiedeva hardware diverso. Ciò significava che durante l'esecuzione di una singola istruzione attraverso l'intera sequenza alla volta, alcune parti dell'hardware rimanevano inattive. In qualsiasi tipo di processore, l'hardware inattivo è hardware inutile.

Per utilizzare questo hardware inattivo, i progetti della CPU sono stati aggiornati per utilizzare un approccio a pipeline. Ciò ha ulteriormente separato l'hardware per ogni fase, ma ha consentito a tutti di essere utilizzati contemporaneamente da una serie di istruzioni. Sebbene ci volessero ancora alcuni cicli per ogni istruzione per passare attraverso la pipeline, il throughput complessivo era di un'istruzione per ciclo. Ciò ha reso le CPU scalari.

Per poter fare di più, i processori dovevano essere resi super-scalari. Per raggiungere questo obiettivo, sono state implementate più pipeline parallele.

Mantenere le pipeline alimentate con i dati

Il principale problema di prestazioni con i computer è in genere la latenza della memoria. Molte istruzioni operano sui dati e quindi i dati devono essere disponibili per l'esecuzione dell'istruzione. La domanda è: cosa fai se devi aspettare quei dati perché non sono immediatamente disponibili? Tradizionalmente, la risposta era solo quella di temporeggiare e aspettare che diventasse disponibile. Ciò lascia l'intera pipeline vuota, potenzialmente per centinaia di cicli della CPU. Le cose peggiorano ulteriormente quando due istruzioni in pipeline parallele devono attendere la memoria, poiché la prima sosterrà anche la richiesta dei dati della seconda. Sebbene la memoria cache della CPU possa aiutare a risolvere questo problema, non è ancora in grado di risolverlo. Era necessario un nuovo paradigma per risolverlo. Quel cambio di paradigma era Out Of Order Execution o OOO.

La prima fase di una pipeline consiste nel decodificare l'istruzione. Ciò significa elaborare ciò che deve essere fatto e verificare che i dati necessari per l'operazione siano disponibili. In una CPU OOO, le istruzioni decodificate vengono aggiunte a una coda. Vengono rimossi dalla coda ed effettivamente elaborati solo quando i dati di cui hanno bisogno sono disponibili. Fondamentalmente, non importa in quale ordine le istruzioni sono state aggiunte alla coda. Se un'istruzione precedente è in attesa di dati, un'istruzione più recente può andare avanti se è pronta per essere eseguita. I processori OOO possono riordinare le istruzioni che dovrebbero elaborare in base alla coda delle istruzioni imminenti e quali di queste sono pronte per l'esecuzione.

Dipendenze critiche

Questo processo presuppone due cose. Prima di tutto, che è possibile identificare e gestire in modo affidabile le vere dipendenze. In secondo luogo, è possibile gestire e identificare in modo affidabile le false dipendenze. Qual è la differenza? Bene, una vera dipendenza è una dipendenza che non può essere mitigata affatto in un sistema OOO. L'esempio più semplice è il read-after-write. Se hai un'istruzione che dovrebbe scrivere alcuni dati e un'altra che dovrebbe poi leggere quei dati, non c'è modo di poter riordinare quelle istruzioni. Devono essere completati nell'ordine in cui sono stati presentati, altrimenti otterrai dati senza senso.

Una falsa dipendenza è quella che può essere nascosta con un altro trucco intelligente. Prendiamo l'esempio di scrittura dopo lettura. A prima vista, potresti pensare di non poter sovrascrivere i dati prima di averli letti. Le cose però non sono così semplici. Cosa succede se hai un altro posto in cui puoi scrivere i nuovi dati, e poi puoi semplicemente scambiare i nuovi e vecchi dati una volta che i vecchi dati sono stati letti? Questo è il processo di ridenominazione dei registri ed è fondamentale per l'elaborazione OOO.

In genere, un set di istruzioni definisce un determinato numero di registri architetturali utilizzati nel sistema. Non puoi letteralmente rivolgerti a nessun altro. Ma cosa succede se esegui l'overprovisioning dei registri? Puoi semplicemente nasconderli per la maggior parte, usarli per archiviare dati che non avrebbero dovuto essere ancora elaborati e quindi scambiare semplicemente le etichette dei registri nascosto e architetturale quando la sequenza temporale è di nuovo corretta. In ogni momento, c'è l'esatto numero di registri architettonici, solo che non sono necessariamente sempre nello stesso posto. Un'analogia nel mondo reale sarebbe l'hot desking.

Conclusione

L'esecuzione Out Of Order è un paradigma di elaborazione in cui le istruzioni possono essere riordinate dinamicamente al momento dell'esecuzione dalla CPU. Questo viene fatto sulla base delle prime istruzioni emesse che hanno dati disponibili. Ciò significa che le istruzioni caricate nella pipeline sono sempre pronte per essere eseguite e non ci sono ritardi nell'attesa dei dati. Naturalmente, è necessario disporre di una coda sufficientemente lunga da non riempirsi di istruzioni in attesa di dati, ma questa è una sfida di implementazione. L'esecuzione di OOO si basa sulla ridenominazione dei registri per nascondere false dipendenze. Anche se queste istruzioni vengono effettivamente eseguite in modo non corretto, i registri vengono rinominati in modo tale da nascondere questo fatto al resto del computer.



Come clonare un disco rigido

Come clonare un disco rigido

Nell'era digitale moderna, in cui i dati sono una risorsa preziosa, la clonazione di un disco rigido su Windows può essere un processo cruciale per molti. Questa guida completa

Come risolvere il problema con il caricamento del driver WUDFRd su Windows 10?

Come risolvere il problema con il caricamento del driver WUDFRd su Windows 10?

Stai riscontrando il messaggio di errore durante l'avvio del computer che dice che il driver WUDFRd non è stato caricato sul tuo computer?

Come risolvere il codice di errore NVIDIA GeForce Experience 0x0003

Come risolvere il codice di errore NVIDIA GeForce Experience 0x0003

Hai riscontrato l'esperienza NVIDIA GeForce con il codice di errore 0x0003 sul tuo desktop? Se sì, leggi il blog per scoprire come correggere questo errore in modo semplice e veloce.

How to Use Auto Clicker for Chromebook

How to Use Auto Clicker for Chromebook

Today, were going to delve into a tool that can automate repetitive clicking tasks on your Chromebook: the Auto Clicker. This tool can save you time and

Come rimuovere una GPU da un PC Windows nel 2023

Come rimuovere una GPU da un PC Windows nel 2023

Devi rimuovere la GPU dal tuo PC? Unisciti a me mentre ti spiego come rimuovere una GPU dal tuo PC in questa guida dettagliata.

Come installare ununità SSD NVMe su desktop e laptop

Come installare ununità SSD NVMe su desktop e laptop

Hai acquistato un nuovo SSD NVMe M.2 ma non sai come installarlo? Continua a leggere per sapere come installare un'unità SSD NVMe su laptop o desktop.

Cosè una bomba logica?

Cosè una bomba logica?

Una bomba logica è un incidente di sicurezza in cui un utente malintenzionato organizza un'azione ritardata. Continua a leggere per scoprire di più.

Che cosè Stuxnet?

Che cosè Stuxnet?

Stuxnet era un worm autopropagante. È stato il primo utilizzo di un'arma informatica e la prima istanza di malware.

Cosè un hacker etico?

Cosè un hacker etico?

Un hacker etico è un hacker che agisce entro i limiti della legge. Continua a leggere per saperne di più sull'argomento.

Che cosè la crittografia simmetrica?

Che cosè la crittografia simmetrica?

Ci sono molte parti diverse della crittografia. Se vuoi crittografare alcuni dati, ci sono due tipi di algoritmi che puoi usare: symmetric