Cuvânt de instrucțiune foarte lung

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Un procesor de instrucțiuni lung

Cuvântul de instrucțiuni foarte lung este o arhitectură de procesor învechită. A fost dezvoltat pe baza paralelismului educației . Acestea sunt tehnici rudimentare pentru executarea mai multor instrucțiuni în paralel. Primele metode au presupus crearea unităților de procesare de tipul conductei de date , în aceste unități instrucțiunile sunt procesate ca și cum ar fi pe o linie de asamblare.

O îmbunătățire a fost adusă de introducerea mai multor unități de calcul în paralel (mai multe conducte) pentru a obține un microprocesor suprascalar .

O îmbunătățire suplimentară a fost executarea în afara comenzii a instrucțiunilor. Cu acest mod de execuție, instrucțiunile nu sunt executate în ordinea așteptată de programator, ci în ordinea care permite procesorului să le execute în paralel.

Aceste tehnici au un defect fundamental: cresc mult complexitatea microprocesorului. Pentru a efectua operațiunile în paralel, microprocesorul trebuie să verifice în permanență dependențele dintre diferitele instrucțiuni și date pentru a rula corect programele. Există mai multe tipuri de dependențe, de exemplu, este posibil ca o instrucțiune să poată prelucra datele obținute, ca rezultat, dintr-o altă instrucțiune și, prin urmare, aceasta nu ar putea fi executată înainte de cealaltă instrucțiune. Microprocesoarele moderne alocă o mulțime de resurse verificării dependențelor și aranjării instrucțiunilor, astfel încât cât mai multe să poată fi executate în paralel.

Abordarea VLIW încearcă să rezolve problema folosind un alt mod, în loc să verifice dependențele și instrucțiunile executabile în paralel în timpul procesării, acestea sunt lăsate la compilatorul care le determină static și include în instrucțiuni datele de control pentru procesor. Compilatorul asamblează instrucțiunile în blocuri de mai multe instrucțiuni (2 sau mai multe), blocurile individuale sunt primite de procesorul care le decodează și execută instrucțiunile în paralel fără a fi nevoie să verificați dependențele sau orice altceva, deoarece totul a fost deja verificat de către compilator. Acest lucru permite simplificarea procesorului și obținerea microprocesoarelor foarte rapide.

Proiect

Comparație între un procesor tradițional și un procesor VLIW

Într-un procesor suprascalar, numărul unităților de calcul nu este vizibil în setul de instrucțiuni. Fiecare instrucțiune în format binar codifică o singură instrucțiune de executat, care este în mod normal 32-64 biți sau mai puțin.

În schimb, instrucțiunile VLIW sunt grupate în pachete, fiecare dintre ele conținând instrucțiuni mai elementare, specificând pentru fiecare apartenența la o anumită unitate de calcul. De exemplu, un dispozitiv VLIW cu 5 unități de calcul va veni cu pachete (sau instrucțiuni lungi) cu cinci câmpuri, fiecare dintre acestea instruind o unitate de calcul. Evident, instrucțiunile VLIW sunt mult mai lungi decât instrucțiunile clasice: cel puțin 64 de biți, dar sunt adesea de 128 biți sau mai mult.

De la primele arhitecturi s-a realizat că prin adăugarea de unități de calcul la mașini a fost posibil să crească performanța fără a crește excesiv costurile. În CPU-urile superscalare, CPU în sine este cea care, în timpul execuției, decide în mod dinamic ce instrucțiuni să execute în paralel. în procesoarele VLIW, compilatorul este cel care, în faza de traducere, decide ce instrucțiuni trebuie executate în paralel.

