Executarea în afara comenzii

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Schema conceptuală de executare în afara ordinelor. Programul este încărcat ca instrucțiuni seriale, instrucțiunile sunt analizate, reordonate ținând cont de dependențe, executate în paralel și reordonate înainte de a salva datele în memorie.

În informatică, execuția fără comandă indică capacitatea multor procesoare de a executa instrucțiuni individuale fără a respecta neapărat ordinea impusă de programator. Procesorul analizează în esență codul pe care va trebui să îl execute, identifică instrucțiunile care nu sunt legate de alte instrucțiuni și le execută în paralel. Această strategie îmbunătățește performanța microprocesoarelor moderne, deoarece executarea în afara ordinii permite umplerea unităților funcționale ale procesorului care altfel ar rămâne neutilizate.

Arhitectură

Executarea în afara comenzii este o formă limitată de arhitectură a fluxului de date . Într-o arhitectură de flux de date, execuția programului nu este condusă de fluxul de program, ci de disponibilitatea operanzilor de procesat. Într-o arhitectură de flux de date imediat ce sunt disponibili toți operanzii unei instrucțiuni, instrucțiunea este marcată ca executabilă și de îndată ce o unitate de calcul este disponibilă, instrucțiunea este executată. Într-o arhitectură ieșită din ordine, se urmărește același principiu, cu excepția faptului că nu întregul program este analizat în căutarea operațiunilor gata de executare, ci doar o fereastră de execuție. Disponibilitatea operanzilor este analizată în această fereastră și instrucțiunile cu toți operandii disponibili sunt marcați ca executabili. Acest lucru vă permite să extrageți o mare parte din paralelismul de instrucțiuni din cod, păstrând în același timp arhitectura relativ simplă. În teorie, o arhitectură de flux de date ar fi capabilă să extragă un nivel mai înalt de paralelism de nivel de instruire și, prin urmare, să obțină performanțe mai bune, dar complicațiile arhitecturale sunt atât de mari încât abordarea unui sistem generic nu este convenabilă.

Istorie

Executarea în afara comenzii a devenit cunoscută în industrie la sfârșitul anilor 1970 și începutul anilor 1980, când majoritatea cercetărilor pe acest subiect au fost concentrate. Prima cercetare cu o anumită pondere pe acest subiect a fost efectuată de Yale Patt pe simulatorul HPSim. O lucrare de James E. Smith și AR Pleszkun publicată în 1985 a analizat modul de gestionare eficientă a unei excepții în timpul unei execuții în afara comenzii și a permis să stabilească ipotezele teoretice pentru realizarea unei mașini care a implementat acest mod de execuție.

Prima mașină care a funcționat din uz a fost probabil CDC 6600 (1964) care a folosit tabloul de bord pentru rezolvarea conflictelor. Conform terminologiei moderne, scorul de scor nu este într-adevăr o tehnică care permite executarea în afara ordinii, deoarece instrucțiunile sunt blocate la primul conflict RAW (Read After Write). Scorul de punctaj începe executarea instrucțiunilor în ordine, dar poate pune capăt execuției acelora din ordin. Mai puțin de trei ani mai târziu, cu IBM 360/91 (1966) a fost prezentat algoritmul Tomasulo , acest algoritm a permis o execuție completă din funcționare, deoarece instrucțiunile puteau fi finalizate și pornite din funcțiune . IBM a realizat, de asemenea, primul procesor cu execuție defectă, POWER 1 (1990) pentru mașinile RS / 6000 . Odată cu prezentarea de către Intel a Pentium Pro (1995), s-a răspândit execuția din funcționare chiar și pe piața IBM compatibilă. Mai târziu, mulți alți producători au adoptat această tehnologie pentru procesoarele lor, cum ar fi IBM / Motorola pentru PowerPC 601 (1992/1993), Fujitsu / Hal pentru Sparc64 (1995), HP pentru PA-8000 (1996), Tehnologii MIPS pentru MIPS R-10000 (1996), AMD pentru K5 (1996) și Digital Equipment Corporation cu DEC Alpha 21264 (1998). Excepții notabile sunt Sun Microsystems cu procesoare UltraSparc , alianța HP / Intel cu procesoare Itanium și Transmeta cu Crusoe .

Implementare

Detectarea dependențelor între diferite instrucțiuni este o sarcină complexă, deoarece instrucțiunile pot fi restricționate în diferite moduri. De exemplu, dacă aveți o instrucțiune care efectuează o sumă între două registre și atunci rezultatul sumei este utilizat ca operand pentru o diviziune este de la sine înțeles că diviziunea și suma nu pot fi efectuate în paralel fără a genera conflicte. Problema poate fi rezolvată prin replicarea unităților funcționale sau prin executarea în paralel cu instrucțiunea sumă a unei instrucțiuni care nu are dependențe și amânarea diviziunii. În general, aceste unități funcționale decodează instrucțiunile și plasează instrucțiunile care nu au constrângeri (sau care au constrângeri care au fost rezolvate) în tamponul ( stația de rezervare ) care alimentează conductele . După conducte există o unitate ( ROB ) care, folosind etichete legate de instrucțiuni, reconstituie ordinea cronologică a instrucțiunilor lăsând rezultatele instrucțiunilor să iasă din procesor cu ordinea cronologică stabilită de program. De asemenea, această unitate elimină orice operațiune efectuată incorect de procesor. Prezența unităților de predicție a săriturilor implică faptul că procesorul execută deseori instrucțiuni presupunând că procesorul execută (sau nu execută) un anumit salt. Dar, dacă predicția furnizată de unitatea de predicție a saltului se dovedește incorectă, instrucțiunile efectuate incorect trebuie eliminate pentru a păstra funcționarea corectă a programului.

În ianuarie 2018, a fost publicată o vulnerabilitate în implementarea execuției în afara comenzilor de către procesoarele Intel și ARM numite Meltdown .

Dezavantaje

Executarea instrucțiunilor în afara comenzii implică realizarea unor unități suplimentare în interiorul microprocesorului care măresc costurile de dezvoltare și realizare. Complexitatea acestor unități suplimentare depinde în mare măsură de setul de instrucțiuni care trebuie analizat. Unele seturi de instrucțiuni semnalează în mod explicit procesorului care instrucțiuni pot fi executate în afara ordinii și, prin urmare, implementarea executării în afara comenzii este o operație banală, în timp ce alte seturi de instrucțiuni (de exemplu, arhitectura x86 ) nu prevedeau în niciun caz această posibilitate și, prin urmare, realizarea acestor unități necesită numeroase tranzistoare și complică foarte mult arhitectura procesorului. Cu toate acestea, având în vedere costul redus al tranzistoarelor unice și având în vedere cererea de performanțe din ce în ce mai mari, aproape toate procesoarele actuale implementează execuția în afara ordinii.

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT