Superscalar

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 12 decembrie 2020; verificarea necesită 1 editare .

Procesor superscalar ( eng.  procesor superscalar ) - un procesor care suportă așa-numitul paralelism la nivel de instrucțiuni (adică un procesor capabil să execute mai multe instrucțiuni simultan) datorită includerii mai multor noduri funcționale identice (cum ar fi ALU , FPU , multiplicator ) în său de calculmiezul multiplicator întreg ), comutator ( decalator întreg ) și alte dispozitive). Programarea execuției fluxului de instrucțiuni se face dinamic de către nucleul de calcul (nu static de către compilator ).

Modalități de îmbunătățire a performanței care pot fi utilizate împreună:

Când utilizați o conductă, numărul de noduri rămâne același; creșterea performanței se realizează datorită funcționării simultane a nodurilor responsabile pentru diferite etape de procesare a instrucțiunilor unui fir . Când se utilizează superscalar, creșterea performanței este atinsă datorită funcționării simultane a unui număr mai mare de noduri identice care procesează independent instrucțiunile dintr-un fir (inclusiv mai multe conducte). Când se utilizează mai multe nuclee, fiecare nucleu execută instrucțiunile unui fir separat și fiecare dintre ele poate fi superscalar și/sau pipeline. Când utilizați mai multe procesoare, fiecare procesor poate fi multi-core.

Într-un procesor superscalar, o instrucțiune este preluată din fluxul de instrucțiuni (în memorie), este determinată prezența sau absența dependenței de date a unei instrucțiuni de alte instrucțiuni și apoi instrucțiunea este executată. În același timp, pe parcursul unui ciclu, pot fi executate mai multe instrucțiuni independente.

Conform clasificării lui Flynn, procesoarele superscalare cu un singur nucleu sunt clasificate ca procesoare SISD ( streamul de instrucțiuni în limba engleză  , flux de date unic - un flux  de instrucțiuni, un flux de date). Procesoarele similare care acceptă instrucțiuni pentru lucrul cu vectori scurti pot fi referite la grupul SIMD ( flux de instrucțiuni în limba engleză  , fluxuri de date multiple -  un flux de instrucțiuni, mai multe fluxuri de date). Procesoarele superscalare multi - core aparțin grupului MIMD ( de  exemplu , mai multe fluxuri de instrucțiuni, mai multe fluxuri de date  - mai multe fluxuri de instrucțiuni, mai multe fluxuri de date).

Istorie

Primul computer superscalar din lume a fost CDC 6600 (1964) dezvoltat de Seymour Cray [1] . În URSS , computerul Elbrus , care a fost dezvoltat în 1973-1979 la ITMiVT , a fost considerat primul computer superscalar . Principala diferență structurală dintre Elbrus și CDC 6600 (cu excepția unui sistem de instrucțiuni complet diferit, vizibil pentru programator - tipul de stivă ) a fost că toate nodurile din acesta erau canalizate, ca în microprocesoarele superscalare moderne . Pe baza acestui fapt, B. A. Babayan a declarat prioritatea calculatoarelor sovietice în materie de construire a calculatoarelor superscalare, dar mașina de control cu ​​date , CDC 7600 ( în engleză ), care urmează deja CDC 6600, a fost creată în 1969, cu 4 ani înainte de începerea dezvoltare „ Elbrus ”, a avut o transportoare de actuatoare. În plus, puțin mai devreme (în 1967), IBM a lansat mașina IBM 360/91 , care folosește execuția necorespunzătoare , redenumirea registrului și pipeliningul actuatoarelor [2] .

Primele  microprocesoare superscalare comerciale cu un singur cip au fost microprocesorul MC88100 de la Motorola din 1988 , microprocesorul Intel i960CA din 1989 și microprocesorul AMD 29000 seria 29050 din 1990 . Primul microprocesor superscalar disponibil comercial a fost i960 , lansat în 1988. În anii 1990, Intel a devenit principalul producător de microprocesoare superscalare.

Toate procesoarele de uz general dezvoltate începând cu aproximativ 1998, cu excepția celor utilizate în dispozitivele de putere redusă , sistemele încorporate și dispozitivele alimentate cu baterii , sunt superscalare.

Procesoarele Pentium cu microarhitectură P5 au fost primele procesoare superscalare x86 . Microprocesoarele Nx586 , P6 Pentium Pro și AMD K5 au fost primele procesoare superscalare care au convertit instrucțiunile x86 în cod intern pe care l-au executat apoi.

Descriere

Dacă în timpul funcționării procesorului mai multe instrucțiuni procesate de conductă sunt independente , atunci nucleul le poate executa simultan. În sistemele superscalare, decizia de a lansa o instrucțiune pentru execuție este luată de nucleul procesorului însuși, care necesită o mulțime de resurse. În sistemele ulterioare, precum Elbrus -3 și Itanium , se utilizează planificarea statistică, adică compilatorul decide ce instrucțiuni să execute în același timp ; compilatorul găsește instrucțiuni independente și le combină într-o singură instrucțiune lungă ( arhitectura VLIW ).

Nodul procesor superscalar, numit dispecer de instrucțiuni  ( ID ), este responsabil pentru:

ID-ul nodului trebuie să distribuie instrucțiuni între noduri, astfel încât nodurile să ruleze fără timp de nefuncționare. Primele procesoare superscalare aveau două ALU și câte un FPU fiecare . Procesoarele moderne conțin mai multe noduri. De exemplu, procesorul PowerPC 970 conține patru ALU, două FPU și două noduri SIMD . Dacă ID-ul nodului nu își face treaba (nu încarcă toate nodurile), performanța procesorului superscalar nu va fi mai bună decât performanța procesorului scalar .

Un procesor superscalar este de obicei capabil să execute mai mult de o instrucțiune pe ciclu de ceas . În același timp, capacitatea de a procesa mai multe instrucțiuni în același timp nu face arhitectura superscală, deoarece simultaneitatea poate fi obținută prin alte metode: folosind o conductă , folosind mai multe nuclee și / sau folosind mai multe procesoare .

Implementări

Procesoare care acceptă superscalar:

Arhitectură Prima implementare An Dezvoltator Alți dezvoltatori de computere superscalare pe această arhitectură Notă
CDC6600 CDC6600 1964 Control Data Corporation Conducta de execuție a comenzii, mai multe unități de execuție (dar nu canalizate).
CDC7600 CDC7600 1969 Control Data Corporation Conducte complete - atât executarea comenzilor, cât și actuatoarele în sine.
IBM System/360 Model 91 IBM 360/91 1967 IBM Canalizare completă cu redenumire dinamică a registrului, execuție necorespunzătoare a instrucțiunilor și predicție de ramuri
Elbrus Elbrus -1 1979 ITMiVT
i960 i960 1988 Intel
Am29000 Am29050 1990 AMD
SPARC SuperSPARC 1992 Microsisteme solare Fujitsu , MCST
m88k , m68k MC88110 , MC68060 1992 Motorola
x86 Pentium 1993 Intel AMD , VIA
MIPS R8000 1994 Tehnologii MIPS Toshiba
BRAŢ Cortex A8 BRAŢ

Accelerarea calculelor

Calculatoarele superscalare folosesc o serie de metode pentru a accelera calculele care sunt în primul rând caracteristice pentru ele, dar astfel de tehnici pot fi utilizate în alte tipuri de arhitecturi:

De asemenea, sunt utilizate tehnici generale de creștere a productivității, care sunt utilizate și în alte tipuri de computere:

Procesoare scalare și superscalare

Când execută o instrucțiune, procesorul scalar procesează unul sau două numere ( scalari ). Când execută o instrucțiune, procesorul vectorial procesează mai multe numere ( vector ). Când mai multe instrucțiuni sunt executate în același timp, procesorul superscalar procesează simultan mai multe numere (mai mulți scalari).

Restricții

Creșterea performanței procesoarelor superscalare este limitată de următorii factori:

  1. gradul de paralelism intern al instrucțiunilor;
  2. complexitatea găsirii dependențelor între instrucțiuni și timpul petrecut cu această căutare; complexitatea schemei de redenumire a registrului și timpul petrecut cu redenumirea;
  3. procesarea instrucțiunilor de ramură.

Posibilitatea executării simultane a instrucțiunilor depinde de gradul de paralelism intern al instrucțiunilor - de cât de mult depind unele instrucțiuni de altele. O instrucțiune depinde de o altă instrucțiune dacă folosește resurse care sunt folosite și de o altă instrucțiune sau dacă folosește rezultatul unei alte instrucțiuni. Execuția simultană este posibilă în cazurile în care instrucțiunile programului sunt independente unele de altele. De exemplu, instrucțiunea " a = b + c" și instrucțiunea " d = e + f" pot fi executate în același timp, deoarece rezultatul calculului unuia dintre ele nu depinde de rezultatul calculului celuilalt. Instrucțiunea „ a = b + c” și instrucțiunea „ b = e + f” sunt interdependente și nu pot fi executate în același timp, deoarece rezultatul executării lor depinde de care dintre ele este executată prima.

Odată cu creșterea numărului de instrucțiuni executate simultan, timpul petrecut pentru verificarea interdependențelor lor crește rapid, iar aceste costuri nu trebuie să depășească un ciclu de ceas. Timpul este petrecut rulând porțile logice care implementează circuitul de testare și transferând date între porți. Nu este posibil să se reducă întârzierile nici măcar prin schimbarea procesului tehnologic . Disiparea puterii , complexitatea circuitului și întârzierile semnalului la porți nu permit creșterea numărului de instrucțiuni transmise simultan peste opt.

Vezi și

Note

  1. Clasificarea manipulatorului . Parallel.ru - Centrul de Informare și Analitică pentru Calcul Paralel:. Consultat la 16 august 2009. Arhivat din original la 26 februarie 2012.
  2. Consultați http://domino.research.ibm.com/tchjr/journalindex.nsf/ResVolumes!OpenView&Start=1&Count=1000&Expand=42.1#42.1 .

Literatură