Într-o declarație VLIW, depinde de compilator să detecteze dependențele dintre instrucțiuni și să le asambleze în grupuri optimizate. O dependență tipică este, de exemplu, atunci când o instrucțiune de asamblare X trebuie să proceseze rezultatul unei alte instrucțiuni Y. În această circumstanță, cele două nu pot fi executate în paralel. Compilatorul VLIW detectează această dependență și implementează politici de rezolvare a conflictelor. O politică viabilă ar putea fi anticiparea unor instrucțiuni independente. Când acest lucru nu este fezabil, compilatorul introduce un NOP care stabilește unitatea de calcul. Absența logicii care implementează programarea dinamică reduce semnificativ complexitatea, costul și consumul de energie al procesorului.

O altă problemă apare dacă rezultatul unei instrucțiuni este utilizat pentru a defini dacă trebuie să ieșiți dintr-o buclă sau nu. Multe procesoare moderne aleg o cale în avans, astfel încât datele corespunzătoare să poată fi încărcate. Unele procesoare au o unitate de predicție a ramurilor care efectuează analize de cod pentru a prezice cea mai probabilă ramură. Aceste metode sporesc complexitatea proiectului și corup filozofia originală a arhitecturilor RISC, deoarece CPU trebuie să conțină și electronica care, în cazul unei erori în predicție, elimină instrucțiunile de execuție și elimină orice modificări deja efectuate (anulați) .

Într-o arhitectură VLIW, compilatorul folosește euristică sau profiluri pentru a stabili în avans cea mai probabilă ramură. Având compilatorul mult mai mult timp CPU și capacitatea de a analiza tot codul și nu doar câteva instrucțiuni, predicțiile sale ar trebui teoretic să fie mai exacte decât CPU care funcționează în timp real. Compilatorul dezvoltă codul inserând instrucțiunile relative la ramura cel mai probabil aleasă în cascadă în cod și codifică algoritmul necesar pentru a anula dacă predicția nu este corectă. Trebuie remarcat faptul că microprocesoarele de înaltă performanță cu unități de predicție de ramură de ultimă generație oferă adesea predicții de ramuri care sunt similare dacă nu superioare celor furnizate statistic de compilatoare. Acest lucru se datorează faptului că, deși unitatea de predicție trebuie să își efectueze analizele în fracțiuni de nanosecundă, este de asemenea adevărat că unitatea are informații în timp real despre starea procesorului și aceste informații dirijează predicțiile îmbunătățind acuratețea acestora.

fundal

De la sfârșitul anilor șaizeci , au fost efectuate studii pentru a crea sisteme de calcul care să permită programatorului să încarce mai multe instrucțiuni în paralel într-o unitate de calcul. Melliar-Smith în 1969 într-un articol publicat de AFIPS FJCC a propus un sistem VLIW primitiv. În anii șaptezeci, alte lucrări au condus la îmbunătățirea acestei idei și au dus la crearea de unități precum CDC Advanced Flexible Processor . Cu toate acestea, aceste unități au necesitat o programare la nivel scăzut a unităților funcționale pentru a profita de capacitatea de a executa instrucțiuni multiple în paralel cu sistemul, aceasta a fost o mare limitare deoarece programarea paralelă la nivelul instrucțiunilor este extrem de dificilă și obositoare, doar câteva programe exploatate în mod eficient.potențialul sistemelor. La începutul anilor optzeci existau multe lucrări care vizau studiul procesoarelor generice cu arhitectură de tip VLIS. În 1981, James H. Pomerene pentru IBM a depus un brevet asupra unui sistem de procesare paralel care executa mai multe instrucțiuni independente colectate în grupuri. [1] În același an, Bob Rau a publicat o lucrare privind proiectul Arhitectură policiclică privind dezvoltarea unui sistem VLIW. În 1983, Josh Fisher a prezentat proiectul ELI-512 pe un sistem VLIW. Fisher și-a dezvoltat arhitectura VLIW în timp ce era lector la Universitatea Yale . Fisher a dezvoltat tehnicile utilizate de compilatori pentru a profita de arhitectura VLIW. Ideea inovatoare a lui Fisher a fost să încerce să facă codul paralel fără a se limita la analiza blocurilor elementare de cod (blocuri de cod secvențiale), ci că a fost necesar să se extindă analiza la întregul program sau la o mare parte a acestuia. În acest scop, el a dezvoltat programarea urmelor, o tehnică de analiză a codului care a extins analiza la zone de cod supuse salturilor condiționate. Compilatorul a încercat să prezică rezultatele salturilor condiționale și a compilat codul în consecință, compilatorul a introdus, de asemenea, cod care, în caz de predicție greșită, a eliminat instrucțiunile greșite. Acest lucru a permis compilatorului să scaneze porțiuni mari de cod pentru instrucțiuni de executat în paralel și astfel a îmbunătățit performanța procesorului.

