Ce este Superscalar?

Un procesor superscalar poate executa independent mai multe instrucțiuni simultan în timpul unui singur ciclu de ceas. Include resurse de execuție redundante, cum ar fi mai multe unități în virgulă mobilă, unități logice aritmetice și schimbătoare de numere întregi. Acest tip de procesor este proiectat pentru calcul paralel și execuție speculativă fără a fi nevoie de software special. Poate îmbunătăți viteza de execuție a multor aplicații care necesită mult procesor prin manipularea și rearanjarea codului. Este folosit frecvent în mai multe clase de computere, inclusiv servere, desktop-uri și chiar laptop-uri.

Deși unele aspecte ale arhitecturii au fost folosite în procesoare încă din anii 1960, adevăratele procesoare superscalare nu au fost lansate decât mult mai târziu. Unele procesoare RISC (Reduced Instruction Set Computing) vândute la sfârșitul anilor 1980 și începutul anilor 1990 erau superscalare. Miezurile lor simple și instrucțiunile cu lungime fixă ​​au făcut trimiterea și programarea instrucțiunilor paralele relativ ușoare. Multe procesoare non-RISC fabricate de la sfârșitul anilor 1990 au și arhitecturi superscalare. Procesoarele încorporate, cu consum redus și alte procesoare de specialitate sunt adesea excepții, optimizând alte aspecte ale designului lor în loc de execuția paralelă.

Unele procesoare pot partaja o singură conductă cu instrucțiuni din mai multe fire de execuție, cunoscute sub numele de super-threading. Când o unitate funcțională este inactivă deoarece așteaptă firul de execuție curent, poate executa o instrucțiune dintr-un alt fir între timp. Această tehnică ajută la utilizarea pe deplin a procesorului, dar nu este la fel de eficientă precum simultaneous multithreading (SMT). Un singur procesor superscalar poate executa mai multe instrucțiuni din mai multe fire în același timp folosind SMT. Executarea simultană a firelor de execuție poate concura pentru resursele de sistem și procesor, totuși, ceea ce poate încetini sistemul.

Procesoarele cu conducte în mai multe etape pot executa mai multe instrucțiuni simultan, atâta timp cât se află în etape diferite de execuție. În schimb, mai multe instrucțiuni se pot executa în aceeași etapă în același timp într-un procesor superscalar. Deși există multe asemănări între acest tip de procesor și un procesor multi-core, acestea nu sunt la fel. Un procesor multi-core conține mai multe procesoare complete, numite nuclee, într-un singur dispozitiv. Fiecare nucleu al unui procesor multi-core este de obicei superscalar și poate include mai multe conducte paralele.

O caracteristică cheie a unui procesor superscalar este capacitatea sa de a executa codul programului din motive de eficiență. Pentru a face acest lucru, trebuie să fie conștient de dependențele oricărei instrucțiuni de alta. Dacă o instrucțiune afectează rezultatele sau folosește resursele altuia, este foarte probabil ca cele două să nu fie executate în paralel. Există tehnici pentru a elimina unele tipuri de dependențe, dar altele trebuie să întârzie procesarea până când resursele sunt disponibile.

Execuția neregulată trebuie, de asemenea, să poată garanta conținutul adecvat al registrelor, steagurilor și altor resurse dacă are loc o întrerupere a sistemului. În acest caz, starea sistemului trebuie să arate la fel, ca și cum codul ar fi fost executat secvențial așa cum a fost proiectat. O altă considerație este câte instrucțiuni ar trebui să examineze procesorul pentru a găsi oportunități de execuție paralelă. Cu cât numărul este mai mare, cu atât execuția poate fi mai eficientă. Aceasta include, de asemenea, execuția speculativă a instrucțiunilor de pe cealaltă parte a fiecărei ramuri din codul examinat.