Ce este execuția în afara ordinii?

Calculatoarele sunt mașini complexe cu nicio parte mai complexă decât CPU. La un nivel de prezentare generală de bază, se pare că procesorul ar trebui să fie relativ simplu. Este nevoie de o serie de comenzi, le procesează și apoi emite datele. Totuși, aceasta seamănă puțin cu funcționarea reală a procesoarelor moderne.

Sub-scalar la super-scalar

Procesoarele timpurii au fost exact așa cum v-ați aștepta. Au luat instrucțiuni individual, în ordinea în care le-au primit, le-au procesat până la finalizare, apoi au trecut la instrucțiunea următoare. CPU-urile de acest tip erau sub-scalare, capabile să completeze mai puțin de o instrucțiune pe ciclu de ceas. Designerii CPU au identificat că au existat multe etape diferite de finalizare a unei instrucțiuni. Fiecare dintre aceste etape a necesitat hardware diferit. Aceasta însemna că atunci când rulați o singură instrucțiune prin întreaga secvență la un moment dat, unele părți ale hardware-ului au rămas inactive. În orice tip de procesor, hardware-ul inactiv este hardware inutil.

Pentru a utiliza acest hardware inactiv, design-urile CPU au fost actualizate pentru a utiliza o abordare pipeline. Acest lucru a separat și mai mult hardware-ul pentru fiecare etapă, dar a permis ca toate să fie utilizate în același timp printr-o serie de instrucțiuni. Deși a fost nevoie de câteva cicluri pentru ca fiecare instrucțiune să treacă prin conductă, debitul total a fost de o instrucțiune pe ciclu. Acest lucru a făcut CPU-urile scalare.

Pentru a putea face mai mult, procesoarele trebuiau făcute super-scalare. Pentru a realiza acest lucru, au fost implementate mai multe conducte paralele.

Menținerea conductelor alimentate cu date

Principala problemă de performanță cu computerele este de obicei latența memoriei. Multe instrucțiuni operează pe date și, astfel, aceste date trebuie să fie disponibile pentru ca instrucțiunea să fie executată. Întrebarea este, ce faci dacă trebuie să aștepți acele date pentru că nu sunt disponibile imediat? În mod tradițional, răspunsul a fost doar să stai și să aștepți să devină disponibil. Acest lucru lasă întreaga conductă goală, potențial pentru sute de cicluri CPU. Lucrurile se înrăutățesc și atunci când două instrucțiuni în conducte paralele trebuie să aștepte memorie, deoarece prima va reține chiar și cererea pentru datele celei de-a doua. Deși memoria cache a CPU poate ajuta la rezolvarea acestei probleme, tot nu o poate rezolva. Era nevoie de o nouă paradigmă pentru a o rezolva. Acea schimbare de paradigmă a fost Out Of Order Execution sau OOO.

Prima etapă a unei conducte este de a decoda instrucțiunea. Aceasta înseamnă să stabiliți ce trebuie făcut și să verificați dacă datele necesare operației sunt disponibile. Într-un procesor OOO, instrucțiunile decodificate sunt adăugate la o coadă. Acestea sunt eliminate din coadă și procesate efectiv atunci când datele de care au nevoie sunt disponibile. În mod critic, nu contează în ce ordine au fost adăugate instrucțiunile la coadă. Dacă o instrucțiune timpurie așteaptă date, o instrucțiune mai recentă poate sări înainte dacă este gata de plecare. Procesoarele OOO pot reordona instrucțiunile pe care ar trebui să le proceseze în funcție de coada de instrucțiuni viitoare și care dintre acestea sunt gata pentru execuție.

Dependențe critice

Acest proces presupune două lucruri. În primul rând, că este posibil să identificăm și să gestionăm în mod fiabil dependențele adevărate. În al doilea rând, puteți gestiona și identifica în mod fiabil dependențele false. Care este diferența? Ei bine, o dependență adevărată este o dependență care nu poate fi deloc atenuată într-un sistem OOO. Cel mai simplu exemplu este citirea după scriere. Dacă aveți o instrucțiune care ar trebui să scrie unele date și alta care ar trebui să citească apoi acele date, nu există nicio modalitate de a putea reordona acele instrucțiuni. Acestea trebuie completate în ordinea în care au fost prezentate, altfel veți obține date prostii.

O dependență falsă este una care poate fi ascunsă cu un alt truc inteligent. Să luăm exemplul scrierii după citire. La prima vedere, ați putea crede că nu puteți suprascrie datele înainte de a le citi. Lucrurile nu sunt însă atât de simple. Ce se întâmplă dacă aveți un alt loc în care puteți scrie noile date și apoi puteți schimba datele noi cu cele vechi după ce datele vechi au fost citite? Acesta este procesul de redenumire a registrului și este esențial pentru procesarea OOO.

De obicei, un set de instrucțiuni definește un număr stabilit de registre arhitecturale care sunt utilizate în sistem. Literal, nu te poți adresa nimănui altora. Dar dacă faci registre de supraprovizionare? Puteți să le ascundeți în cea mai mare parte, să le folosiți pentru a stoca date care nu ar fi trebuit încă procesate și apoi pur și simplu să schimbați etichetele registrelor ascunse și arhitecturale când cronologia este corectă din nou. La un moment dat, există exact cantitatea corectă de registre arhitecturale, pur și simplu nu sunt neapărat întotdeauna în același loc. O analogie din lumea reală ar fi hot-desking-ul.

Concluzie

Execuția Out Of Order este o paradigmă de procesare în care instrucțiunile pot fi reordonate dinamic în timpul execuției de către CPU. Acest lucru se face pe baza celor mai vechi instrucțiuni emise care au date disponibile. Aceasta înseamnă că instrucțiunile care sunt încărcate în conductă sunt întotdeauna gata pentru a fi executate și nu există întârzieri în așteptarea datelor. Desigur, este necesar să existe o coadă suficient de lungă încât să nu fie umplută cu instrucțiuni care așteaptă date, dar aceasta este o provocare de implementare. Execuția OOO se bazează pe redenumirea registrului pentru a ascunde dependențele false. Chiar dacă aceste instrucțiuni sunt de fapt executate în neregulă, registrele sunt redenumite în așa fel încât să ascundă acest fapt de restul computerului.



Cum se clonează un hard disk

Cum se clonează un hard disk

În era digitală modernă, în care datele sunt un bun valoros, clonarea unui hard disk pe Windows poate fi un proces crucial pentru mulți. Acest ghid cuprinzător

Cum să remediați driverul WUDFRd care nu s-a încărcat pe Windows 10?

Cum să remediați driverul WUDFRd care nu s-a încărcat pe Windows 10?

În timpul pornirii computerului, vă confruntați cu mesajul de eroare care spune că driverul WUDFRd nu s-a încărcat pe computer?

Cum să remediați codul de eroare NVIDIA GeForce Experience 0x0003

Cum să remediați codul de eroare NVIDIA GeForce Experience 0x0003

Aveți experiența NVIDIA GeForce cu codul de eroare 0x0003 pe desktop? Dacă da, citiți blogul pentru a afla cum să remediați această eroare rapid și ușor.

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

Cum să eliminați un GPU de pe un computer Windows în 2023

Cum să eliminați un GPU de pe un computer Windows în 2023

Trebuie să eliminați GPU-ul de pe computer? Alăturați-vă pentru a explica cum să eliminați un GPU de pe computer în acest ghid pas cu pas.

Cum se instalează un SSD NVMe pe un desktop și laptop

Cum se instalează un SSD NVMe pe un desktop și laptop

Ați cumpărat un nou SSD NVMe M.2, dar nu știți cum să îl instalez? Citiți mai departe pentru a afla cum să instalați un SSD NVMe pe laptop sau desktop.

Ce este o bombă logică?

Ce este o bombă logică?

O bombă logică este un incident de securitate în care un atacator stabilește o acțiune întârziată. Continuați să citiți pentru a afla mai multe.

Ce este un SoC?

Ce este un SoC?

Dacă v-ați uitat vreodată în interiorul unui turn de PC, puteți vedea că există o mulțime de componente diferite. Laptopul tău obișnuit conține majoritatea componentelor

Ce este criptarea asimetrică?

Ce este criptarea asimetrică?

Algoritmii de criptare asimetrică utilizează două chei distincte. O cheie este folosită pentru criptare, iar cealaltă pentru decriptare.

Steam Deck: Cum se formatează cardul SD

Steam Deck: Cum se formatează cardul SD

Steam Deck vine în trei opțiuni de stocare: eMMC de 64 GB, SSD NVMe de 256 GB și SSD NVMe de 512 GB. În funcție de biblioteca dvs. de jocuri și de dimensiunea jocurilor