A doua idee inovatoare a lui Fisher a fost să dezvoltăm împreună compilatorul și procesorul. Ambele au făcut parte din proiectul general și, prin urmare, au trebuit să împartă munca, deoarece un microprocesor prea complex ar fi fost foarte lent, dar ar fi necesitat un compilator simplu, în schimb un microprocesor prea simplu ar fi necesitat un compilator prea complex pentru a programa am avut oricum performanțe dezamăgitoare.în timp ce potențial aveam un microprocesor foarte rapid. Fisher a dezvoltat unele structuri hardware, cum ar fi conducte de autodrenare, registre multiport mari și o anumită arhitectură de memorie pentru a simplifica sarcina pentru compilator.

Primul compilator VLIW a fost dezvoltat de John Ellis în timpul tezei sale de doctorat, îndrumat de Fisher. [2]

Implementări

În 1984, Fisher a părăsit Yale pentru a înființa compania Multiflow pe care a fondat-o împreună cu John O'Donnell și John Ruttenberg. Compania a produs seria TRACE de mini-calculatoare bazate pe arhitectura VLIW. Primul sistem a fost lansat în 1988 și era capabil să ruleze 28 de operații în paralel pe instrucțiune. Sistemele TRACE au implementat un amestec de componente MSI / LSI / VLSI la bord, deoarece din motive tehnologice acest lucru a fost mai ieftin decât integrarea tuturor componentelor într-un singur IC. Compania nu a reușit să vândă multe sisteme, deoarece creșterea continuă a electronice a permis companiilor care produc microprocesoare „clasice” să țină pasul cu soluțiile VLIW în multe domenii; cu toate acestea, celelalte companii au recunoscut valoarea tehnologică a ideii, de fapt Multiflow a reușit să vândă multe brevete.

În aceeași perioadă (optzeci) a fost fondată Cydrome , o companie creată pentru a dezvolta procesoare VLIW cu tehnologie ECL . Această companie precum Multiflow a părăsit piața după câțiva ani, compania a fost fondată de David Yen, Wei Yen și Bob Rau unul dintre pionierii arhitecturii VLIW.

Unul dintre licențiații tehnologiei Multiflow a fost Hewlett-Packard , la care Fisher s-a alăturat și după sfârșitul Multiflow. În 1988 Bob Rau s-a alăturat companiei după falimentul Cydrome, HP a achiziționat și proprietatea intelectuală de la Cydrome. Cei doi designeri au lucrat pentru companie de-a lungul anilor nouăzeci .

La HP, cei doi cercetători au investigat cum să eficientizeze procesoarele PA-RISC ale companiei. Au descoperit că proiectarea procesorului ar putea fi mult simplificată prin eliminarea procesului de atribuire a instrucțiunilor unităților logice de la procesor și transferarea sarcinii către compilator. Compilatoarele din anii 1990 au fost mult mai complexe decât cele utilizate în anii 1980 și, prin urmare, complexitatea suplimentară a fost neglijabilă.

Cercetările efectuate de Rau și Fisher la HP au condus ulterior la dezvoltarea procesoarelor Itanium în colaborare cu Intel .

Procesoarele VLIW au găsit o aplicație largă pe piața încorporată , familiile TriMedia ale NXP Semiconductors , SHARC DSP Analog Devices , familia C6000 a Texas Instruments și familia ST200 STMicroelectronics sunt soluții VLIW.

Probleme

Principala problemă cu această arhitectură este dependența extremă a programelor de compilator. Un program optimizat pentru ca un procesor VLIW să funcționeze eficient la următoarea generație de microprocesoare trebuie aproape întotdeauna recompilat. Acest lucru face problematic pentru un utilizator să schimbe computerul, deoarece chiar și parcul său software ar trebui să fie adaptat la noul procesor, cu excepția cazului în care programele sunt scrise cu un limbaj precum Java care, bazându-se pe un strat software suplimentar (mașină virtuală) pentru executarea codul de octeți generat de compilator, poate fi adaptat la mașină în timpul execuției. O altă strategie este utilizarea unui strat software care interpretează vechiul cod și îl adaptează la noul procesor, dar în acest caz există o deteriorare a performanței, care poate fi, de asemenea, foarte marcată. Această strategie este utilizată de exemplu de procesorul Transmeta Efficeon care interpretează codul standard Intel X86 și îl traduce intern în cod VLIW pentru procesor.

Evoluții

Arhitectura VLIW are, fără îndoială, multe avantaje, dar problemele sale fac problematică utilizarea sa în procesoarele de calculator. Necesitatea recompilării codului pentru fiecare generație de procesoare, în special, intră în conflict cu necesitatea ca utilizatorii să poată întreține parcul software. Pentru a elimina aceste probleme, mai multe companii au dezvoltat evoluții ale arhitecturii VLIW, printre diversele evoluții cea mai faimoasă fiind arhitectura EPIC dezvoltată de Intel și HP în comun. Arhitectura EPIC (calcul paralel cu instrucțiuni în mod explicit) grupează instrucțiunile elementare în cuvinte precum o arhitectură clasică VLIW și, de asemenea, introduce informații despre paralelismul dintre diferitele cuvinte. În acest fel, diferitele generații de procesoare își pot varia intern arhitectura fără prea multe probleme. Informațiile despre paralelism permit realizarea unităților de decodare care exploatează paralelismul în mod eficient, dar sunt în același timp simple, deoarece analiza codului paralel și a subdiviziunii sale a fost efectuată de către compilator.

O altă arhitectură care poate fi considerată o evoluție a arhitecturii VLIW este arhitectura TRIPS . Această arhitectură spre deosebire de arhitecturile anterioare necesită și o modificare radicală a setului de instrucțiuni , de fapt această arhitectură folosește un nou set de instrucțiuni numit Explicit Data Graph Execution (EDGE). Acest set de instrucțiuni tratează instrucțiunile ca elemente care primesc date, le procesează și le trimit către alte instrucțiuni. Deci, diferitele instrucțiuni sunt legate de datele pe care le procesează. EDGE colectează în esență instrucțiunile care procesează aceleași date în bucăți și le trimit procesorului. Fiecare bloc de instrucțiuni este legat de celelalte blocuri printr-un grafic de dependență generat de compilator. Acest set de instrucțiuni permite procesorului să fie dezvoltat cât mai multe unități de calcul care primesc blocuri de date și le procesează în paralel, unitățile de calcul individuale la sfârșitul procesării unui bloc pot schimba informații, dacă este necesar. Acest lucru permite creșterea considerabilă a numărului de operații efectuate în paralel de către un singur procesor. Cu toate acestea, această arhitectură este în prezent (2009) un proiect de cercetare și nu este sigur că va deveni un produs comercial.

Notă

  1. ^ SUA 4.295.193 1981
  2. ^ Premiul ACM 1985 pentru disertație doctorală , la awards.acm.org , ACM . Adus la 15 octombrie 2007 (arhivat din original la 2 aprilie 2008) .
    „Pentru disertația sa Bulldog: A Compiler for VLIW Architecture .” .

Elemente conexe

linkuri externe

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