Paralelismul la nivel de instrucție ( ILP ) este o măsură a câte operații într-un program de calculator pot fi efectuate simultan. Suprapunerea potențială în execuția instrucțiunii se numește „ paralelism la nivel de instrucțiune ”.
Există două abordări ale extragerii paralelismului la nivel de instruire:
Stratul hardware implementează paralelismul dinamic, în timp ce stratul software implementează paralelismul static. Procesoarele x86 moderne de înaltă performanță ( Intel Pentium 4 , Intel Core ) operează pe o secvență dinamică de execuție paralelă ( Out of Order Execution ). Paralelismul static a fost folosit la procesoarele Itanium (cu toate acestea, Itanium 2 folosește o abordare hibridă).
Luați în considerare următorul program:
Operația 3 depinde de rezultatele operațiunilor 1 și 2, deci nu poate fi evaluată până la finalizarea operațiunilor 1 și 2. Totuși, operațiunile 1 și 2 sunt independente de alte operațiuni, deci pot fi evaluate în același timp. Presupunând că fiecare operație poate fi finalizată într-o unitate de timp, atunci aceste trei instrucțiuni pot fi finalizate în total două unități de timp, oferind paralelism 3/2.
Scopul dezvoltatorilor de compilatoare și procesoare este să identifice paralelismul și să profite la maximum de el. Programele obișnuite sunt de obicei scrise pentru un model de execuție secvențială, în care instrucțiunile sunt executate una după alta în ordinea stabilită de programator. ILP permite compilatorului și/sau procesorului să paralelizeze execuția mai multor instrucțiuni sau chiar să schimbe ordinea în care sunt executate.
Cât de mult ILP este prezent într-un program depinde foarte mult de aplicarea acestuia. În unele domenii, cum ar fi grafica pe computer și calculul științific, numărul poate fi foarte mare. Cu toate acestea, sarcini precum criptografia pot prezenta mult mai puțin paralelism.
Metode hardware pentru detectarea și exploatarea paralelismului:
Arhitecturile de flux sunt o altă clasă de arhitecturi în care ILP-urile sunt specificate în mod explicit, vezi, de exemplu , arhitectura TRIPS.
Primele implementări de mainframe ale ILP, cum ar fi IBM System/360 Model 91 , au folosit tehnici ILP pentru a depăși limitările unui fișier registru relativ mic .
Microprocesoarele au folosit diverse forme de paralelism la nivel de instrucțiuni de la sfârșitul anilor 1980. Un exemplu de primele procesoare superscalare este Intel 960CA (1989 [1] ), IBM Power RS/6000 (1990), DEC Alpha 21064 (1992) [2] . Execuția necorespunzătoare a instrucțiunilor și redenumirea registrelor în microprocesoare au fost implementate pentru prima dată în IBM POWER 1 (1990).
Primul procesor IA-32 cu o conductă a fost Intel 80486 (1989); primul procesor superscalar IA-32 a fost Intel Pentium (1993); primul procesor IA-32 cu executarea necorespunzătoare a comenzilor și redenumirea registrelor - Intel Pentium Pro (1995),
Între 1999 și 2005, AMD și Intel au concurat puternic pentru a produce microprocesoare din ce în ce mai performante pentru piețele de consum și servere. În procesoarele lansate în această perioadă, ambele companii au îmbunătățit în mod activ tehnicile de exploatare a paralelismului la nivel de instrucție. De exemplu, în arhitectura NetBurst , Intel a crescut etapele conductei de calcul, aducând numărul acestora în Pentium 4 Prescott la 31. Ambele companii au crescut frecvența de ceas a procesoarelor (așa-numita „ cursă gigahertz ”), au redus tehnica proces pentru a plasa și mai mulți tranzistori pe substratul procesorului pentru a le utiliza pentru a îmbunătăți în continuare eficiența conductelor superscalare .
Până la sfârșitul anului 2005, a devenit clar că toate aceste căi și metode s-au epuizat de la sine. Legea de scalare a lui Dennard a încetat să funcționeze. La o rată constantă de creștere a numărului de tranzistori , performanța procesoarelor în sine a crescut ușor, dar, în același timp, consumul de energie al procesoarelor și disiparea căldurii lor au crescut , apropiindu-se de limitările sistemelor ieftine de radiatoare ( plafonul de putere , perete de putere [3] [4] ).
De la sfârșitul anului 2005, creșterea vitezei de ceas și a performanței cu un singur thread a încetinit semnificativ [5] [6] [7] și industria microprocesoarelor a început să se îndrepte către utilizarea altor niveluri de paralelism , și anume paralelismul la nivelul nivel de fire și sarcini, implementate în multiprocesare , multi-core și hardware multithreading [8] . Acest lucru, la rândul său, s-a reflectat în abordările de programare [9] .
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină | |||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |