Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/
februarie 2000
Am întîlnit de mai multe ori un banc pe Internet, care spunea că, dacă mașinile ar fi evoluat în aceeași măsură cu calculatoarele, acum ar fi mers 120 de kilometri cu benzina dintr-o brichetă, și ar fi costat cît o pîine. (Un contra-banc, din partea industriei automobilistice, ofensate, zicea apoi că, dacă ar fi evoluat la fel, mașina ar fi refuzat să mai meargă de cîteva ori pe zi, și ar fi trebuit să o duci înapoi în garaj ca să repornească.)
Adevărul este că progresele făcute de tehnologia calculatoarelor sunt absolut uluitoare; ajunge să îți cumperi un calculator nou după doi ani ca să fii impresionat de cîștigul de performanță înregistrat. Cîștigul de performanță se datorează unor procesoare din ce în ce mai sofisticate și mai rapide, și unor memorii de capacități din ce în ce mai mari.
Răspunzătoare pentru creșterea exponențială a performanței sunt însă în cea mai mare măsură microprocesoarele. În acest articol vom arunca o privire asupra evoluției microprocesoarelor de la origini pînă în prezent. Vom încerca apoi să caracterizăm arhitecturile procesoarelor contemporane, și să extrapolăm din datele la dispoziție, speculînd despre unele din posibilele evoluții viitoare.
Trebuie să atrag de la început atenția că nu am însușiri paranormale, și ca atare nu sunt profet. Domeniul tehnologiilor de calcul este extraordinar de volatil, și se mișcă cu o viteză fantastică; orice previziune este cel puțin hazardată. De altfel în figura 1 ilustrează acest fapt contrapunînd previziunile din urmă cu cîțiva ani ale unei organizații extrem de prestigioase, Semiconductor Industry Association (SIA, http://www.semichips.org/), cu realitatea. Deci nu vă așteptați de la mine la mai mult.
Am mai publicat în PC Report o serie întreagă de articole despre arhitectura procesoarelor moderne, pe care le voie cita ocazional; toate acestea sunt disponibile din pagina mea de web. Articolul de față va fi însă mai superficial. Există o cantitate enormă de informație pe web. În acest articol am folosit în mod repetat informații de la http://bwrc.eecs.berkeley.edu/CIC/, CPU Info Center.
Un istoric interesant al diferitelor idei arhitecturale din microprocesoare puteți găsi pe web la http://bwrc.eecs.berkeley.edu/CIC/archive/cpu_history.html.
Primul microprocesor a fost creat de firma Intel în 1971. Numele său era Intel 4004, și era un procesor pe 4 biți. Apariția primului micorprocesor a fost un pas cu uriașe consecințe în evoluția ulterioară a sistemelor de calcul. Diferența între microprocesor și metodele îndeobște folosite era că procesorul strînge pe o singură pilulă de siliciu toate unitățile funcționale importante necesare executării programelor; fiind toate strîns integrate, comunicația între ele este rapidă și eficace, permițînd dintr-o dată un salt calitativ.
Nu mai puțin importantă este reducerea de cost care urmează unei astfel de integrări. Cu siguranță că principalul motiv al evoluției explozive a tehnologiei circuitelor integrate nu este de natură tehnologică, ci economică: spirala prețurilor din ce în ce mai scăzute face echipamentele de calcul din ce în ce mai accesibile, cererea crește, ducînd la venituri mai ridicate pentru fabricanți, care investesc mai mult în cercetare/dezvoltare și linii tehnologice, obținînd densități mai mari, permițînd integrarea mai multor circuite, și costuri și mai joase. Cu toată scăderea de preț, veniturile globale ale industriei semiconductoarelor au crescut în mod galopant: numai anul trecut vînzările globale au fost de 149 de miliarde de dolari!
Esențial pentru a menține această spirală este faptul că echipamentele de calcul măresc enorm productivitatea muncii, direct sau indirect: de aici cererea crescîndă. Iar experții afirmă că acesta este doar începutul, și că în viitor fiecare individ va depinde de zeci de dispozitive de calcul în fiecare clipă. Nu suntem prea departe de acest punct: chiar în ziua de azi, o mașină modernă are în medie 15 microprocesoare, care controlează, reglează și diagnostichează tot felul de parametri, de la injecție pînă la frîne.
Nu pot să mă abțin să remarc că Statele Unite ale Americii atribuie o treime din creșterea venitului național brut în anul trecut doar tehnologiilor informaționale, care însă ocupă doar 8% din forța de muncă. În foarte mare măsură, tehnologia informației este responsabilă pentru fenomenala dezvoltare economică pe care Statele Unite o traversează în acești ani.
Să lăsăm acum deoparte economia, și să aruncăm o privire asupra evoluției unor parametri ai procesoarelor de-a lungul timpului. Tabela 1 arată evoluția generațiilor succesive ale celei mai proeminente familii de procesoare, ale firmei Intel:
|
Ultima coloană din tabela 1 și figura 1 arată care este impactul miniaturizării: această coloană indică dimensiunea de bază (feature size), care poate fi văzută ca fiind dimensiunea unui tranzistor. Orice reducere a acestei valori are un impact cuadratic, pentru că suprafața crește cu pătratul laturii. O reducere de la 2 microni la 1,5 (50%) m'are'ste deci suprafa'ta efectivă cu 77% (4/2,25 = 1,77).
Din fericire, reducerea dimensiunilor mai are încă o consecință foarte importantă: traseele pe care trebuie să le parcurgă curentul electric între dispozitive devin mai scurte, deci se pot parcurge mai rapid. Proiectanții pot face deci procesorul să funcționeze cu un ceas mai rapid1. Evoluția frecvenței ceasurilor se vede în coloana a treia. La ora apariției acestui articol procesoarele pentru PCuri la frecvențe de 1 gigahertz vor fi o realitate foarte apropiată2.
Faptul că avem siliciu la dispoziție pentru a implementa mai mulți tranzistori înseamnă că:
Evoluția procesoarelor cunoaște cîteva salturi calitative: cînd miniaturizarea făcea posibilă integrarea unui nou dispozitiv pe același circuit integrat, se realiza un salt de performanță. Astfel, au fost integrate succesiv: unități din ce în ce mai mari de procesare (8, 16, 32, acum 64 de biți), coprocesoare aritmetice, unități de management al memoriei, cacheuri de nivel 1 și chiar 2;
Împreună aceste trei fenomene (viteza ceasului, integrarea pe o singură pastilă și exploatarea paralelismului) contribuie la creșterea performanței totale a procesoarelor. Așa cum am povestit și cu alte ocazii, măsurarea performanței unui calculator se face evaluînd sistemul pe mai multe programe (deci performanța depinde foarte mult și de compilatorul folosit), care de obicei fac parte din suite de teste standardizate (benchmark suites). Cele mai folosite pentru a evalua procesoare sunt cele din seria SPEC: Standard Performance Evaluation Corporation (http://www.specbench.org). Nu ne vor interesa acum prea tare ce reprezintă numerele acestea; cert e că cu cît sunt mai mari, cu atît e mai bine. Graficul din figura 2 arată evoluția performanței procesoarelor în ultimii 10 ani, în termeni SPEC.
Evoluția urmărește aproximativ o curbă exponențială: în fiecare an performanța crește cu 60%.
Așa cum am ilustrat în seria mea de articole intitulate ``arhitectura avansată a procesoarelor'', o mulțime de inovații tehnologice au fost introduse una după alta în arhitecturi; de fapt intenționez să continui această serie și în viitor, pentru că mai sunt de prezentate și alte mecanisme importante.
Îmi permit să expun în continuare viziunea profesorului John Hennessy, de la universitatea Stanford, așa cum a expus-o în prelegerea pe care a dat-o ca invitat la Federated Computer Research Conferences în mai 1999.
Hennessy vede două tehnologii arhitecturale ca fiind esențiale: exploatarea paralelismului la nivel de instrucțiune (Instruction Level Parallelism, ILP) și ierarhii sofisticate de memorie (cache-uri). Să spunem cîteva cuvinte despre fiecare:
Paralelismul la nivel de instrucțiune constă în independența instrucțiunilor din programe una de alta, ceea ce ne permite să executăm mai multe instrucțiuni simultan. Am vorbit altădată pe larg despre paralelismul la nivel de instrucțiune; să observăm că toate procesoarele contemporane îl exploatează prin două forme:
Astfel, în 1985 au apărut primele procesoare cu banda de asamblare, în 1990 primele procesoare de tip VLIW, iar în 1995 procesoare foarte sofisticate superscalare, care pot executa instrucțiunile în ordini foarte diferite de cea din program (out-of-order execution).
Am scris în repetate rînduri despre cache-uri în PC Report (vedeți de pildă articolul din PC Report din martie 1997 și cel din noiembrie 1998). Aici vom arunca doar o privire superficială asupra lor; scopul nostru este de a înțelege de ce cache-urile joacă un rol fundamental în creșterea performanței. Figura 3 ne oferă cheia: deși atît procesoarele cît și memoriile cresc constant în viteză, creșterea procesoarelor este cu 50% mai rapidă decît a memoriilor. Ca atare există o disparitate crescîndă între nevoile de date (și instrucțiuni) ale procesorului și ceea ce memoriile pot oferi. Durata unui acces la memorie ajunge la zeci de cicli de ceas pentru procesoarele contemporane. Întîrzierea accesului este și mai exacerbată în cazul sistemelor care au mai multe procesoare, în care caz timpii de acces la date pot ajunge la mii de cicli.
Din această cauză se construiesc cache-uri, care sunt memorii mai mici și mai rapide, care se plasează între procesor și memoria principală, și în care sunt aduse datele pentru prelucrare. Proiectanții au reușit să sporească eficacitatea cache-urilor folosind două metode:
Astfel, urmărind evoluția arhitecturilor, am ajuns pînă în ziua de azi. Vom încerca să caracterizăm sumar starea arhitecturilor, după care vom arunca o privire asupra unora din direcțiile viitoare.
Istoria modernă a procesoarelor contrapune două paradigme pentru creșterea performanței, bazate pe software și respectiv pe hardware. Aparent un articol despre arhitectura procesoarelor nu are nimic de-a face cu software-ul. Nimic mai greșit: la ora aceasta există o simbioză totală între hardware și software; procesoarele se proiectează odată cu compilatoarele care le folosesc, și relația dintre ele este foarte strînsă: compilatorul trebuie să genereze cod care să exploateze caracteristicile arhitecturale, altfel codul generat va fi foarte ineficace.
Metodele de creștere a performanței cu ajutorul compilatoarelor se numesc și statice, pentru că programul este analizat și optimizat o singură dată, înainte de a fi pornit în execuție. Metodele bazate pe hardware se numesc dinamice, pentru că sunt aplicate în timp ce programul se execută.
Istoria arhitecturilor contrapune mereu cele două paradigme: de exemplu dezbaterea inițială RISC/CISC3 era de aceeași natură, ca și dezbaterea între superscalar și VLIW, pe care am menționat-o deja în acest text.
De fapt, așa cum menționam și în alte articole (de exemplu în PC Report din iunie 1999), există lucruri care se pot face numai static, și există lucruri care se pot face numai dinamic. Așa că de fapt, chiar arhitecturile care pornesc la una din extreme, tind să conveargă către folosirea unui amestec de trăsături din ambele domenii:
Cu siguranță că un model mixt este preferabil, pentru că poate lua ce e mai bun din fiecare tehnologie.
Se cuvine să atragem atenția asupra unei recrudescențe a ``luptei'' sistemelor pure: anul acesta compania Transmeta a anunțat apariția unui nou procesor, numit Crusoe, care exploatează la maximum tehnologiile statice (compilarea). Compania Transmeta a făcut mare vîlvă, nu atît prin procesorul lor, care poate simula alte procesoare, inclusiv cele ale firmei Intel, ci prin faptul că angajează pe cel mai faimos programator al planetei, Linus Torvalds, creatorul sistemului de operare Linux.
Transmeta a lansat Crusoe cu mare pompă în luna ianuarie; compania predică întoarcerea la simplitate (care a fost sugerată atît de curentul RISC, cît și de modelele VLIW), în care hardware-ul este simplu și rapid, iar compilatorul face greul. Echipa care a lucrat la Transmeta este compusă din mare măsură din ingineri plecați de la IBM: IBM a lucrat la o versiune de procesor PowerPC care putea face exact același lucru: putea executa în mod nativ cod x86 (adică compatibil Intel), dar proiectul lor a fost întrerupt deși era într-o stare foarte avansată, aparent din motive de marketing.
Cît de serios este acest nou competitor?
Din păcate atuurile lui Crusoe nu sunt prea clare:
Probabil că pentru a rămîne viabil Crusoe va trebui să se metamorfozeze și să devină mai complicat, folosind și o serie de mecanisme dinamice de creștere a performanței.
În definitiv există o singură resursă aproape gratuită și care este în cantități suficiente: numărul de tranzistori. Datorită miniaturizării numărul de tranzistori disponibili pentru design crește enorm; de aceea simplitatea cu orice preț (așa cum o încarnează Crusoe) nu este neapărat o calitate.
Proiectanții de microprocesoare se lovesc în ziua de azi de mai multe dificultăți. Nici una dintre ele nu e insurmontabilă, dar soluțiile sunt din ce în ce mai grele. Vom arunca o privire asupra unora dintre ele; încercarea de a extrapola impactul acestor bariere în viitor va sugera apoi soluții pentru depășirea lor.
Din fericire tehnologia lucrează în direcția favorabilă: miniaturizarea duce la scăderea puterii necesare. Un alt factor care duce la scăderea puterii consumate este scăderea tensiunilor de alimentare.
Interesant este faptul că, deși dimensiunea tranzistorilor a scăzut într-una, dimensiunile circuitelor fabricate au crescut: foamea neostoită a designerilor cere suprafețe din ce în ce mai mari ale plăcuțelor de siliciu; de aceea puterea consumată a crescut și ea.
O altă problemă importantă este legată de liniile tehnologice de fabricație: o astfel de instalație costă la ora actuală două miliarde de dolari. Puține companii își pot permite investiții de asemenea anvergură pentru o tehnologie care se schimbă în 3 ani!
O analiză extrem de interesantă a fost făcută de Mark Horowitz, profesor la universitatea Stanford, într-un articol intitulat ``Viitorul sîrmelor''. Articolul pornește de la caracteristicile electrice ale semiconductorilor, și analizează o serie de scenarii posibile pentru tehnologiile de fabricație. Textul ia în considerare tot felul de factori, cum ar fi geometria sîrmelor, capacități și rezistențe, disiparea puterii, etc. Vom ignora toate aceste detalii, însă vom privi una din concluziile la care autorul ajunge.
Autorul observă că în general sîrmele vor evolua în sensul dorit: vor deveni mai scurte, iar viteza de transmisiune a informației nu va încetini relativ la dimensiunea circuitului. Deci dacă am lua un microprocesor de astăzi și l-am reduce la scară, sîrmele nu ar constitui un impediment în funcționarea sa corectă.
Problema apare însă din faptul că de fapt suprafața circuitelor nu scade, din cauză ca designerii adaugă noi module. O mare problemă sunt sîrmele care traversează mai multe module. Lungimea acestora rămîne practic constantă, în milimetri. Ori, cum viteza ceasului crește mereu, asta înseamnă că semnalele electrice nu mai au timp să parcurgă sîrmele de la un capăt la altul. La 1Ghz lumina în vid străbate 3*108 * 10-9m = 30cm. Dar viteza luminii în solide este mai mică, iar viteza de propagare scade dramatic cu numărul numărul de ``consumatori'' ai sîrmei (adică o sîrmă conectată la 3 circuite e mult mai lentă decît una cuplată la doar două). De asemenea, liniile lungi de transmisiune vor avea nevoie de amplificatoare, care încetinesc substanțial semnalul.
Asta înseamnă că circuitele viitorului nu vor mai putea comunica prin semnale globale: pur și simplu va fi imposibil pentru o sîrmă să unească diferitele părți ale circuitului. Aceasta este o consecință de cea mai mare importanță pentru arhitecturile viitoare!
În această ultimă secțiune vom încerca să discernem ce ne oferă viitorul. Marile companii lucrează simultan la mai multe generații ale unui procesor, cu echipe independente, ca atare ceva din ceea ce viitorul ne rezervă poate fi observat în produsele comerciale în curs de proiectare, în măsura în care companiile dezvăluie astfel de informații.
Cercetarea în arhitectura procesoarelor este efervescentă, atît în industrie cît și în universități; este absolut imposibil de urmărit întregul peisaj. Iată însă unele dintre direcții:
Un efort substanțial este în continuare depus în a perfecționa tehnicile care în ultimii 15 ani au servit atît de bine arhitectura, pe care le-am descris mai sus: exploatarea paralelismului la nivel de instrucțiune și ierarhiile de memorie.
Iată unele dintre tendințe:
Există felurite forme de predicție a valorilor, unele folosite deja de multă vreme (cum ar fi predicția salturilor, pe care am descris-o în PC Report din august 1999), dar este plauzibil ca scheme din ce în ce mai sofisticate să-și facă apariția.
Așa cum am văzut, proiectanții tind să înghesuie din ce în ce mai multe circuite pe aceeași pilulă de siliciu. O evoluție naturală este de a face saltul de la mai multe procesoare legate printr-o magistrală comună (ca în cazul sistemelor cu multiprocesoare simetrice, pe care le-am descris în PC Report din noiembrie 1998) în procesoare strîns cuplate, pe aceeași pilulă de siliciu.
De fapt astfel de scheme există deja: procesorul pentru mainframes de la IBM S/390 are două nuclee identice, care execută sincron același program: în cazul în care rezultatele nu sunt identice se execută o excepție și programul este reluat. Acesta este un exemplu în care mai multe resurse sunt folosite pentru o fiabilitate sporită, dar IBM a anunțat că viitorul lor procesor G5 va conține două nuclee independente pe aceeași pilulă, permițînd realizarea unor sisteme multi-procesor cu un singur cip.
O evoluție naturală ar fi la a exploata alte forme de paralelism decît cel la nivel de instrucțiune (ILP). Calculatoarele moderne exploatează excelent paralelismul la nivel de proces, dar există forme intermediare, și trebuie să ne așteptăm să vedem arhitecturi din ce în ce mai orientate spre acestea:
Există o sumă de inovații arhitecturale legate de aceste tehnologii, încă ne-integrate în produse comerciale. Să privim cîteva dintre ele:
Avantajul unor astfel de scheme este că, dacă un thread execută care au nevoie de mult timp (de exemplu accese la memorie), putem alte thread-uri care sunt gata de execuție, folosind mai eficient unitățile funcționale ale procesorului.
În fine, voi încheia acest articol cu o privire extrem de sumară asupra unor proiecte de cercetare ambițioase, care încearcă să privească nu numai în viitorul imediat, ci să anticipeze peisajul calculatoarelor peste zece ani și mai mult. La acea dată barierele impuse de fizică vor fi atinse, așa că trebuie să ne așteptăm la o încetinire a vertiginoasei creșteri de performanță. Dar chiar și așa, numărul uriaș de resurse puse la dispoziție trebuie să fie folosit cumva; iată unele posibilități:
Proiectul IRAM (Intelligent RAM) de la Berkeley este condus de David Patterson (http://iram.cs.berkeley.edu/), și își propune integrarea tehnologiilor de fabricație a memoriilor și procesoarelor (la ora actuală liniile de fabricație sunt complet diferite). IRAM încearcă să evite disparitatea de acces la memorii împingînd o multitudine de procesoare micuțe printre celulele de memorie, unde pot lucra independent.
Un proiect foarte asemănător este cel de la Stanford, al profesorului Mark Horowitz, numit Smart Memories (http://velox.stanford.edu/smart_memories/).
Aceste proiecte încearcă să depășească problema accesului lent la memorie prin distribuirea unităților de procesare printre memorii, astfel încît accesul să fie paralel și rapid. O astfel de schemă, în care calculul este distribuit în multe unități independente, face ca impactul ``sîrmelor lungi'' să fie redus.
Proiectul RAW de la MIT (http://www.cag.lcs.mit.edu/raw/) atacă problema dintr-un cu totul alt punct de vedere: mașina RAW constă din foarte multe procesoare relativ simple construite pe aceeași pilulă de siliciu. Aceste procesoare cooperează pentru a executa o singură aplicație, care este paralelizată automat de compilator.
Un proiect foarte interesant este Imagine (http://cva.stanford.edu/imagine/cva_imagine.html), la universitatea Stanford este orientat mai curînd pe procesarea de semnal; conducătorul este William Dally. Proiectul acesta propune un nou model de programare, orientat spre multimedia, în care paralelismul datelor este făcut explicit prin noțiunea de flux (stream). De exemplu, pentru a afișa scene complicate pe ecran, prelucrarea transformă datele dintr-un flux de obiecte într-un flux de poligoane, care devin un flux de triunghiuri, apoi un flux de pixeli, etc.
În fine, menționez două proiecte care încearcă să îmbine hardware-ul reconfigurabil cu procesoarele tradiționale: proiectul Brass de la Berkeley (http://http.cs.berkeley.edu/projects/brass/), condus de John Wawrzynek, și proiectul PipeRench de la Carnegie Mellon, condus de Seth Goldstein și Herman Schmit (http://www.ece.cmu.edu/research/piperench/).
Am vorbit altă dată pe larg despre hardware-ul reconfigurabil (figura 6) (PC Report din iulie 1998). Fiecare poartă universală poate fi programată să execute orice funcție logică, iar comutatoarele pot cupla și decupla sîrmele. Porțile universale se pot implementa din mici celule RAM. Astfel se pot sintetiza unități funcționale extrem de complexe, care pot opera uneori mult mai eficient decît un procesor de uz general.
Am văzut în acest articol că performanța microprocesoarelor s-a situat pe o curbă exponențială în toți cei treizeci de ani de la crearea lor. Am văzut că miniaturizarea și tehnici de design contribuie în mod egal la aceste spectaculoase creșteri. De asemenea, am văzut că creșterea aceasta se apropie de sfîrșit, datorită unor bariere fizice fundamentale. În fine, am încercat să profețim unele din tehnologiile care-și vor face apariția în generațiile următoare de procesoare.