Sunteți pe pagina 1din 19

1

Evolutia microprocesoarelor
Era Pentium (1993-1998)
Intel Pentium (22 martie 1993)
Intel Pentium a fost primul procesor superscalar de la Intel (putea executa pana la doua
instructiuni simultan). Multi s-au intrebat de ce Intel nu a denumit acest procesor 80586.
Motivul a fost ca numele format numai din cifre nu putea fi protejat de copyright, asa ca Intel sa vazut nevoit sa foloseasca si litere pentru a-si diferentia produsele de cele ale concurentei.
Procesorul lucra cu o magistrala de date de 64 de biti (cu toate ca a fost un procesor pe 32 de
biti) si a fost lansat initial la viteze de 60 si 66 de MHz. Au urmat insa foarte rapid versiuni de
75, 90, 100, 120, 133, 150, 166, 200, 233 MHZ. De fapt au existat trei versiuni de Pentium:
prima versiune care nu cuprindea decat doua modele: Pentium la 60 si la 66MHz, a doua
versiune care a adaugat instructiunile MMX si o ultima versiune care a micsorat distanta dintre
tranzistoare permitand astfel viteze mai mari care au ajuns pana la 233MHz. Intel Pentium a
fost primul microprocesor pentru PC-uri care putea sa calculeze mai mult de 100MIPS
(milioane de instructiuni pe secunda). Tot pentru prima oara era posibila construirea unor
sisteme care sa lucreze cu 2 procesoare in paralel (sisteme multiprocesor). Microprocesorul de
la Intel venea cu 16Kb de cache incorporati in pastila de siliciu.
AMD K5 / Nexgen Nx586 (1995)
AMD a reactionat destul de tarziu in a lansa un procesor comparabil ca viteza cu Intel Pentium.
In 1995 a produs totusi primul sau procesor care era conceput integral de catre ei, nemaifiind o
simpla clona a procesoarelor Intel. Acest procesor s-a numit K5 si avea viteze de la 75 la
166MHz. Cu toate acestea nu era un procesor mai rapid decat cele de la Intel, in plus avand o
unitate de calcul in virgula mobila destul de slaba (ca si Cyrix de altfel). Una din inovatiile
aduse de K5 era faptul ca instructiunile x86 erau transformate intern in ROP (Risc OPerations).
Aceste operatii RISC se puteau executa in nucleul RISC al procesorului care era mult mai
rapud. In acelasi timp o companie de care putina lume auzise pana atunci, Nexgen, lansa primul
sau procesor: Nx586. Complexitatea procesorului K5 a dus la frecvente destul de mici, ceea ce
i-a facut pe cei de la AMD sa cumpere compania Nexgen care tocmai terminase design-ul
noului lor procesor, NX686. Acest design a fost ulterior folosit de AMD in urmatoarea sa
familie de procesoare pe care avea sa o lanseze in 1997.
Cyrix 6x86 (Octombrie 1995)
6x86 a fost replica lui Cyrix la procesorul Pentium al lui Intel. Acest chip era produs initial de
catre IBM dat fiind ca Cyrix nu avea unitati de asamblare de procesoare, insa ulterior, odata cu
achizitionarea Cyrix de catre National Semiconductor a fost produs chiar de catre acestia.
Procesorul a avut un succes destul de mare dat fiind ca era mai rapid decat un Intel Pentium la
aceeasi frecventa. De altfel pentru a-l putea compara cu procesoarele de la Intel, cei de la Cyrix
au inventat ceea ce s-a numit ulterior P-Rating. De exemplu procesorul Cyrix 6x86 care
functiona la 150 de MHz a fost denumit 6x86PR200, ceea ce insemna ca era comparabil ca

viteza cu un Pentium la 200. Unul din marile dezavantaje ale acestui procesor a fost insa viteza
foarte mica a calculelor in virgula mobila. Cu toate acestea in aplicatiile de tip office s-a
dovedit cel putin la fel de rapid ca si un Pentium.
Intel Pentium Pro (1 noiembrie 1995)
Acest procesor a fost una dintre cele mai mari inovatii tehnice produse de Intel pana acum.
Procesorul ingloba pentru prima oara in istorie pe langa cache-ul Level1 de 8k pentru date si 8k
pentru instructiuni, si un cache Level2 de 256Kb sau 512Kb. Folosea un sistem complex de
predictie a ramurii de executie (branch prediction) si executie speculativa (speculative
execution) - in momentul in care executia programului ajungea la o bifurcatie ramura corecta
nu era stiuta pana in momentul in care se executa instructiunea conditionala; pentru ca
procesorul sa nu astepte pana in acea clipa, se alegea una din cele doua ramuri si se incepea
executia instructiunilor respective; daca se dovedea ca ramura aleasa a fost cea corecta aceasta
insemna un castig important de viteza. Acest microprocesor transforma instructiunile x86 in
microoperatii care erau mult mai mici si mai rapide. Acest lucru, cu toate ca avea ca rezultat o
viteza mult mai mare a instructiunilor de 32 de biti, a dus la performante mult mai slabe in
sistemele de operare care mai contineau cod pe 16 biti. Acesta a fost unul din motivele
performantei mai mici comparabil cu Intel Pentium in Windows 95 de exemplu.
Intel Pentium MMX (Ianuarie 1997)
MMX s-a crezut initial ca inseamna MultiMedia eXtension, dar Intel a declarat ca inseamna
Matrix Math eXtension. Acesta reprezinta un standard introdus de Intel care aduce cateva noi
instructiuni care usurau in principal calculele matematice cu vectori.
AMD K6 (Aprilie 1997)
Ca urmare a cumpararii firmei Nexgen, AMD a reusit sa lanseze un nou procesor, K6 care avea
viteze de la 166 la 266MHz. Bineinteles ca politica AMD a fost ca procesoarele sale sa se
vanda la aproape jumatate din pretul la care se vindeau procesoarele Intel. K6 incorpora
instructiuni MMX (a caror licenta a cumparat-o de la Intel) devenind astfel un rival de temut
pentru procesoarele Intel Pentium MMX.
Cyrix 6x86MX (30 Mai 1997)
6x86MX a adus nou extensiile MMX precum si viteze de ceas mai mari decat precedentele
chip-uri de la Cyrix. Astfel cel mai performant model era 6x86MX PR266 care rula la 233MHz.
De asemenea, marimea memoriei cache Level2 s-a marit de patru ori fata de 6x86, ajungand la
64Kb.
Cyrix MII (14 Aprilie 1998)
Aceasta versiune a chip-ului 6x86 a imbunatatit putin performanta FPU si a atins viteze mai
mari ajungand la 300MHz (PR433). De asemenea viteza bus-ului a ajuns la 100MHz.
Cyrix MediaGX (1998)
MediaGX a reprezentat incercarea lui Cyrix de a produce un chip care sa integreze atat functiile
de sunet si video, cat si controller-ul de memorie si CPU-ul in sine. Scopul acestui chip a fost
acela de a putea produce computere foarte ieftine si la vremea aceea deja se vorbea de

calculatoare sub 500$ (ceea ce era foarte putin la acea data) construite in jurul lui MediaGX. Cu
toate acestea, nici unul din marii producatori de computere nu a adoptat aceasta solutie, astfel
incat procesorul acesta, desi revolutionar, nu a avut deloc succesul scontat.
Procesoarele Cyrix
Arhitectura x86
Corporaia Cyrix este unul dintre furnizorii de baz ai soluiilor bazate pe microprocesoare,
care a introdus noi standarde pe piaa calculatoarelor personale. n ultimii zece ani Cyrix a
dezvoltat aproape o duzin de procesoare originale folosite n milioane de calculatoare din
ntreaga lume.
n luna noiembrie a anului 1997, Cyrix a fost cumprat de National Semiconductor. Aceast
fuziune a adus dou componente importante pentru Cyrix: capacitatea de producie la nivel
mondial a National Semiconductor i infrastructura necesar acestei producii.
Primul produs Cyrix a fost un coprocesor matematic destinat creterii vitezei de realizare a
calculelor matematice. Succesul acestui coprocesor matematic a permis celor de la Cyrix s
distribuie ncepnd cu 1992, primul procesor din familia x86. Compania a dezvoltat rapid o
linie de producie pentru procesoarele 486, i apoi pentru procesoarele din generaia a cincea
5x86, un CPU pentru sistemele PC (mobile i desktop). n 1995, Cyrix a introdus procesorul
din generaia a asea, 6x86, un procesor superscalar, bazat pe o superband de asamblare; n
iunie 1997, a introdus procesorul MMX 6x86MX, iar n 1998 a aprut procesorul MII.
Procesorul Cyrix 5x86
Familia de procesoare 5x86 reprezint o nou generaie pe 64 de bii compatibil x86. Unitatea
central se bazeaz pe o band de asamblare cu ase nivele, putnd executa o instruciune ntrun impuls de tact.
Unitatea central 5x86 este divizat n urmtoarele blocuri funcionale (Fig. 1): -unitatea pentru
numere ntregi (Integer Unit - IU), -unitatea n virgul flotant (Floating Point Unit - FPU) ,
-unitatea cache (Write-Back Cache) , -unitatea pentru gestiunea memoriei (Memory
Management Unit - MMU) , -unitatea de interfa cu magistrala (Bus Interface Unit - BIU).
Unitatea pentru numere ntregi conine: -tamponul pentru instruciuni (Instruction Buffer - IB) ,
-unitatea de aducere a instruciunii (Instruction Fetch Unit - IF) , -unitatea de decodificare a
instruciunii (Instruction Decoder Unit - ID).
Instruciunile sunt executate n unitatea pentru numere ntregi sau n unitatea de calcul n
virgul flotant. Cache-ul conine cele mai recent utilizate date i instruciuni i asigur accesul
rapid la aceste date din partea IU i FPU.
Cnd apare o cerere de acces la o locaie din memoria extern, MMU calculeaz adresa fizic
pe care o trimite unitaii de interfa cu magistrala, care asigur interfaarea unitaii centrale cu
memoria extern i celelalte circuite de pe placa de baz.
Unitatea pentru numere ntregi
Aceast unitate citete, decodific i execut intruciunile ntr-o band de asamblare cu ase
nivele (Fig. 2): -nivelul de aducere al codului instruciunii (Instrucion Fetch - IF) - citete din
cache codul instruciunii urmtoare i l trimite spre decodificare nivelului urmtor din banda de
asamblare. Se pot citi pn la 128 de octei ntr-un impuls de tact, -nivelul de decodificare a
instruciunii (Instruction Decode - ID) - evalueaz irul de octei primit de la nivelul IF,
determinnd numrul de octei pentru fiecare instruciune i tipul acesteia, pe care apoi le

decodific la viteza de o instruciune ntr-un impuls de tact, -primul nivel de caclul al adresei
(Address Calculation 1 - AC1) - dac instruciunea are un operand n memorie, acest nivel
calculeaz adresa de memorie liniar pentru instruciune, -al doilea nivel de caclul al adresei
(Address Calculation 2 - AC2) - realizeaz toate funciile de gestionare a memoriei, accesarea
cache-ului i a registrelor. Dac detecteaz o instruciune n virgul flotant, aceasta este trimis
pentru execuie unitii n virgul flotant, -nivelul de execuie (Execution - EX) - execut
instruciunea folosind operanzii furnizai de nivelele pentru calculul adresei, -nivelul write-back
(WB) - ultimul nivel din IU, actualizeaz setul de registre sau trimite rezultatul unitii de
interfa cu memoria (Load/Store Unit) din MMU.
Unitatea cache
Procesorul Cyrix 5x86 conine un cache unificat pentru date i instruciuni de 16Ko, setasociativ pe patru ci, organizat pe 1024 de linii. Scrierile n cache se fac prin metoda writeback. Memoria cache este organizat n patru bancuri a cte 256 linii fiecare, cu 16 octei pe
linie. Fiecare linie cache are asociat cte un tag pe 21 de bii i un bit de valid (arat dac linia
conine informaii valide sau nu). Pe lng aceti bii, fiecare linie mai conine nc patru bii
care indic dac coninutul liniei a fost modificat (dirty bits), cte unul pentru fiecare dublucuvnt din linie. Aceti ultimi patru bii permit marcarea independent a fiecrui dublu-cuvnt
ca fiind modificat, n loc de a marca ntreaga linie ca fiind modificat.
Unitatea de gestionare a memoriei
MMU translateaz adresele liniare furnizate de IU n adrese fizice, pentru a putea fi folosite de
unitatea cache i unitatea de interfa cu magistrala. Mecanismul de paginare este cel standard
x86.
Unitatea pentru gestionarea memoriei mai conine un bloc (Load/Store Unit) care planific
accesele la memoria cache i memoria extern i implementeaz urmtoarele concepte:
-reordonarea citirilor i scrierilor - confer o prioritate mai mare citirilor din memorie fa de
scrierile n memorie, -evitarea citirilor din memorie - elimin citirile inutile din memorie prin
folosirea datelor existente deja n unitatea central (n cazul dependenelor de tipul citire dup
scriere).
Controlul ramificaiilor, prezicerea ramificaiilor, dependenele ntre date, unitatea n virgul
flotant, unitatea de interfa cu magistrala vor fi prezentate la procesorul 6x86.
Procesorul Cyrix 6x86
Procesorul Cyrix 6x86 este cel mai performant dintre procesoarele de generaia a asea
compatibile x86. mbuntirea performanelor este realizat prin utilizarea unei arhitecturi
superscalare, bazate pe o superband de asamblare.
Cyrix 6x86 este un procesor superscalar, deoarece conine dou benzi de asamblare separate ce
permit procesarea mai multor instruciuni n acelai timp. Folosirea unei tehnologii de procesare
avansate i creterea numrului de nivele n benzile de asamblare (superpipelining) permit
procesorului 6x86 s ating frecvene de lucru mai mari de 100MHz.
Prin folosirea caracteristicilor arhitecturale unice, procesorul 6x86 elimin multe dintre
dependenele ntre date i conflictele la accesarea resurselor, rezultnd o performan optim
att pentru programele pe 16 bii ct i pentru cele pe 32 de bii.
Procesorul Cyrix 6x86 conine dou cache-uri: -un cache unificat (pentru date i pentru
instruciuni) de 16Ko dual port, i -un cache de instruciuni de 256 octei.

Deoarece cache-ul unificat poate conine instruciuni i date n orice raport, acesta ofer o rat a
hit-urilor (numrul de accese n cache, raportat la numrul total de accese) mai mare comparativ
cu dou cache-uri separate pentru date i pentru instruciuni, avnd dimensiuni egale. O cretere
a limii de band a transferurilor cache-unitatea ntreag este realizat prin suplimentarea
cache-ului unificat cu un mic cache de instruciuni foarte rapid, complet asociativ. Prin
includerea acestui cache de instruciuni, se evit conflictele excesive ntre accesele pentru date
i pentru cod n cache-ul unificat.
Unitatea n virgul flotant din procesor permite executarea instruciunilor n virgul flotant n
paralel cu instruciunile ntregi. Aceasta conine o coad de instruciuni pe patru nivele i o
coad pentru datele scrise tot pe patru nivele, pentru a facilita execuia paralel.
Procesorul 6x86 este alimentat la 3.3V ducnd la un consum redus pentru toate frecvenele de
lucru. n plus, 6x86 mai posed un mod de suspendare pe nivel sczut, posibilitatea de a
ntrerupe tactul i modul de management al sistemului (SMM) pentru aplicaiile sensibile la
alimentare.
Principalele blocuri funionale
Procesorul Cyrix 6x86 conine cinci mari blocuri funcionale (Fig. 3): -Unitatea ntreag
(Integer Unit - IU) , -Unitatea cache (Cache Unit) , -Unitatea de gestionare a memoriei
(Memory Management Unit - MMU) , -Unitatea n virgul flotant (Floating Point Unit FPU) , -Unitatea de interfa cu magistrala (Bus Interface Unit - BIU).
Instruciunile sunt executate n cele dou benzi de asamblare ntregi (X i Y) i n unitatea n
virgul flotant. Cache-ul conine cele mai recent utilizate date i instruciuni pentru a permite
accese rapide la informaii din partea IU i FPU.
Adresele fizice sunt calculate de MMU i sunt trimise unitaii cache i unitii de interfa cu
magistrala. BIU ofer o interfa ntre placa sistem extern i unitaile interne ale procesorului.
Unitatea ntreag
Unitatea de calcul cu numere ntregi ofer o execuie paralel a instruciunilor n dou benzi de
asamblare pentru numere ntregi cu apte nivele (Fig. 4). Fiecare din cele dou benzi de
asamblare (X i Y) poate procesa simultan cteva instruciuni.
Benzile de asamblare ntregi conin urmtoarele nivele de prelucrare: -aducerea codului
instruciunii (Instruction Fetch IF) , -primul decodificator pentru instruciuni (Instruction
Decode 1 ID1) , -al doilea decodificator pentru instruciuni (Instruction Decode 2 ID2) ,
-primul bloc de calculare a adresei (Address Calculation 1 AC1) , -al doilea bloc de calculare
a adresei (Address Calculation 2 AC2) , -execuie (Execute EX) , -writeback (WB) (Fig.
4).
Nivelul de aducere al codului instruciunii (IF) este mprit de cele dou benzi de asamblare,
aduce cte 16 octei de cod din unitatea cache ntr-un singur ciclu de tact. n acest nivel se caut
orice instruciune de salt ce poate apare n fluxul de cod i poate afecta secvenierea normal a
programului. Dac este detectat o instruciune de salt necondiionat sau una de salt condiionat,
logica de prezicere a salturilor din acest nivel genereaz o posibil adres destinaie pentru
instruciunea de salt. Apoi IF aduce codul instruciunilor ncepnd cu aceast adres.
Funcia de decodificare a codului instruciunii este realizat de nivelele ID1 i ID2. Nivelul
ID1, folosit de ambele benzi de asamblare, evalueaz irul de octei de cod transmis de nivelul
IF i determin numrul de octei pentru fiecare instruciune. Acest nivel poate trimite cel mult
dou instruciuni ntr-un impuls de tact nivelului ID2, cte una pentru fiecare band de
asamblare.

Cele dou nivele ID2 decodific instruciunile i le trimite uneia din cele dou benzi de
asamblare X sau Y spre execuie. Banda de asamblare este aleas bazat pe tipul instruciunilor
aflate deja n fiecare band i ct de repede se presupune c se vor termina.
Funcia de calculare a adreselor este realizat tot n dou nivele: AC1 i AC2. Dac
instruciunea are o referin la un operand n memorie, AC1 calculeaz o adres de memorie
liniar pentru instruciune.
Nivelul AC2 realizeaz toate funciile de gestiunea memoriei cerute, accesele la cache i
accesele la setul de registre. Dac AC2 detecteaz o instruciune n virgul flotant, aceasta este
trimis spre prelucrare unitii FPU.
n nivelul de execuie (EX), se execut instruciunile folosind operanzii primii din nivelul AC2.
Nivelul writeback (WB) este ultimul din unitatea de lucru cu numere ntregi. n acest nivel sunt
stocate rezultatele execuiei sau n registre sau n tamponul de scriere din unitatea cache.
Procesarea n inordine
Dac o instruciune este executat mai repede dect instruciunea precedent din cealalt band
de asamblare, instruciunile sunt completate n inordine. Toate instruciunile sunt prelucrate n
ordine pn la nivelul EX. n timp ce n nivelele EX i WB instruciunile pot fi executate n
inordine.
Dac exist dependene de date ntre cele dou instruciuni, este necesar intervenia unui bloc
care s asigure execuia corect a programului. Astfel, chiar dac instruciunile sunt executate n
inordine, excepiile i scrierile din cadrul instruciunilor sunt ntotdeauna efectuate n ordinea
cerut de program.
Selectarea benzii de execuie
n majoritatea cazurilor, instruciunile sunt prelucrate n oricare din cele dou benzi de
asamblare i nu exist constrngeri cu privire la tipul instruciunilor executabile n paralel n
cele dou benzi de asamblare. ns, unele instruciuni pot fi prelucrate doar de banda de
asamblare X: -instruciunile de salt, -instruciunile n virgul flotant, -instruciunile exclusive.
Instruciunile de salt i cele n virgul flotant pot fi executate n paralel cu o alt instruciune
ce poate fi executat n banda Y. Instruciunile exclusive nu pot fi executate n paralel cu nici o
alt instruciune. Aceste instruciuni necesit accese multiple la memorie. Chiar dac aceste
instruciuni sunt executate exclusiv, este folosit hardware-ul din cele dou benzi de asamblare
pentru a se accelera completarea instruciunii. n continuare sunt nirate tipurile de instruciuni
exclusive ale procesorului 6x86: -ncrcarea segmentelor n modul protejat, -accesele la
registrele speciale (registrele de control, debug i test) , -instruciunile pe iruri, -nmulirea i
mprirea, -accesele la porturile I/O, -PUSHA i POPA, -salturile intersegment, apelurile de
proceduri i ieirea din proceduri intersegment.
Soluionarea dependenelor de date
Cnd dou instruciuni care sunt executate n paralel acceseaz aceeai dat sau acelai registru,
poate apare una din urmtoarele tipuri de dependene de date: -citire dup scriere (Read-AfterWrite - RAW) , -scriere dup citire (Write-After-Read - WAR) , -scriere dup scriere (WriteAfter-Write - WAW).
Dependenele ntre date n mod normal necesit serializarea execuiei instruciunilor implicate.
ns, 6x86 implementeaz urmtoarele trei mecanisme ce permit execuia paralel a
instruciunilor ce conin dependene ntre date: -redenumirea registrelor (Register Renaming) ,

-naintarea datelor (Data Forwarding) , -evitarea datelor (Data Bypassing). n continuare, se vor
descrie pe scurt aceste meacnisme.
Redenumirea registrelor
Procesorul Cyrix 6x86 conine 32 registre fizice de uz general. Fiecare din cele 32 de registre
din fiierul de registre poate fi desemnat a fi unul din registrele de uz general din arhitectura
x86 (EAX, EBX, ECX, EDX, ESI, EDI, EBP i ESP). Pentru fiecare operaie de scriere ntr-un
registru este selectat un nou registru fizic, pentru a se reine temporar i data precedent.
Redenumirea registrelor elimin efectiv toate dependinele WAW i WAR. Pentru programator
este transparent acest mod de redenumire a registrelor; este transparent att pentru sistemul de
operare, ct i pentru programele aplicaie.
Exemplul 1. Redenumirea registrelor elimin dependenele de tipul scriere dup citire (WAR).
O dependen de tip WAR apare atunci cnd prima dintr-o pereche de instruciuni citete un
registru logic i a doua instruciune scrie n acelai registru. Acest tip de dependen este ilustrat
de perechea de instruciuni de mai jos:
banda X banda Y
(1) MOV BX, AX (2) ADD AX, CX
(BX <- AX) (AX <- AX + CX)
(Ordinea iniial din program a instruciunilor este artat de numerele din paranteze.)
n absena redenumirii registrelor, instruciunea ADD din banda de asamblare Y ar trebui s
atepte pn cnd instruciunea MOV din banda de asamblare X ar citi registrul AX.
ns, procesorul 6x86 evit blocarea benzii de asamblare ntr-o astfel de situaie. Pe msur ce
este executat fiecare instruciune, rezultatele sunt plasate ntr-un nou registru fizic, pentru a
evita posibilitatea suprascrierii unei valori a unui registru logic i pentru a permite execuia n
paralel a dou instruciuni fr blocare (fr a fi necesar nici o secveniere la accesarea
aceleiai resurse) (Tab.1).
Exemplul 2. Redenumirea registrelor elimin dependenele de tipul scriere dup scriere (WAW)
O dependen WAW apare cnd dou instruciuni consecutive realizeaz scrierea n acelai
registru logic. Acest tip de dependen este ilustrat de:
banda X banda Y
(1) ADD AX, BX (2) MOV AX, [mem]
(AX <- AX + BX) (AX <- [mem])
Fr denumirea registrelor instruciunea MOV din banda de asamblare Y ar trebui s fie
ntrerupt pentru a garanta c instruciunea ADD din banda X i-a depus rezultatul n AX
(Tab.2).
naintarea datelor (Data Forwarding)
Doar redenumirea registrelor, nu poate elimina dependenele de tipul citire dup scriere (RAW).
6x86 folosete dou tipuri de data forwarding mpreun cu redenumirea registrelor pentru a
elimina acest tip de dependene: -naintarea operandului (operand forwarding), - apare cnd
prima dintr-o pereche de instruciuni efectueaz o citire din registru sau memorie iar aceast
dat este necesar celei de-a doua instruciuni. CPU execut operaia de citire i furnizeaz data
citit ambelor instruciuni; -naintarea rezultatului (result forwarding) - apare atunci cnd prima
dintr-o pereche de instruciuni execut o operaie (cum ar fi ADD) iar rezultatul ei este citit de o

a doua instruciune. CPU-ul execut operaia primei instruciuni i depune rezultatul operaiei n
destinaiile ambelor instruciuni simultan.
Exemplul 3. naintarea operandului elimin dependena de tipul RAW
O dependen de tipul RAW apare cnd prima dintr-o pereche de instruciuni realizeaz o
scriere iar a doua instruciune citete acelai registru.
banda X banda Y
(1) MOV AX, [mem] (2) ADD BX, AX
(AX <- [mem]) (BX <- AX + BX)
naintarea operandului poate apare doar dac prima instruciune nu modific valoarea iniial a
datei (Tab. 3).
Exemplul 4. naintarea rezultatului elimin dependena de tipul RAW
O dependen de tipul RAW apare cnd prima dintr-o pereche de instruciuni realizeaz o
scriere iar a doua instruciune citete acelai registru.
banda X banda Y
(1) ADD AX, BX (2) MOV [mem], AX
(AX <- AX + BX) ([mem] <- AX)
A doua instruciune trebuie s fie o instruciune de transfer iar destinaia ei poate fi sau un
registru sau o locaie de memorie (Tab. 4).
Evitarea datelor (Data Bypassing)
Pe lng redenumirea registrelor i naintarea datelor, 6x86 conine o a treia tehnic de
eliminare a dependenelor de date, denumit evitarea datelor. Aceasta reduce scderilor n
performan ale acelor dependene de tipul RAW din memorie ce nu pot fi eliminate cu ajutorul
naintrii datelor.
Evitarea datelor apare cnd prima dintr-o pereche de instruciuni scrie n memorie i urmtoarea
citete aceeai dat din memorie. 6x86 reine data din prima instruciune i o paseaz celeilalte
instruciuni, astfel eliminndu-se un ciclu de citire din memorie.
Exemplul 5. Evitarea datei n dependena de tipul RAW
n acest exemplu, dependena de tipul RAW apare cnd prima instruciune efectueaz o scriere
n memorie iar instruciunea urmtoare citete aceeai locaie de memorie (Tab. 5).
banda X banda Y
(1) ADD [mem], AX (2) SUB BX, [mem]
([mem] <- [mem] + AX) (BX <- BX - [mem])
Controlul ramificaiilor
n programe instruciunile de salt apar n proporie de 20-25%. Cnd fluxul de secveniere
normal al programului se schimb datorit unei instruciuni de salt, nivelele benzilor de
asamblare trebuie blocate pn cnd CPU-ul calculeaz adresa, aduce i decodific noul flux de
instruciuni. Procesorul Cyrix 6x86 minimizeaz degradarea n performan i latena introduse
de instruciunile de salt prin folosirea conceptelor de prezicere a salturilor i execuie
speculativ.
Prezicerea salturilor
Procesorul 6x86 folosete un tabel al adreselor destinaie (Branch Target Buffer - BTB) cu 256
de intrri, set asociativ pe 4 ci, pentru meninerea adreselor destinaie ale instruciunile de salt

i a altor informaii necesare prezicerii acestor salturi. n timpul aducerii codului instruciunii
sunt cutate instruciunile de salt n fluxul de instruciuni. Dac este descoperit o instruciune
de salt necondiionat, CPU-ul acceseaz BTB pentru a afla adresa destinaie a instruciunii de
salt. Dac aceast adres exist n BTB, CPU-ul ncepe s aduc instruciunile de la noua
adres.
n cazul salturilor condiionate, BTB mai menine o serie de informaii cu privire la istoricul
efecturii saltului respectiv (pentru a se putea lua decizia de efectuare sau nu a saltului). Dac
instruciunea de salt condiionat este gsit n BTB, 6x86 ncepe aducerea instruciunilor de la
adresa prezis. Dac instruciunea nu este gsit n BTB, 6x86 prezice neexecutarea saltului i
aducerea instruciunilor va continua cu adresa urmtoare. Decizia de efectuare sau nu a saltului
este luat pe baza unui algoritm de prezicere a salturilor.
Odat ce a fost adus codul unei instruciuni de salt condiionat, aceasta este decodificat i
distribuit spre execuie benzii de asamblare X. Instruciunea trece prin nivelele benzii de
asamblare X i este terminat sau n nivelul EX sau n WB, n funcie de instruciunea care a
setat indicatorii de condiii: -dac instruciunea care a setat indicatorii de condiii este executat
n paralel cu instruciunea de salt condiionat, atunci aceasta este terminat n nivelul WB, -dac
instruciunea care a setat indicatorii de condiii a fost executat naintea instruciunii de salt,
atunci aceasta se va termina n EX.
Instruciunile de salt condiionat corect prezise se vor executa ntr-un singur impuls de tact.
Dac dup terminarea execuiei instruciunii de salt condiionat s-a detectat o prezicere eronat
a saltului, CPU-ul golete benzile de asamblare i ncepe execuia de la adresa corect.
Procesorul 6x86 n cazul unei instruciuni de salt condiionat aduce n avans att instruciunea
prezis ct i cealalt, dar o trimite benzii de asamblare spre execuie doar pe cea prezis. Astfel
c, n cazul unei preziceri eronate, instruciunea de la adresa neprezis nu va mai fi citit din
cache, deoarece a fost adus deja. Dac instruciunea de salt condiionat a fost rezolvat n
nivelul EX, atunci ntrzierea n cazul unei preziceri eronate este de patru impulsuri de tact, iar
dac instruciunea de salt a fost rezolvat doar n WB, atunci ntrzierea este de cinci impulsuri
de tact.
Deoarece instruciunea de revenire dintr-o subrutin (RET) este dinamic, procesorul 6x86
menine adresele pentru aceste instruciuni ntr-o stiv cu opt intrri. Adresa de revenire este
introdus n stiva adreselor de revenire de ctre instruciunea CALL, i este scoas de ctre
instruciunea RET corespunztoare.
Execuia speculativ
Procesorul 6x86 are posibilitatea de a executa speculativ instruciunile urmtoare unei
instruciuni n virgul flotant sau a unei instruciuni de salt. Execuia speculativ permite
benzilor de asamblare s execute continu instruciuni dup un salt, fr a fi necesar blocarea
benzii de asamblare pn la obinerea rezultatului execuiei instruciunii de salt condiionat.
Acelai mecanism este folosit pentru a se executa instruciuni n virgul flotant n paralel cu
instruciunile de numere ntregi.
Procesorul are posibilitatea de execuie n patru nivele de speculaie. Dup generarea unei noi
adrese prin mecanismul de predicie, CPU-ul salveaz starea curent (registrele, indicatorii de
condiii, etc.), incrementeaz numrtorul nivelului de speculaie i ncepe execuia fluxului de
instruciuni prezis.
Odat ce instruciunea de salt a fost rezolvat, CPU-ul decrementeaz nivelul de speculaie.
Pentru un salt corect prezis este tears starea resurselor salvate la intrarea n nivelul de
speculaie curent. Pentru un salt prezis eronat, procesorul 6x86 genereaz adresa corect pentru

10

urmtoarea instruciune i folosete valorile de stare salvate pentru a restaura starea curent,
ntr-un singur impuls de tact.
Pentru a se menine compatibilitatea, nu sunt permise scrierile n memorie sau cache, pn cnd
nu este rezolvat instruciunea de salt. Execuia speculativ continu pn cnd apare una din
urmtoarele condiii: -este decodificat o nou instruciune de salt sau de calcul n virgul
flotant i nivelul de speculaie este patru (maximul) , -apare o excepie sau o eroare, -tamponul
de scriere este plin, -se ncearc modificarea unei resurse a crei stare nu a fost salvat
(registrele segment, indicatorii sistem).
Cache-ul unificat de date i instruciuni
Procesorul Cyrix 6x86 conine un cache unificat i un cache de instruciuni (Fig. 5). Cache-ul
unificat cu dimensiunea de 16Ko funcioneaz ca un cache primar (L1) de date i ca un cache
secundar (L2) de instruciuni. Configurat ca un cache set-asociativ pe patru ci, conine pn la
16Ko de cod i date n 512 linii. Cache-ul este dual-port i permite executarea a dou din
operaiile urmtoare n paralel: -citirea unui cod de instruciune, -citirea unei date (de ctre
banda X, banda Y sau FPU) , -scrierea unei date (de ctre banda X, banda Y sau FPU).
Acest cache folosete un algoritm de replasare pseudo-LRU (Last Recently Used) i poate fi
configurat s aloce o nou linie de cache doar la un miss de citire, sau i la citire i la scriere.
Cache-ul de instruciuni de 256 octei complet asociativ servete drept cache de instruciuni
primar (L1). Cache-ul de instruciuni este ncrcat din cache-ul unificat prin magistrala de date
intern. Citirile codurilor de instruciuni din unitatea pentru numere ntregi care se gsesc n
cache-ul de instruciuni nu mai acceseaz cache-ul unificat. Dac instruciunea nu este gsit n
cache-ul de instruciuni, linia din cache-ul unificat care conine instruciunea respectiv, este
transferat att cache-ului de instruciuni ct i unitii pentru numere ntregi.
Acest cache folosete tot algorimtul de replasare pseudo-LRU. Pentru a se asigura operarea
corect n cazul codului automodificabil, orice scriere n cache-ul unificat este verificat cu
coninutul cache-ului de instruciuni. Dac a fost modificat o locaie care este prezent i n
cache-ul de instruciuni, atunci linia ce conine respectiva locaie este dezactivat.
Unitatea de gestionare a memoriei
Unitatea de gestionare a memoriei (Memory Management Unit - MMU) a procesorului Cyrix
6x86, prezentat n Fig. 6, translateaz adresele liniare furnizate de IU ntr-o adres fizic,
pentru a putea fi utilizat n continuare de cache i interfaa cu magistrala. MMU include dou
mecanisme de paginare, un mecanism tradiional i un mecanism specific lui 6x86 cu pagini de
dimensiuni variabile (Fig. 6).
Mecanismul de paginare cu dimensiunea paginilor variabil
Acest mecanism de paginare permite programelor s mapeze pagini cu dimensiunea ntre 4Ko
i 4Go. Folosirea paginilor de dimensiuni mari poate duce la sporirea performanei unor
anumite aplicaii.
Mecanismul tradiional de paginare
Mecanismul tradiional de paginare a fost mbuntit la 6x86 prin adugarea unui cache pentru
tabelul directorilor (Directory Table Entry -DTE) i un TLB victim. TLB-ul principal este cu
mapare direct i conine 128 de intrri pentru tabelul paginilor. Cache-ul DTE cu patru intrri
complet asociative conine accesele cele mai recente la DTE.

11

TLB-ul victim conine liniile din TLB principal care au fost nlocuite datorit unui miss n
TLB. Dac se face referirea la o pagin ce are PTE-ul n TLB-ul victim, linia aceasta este
schimbat cu o linie din TLB-ul primar.
Unitatea n virgul flotant
Interfaa dintre unitatea n virgul flotant (FPU) a procesorului 6x86 i unitatea pentru numere
ntregi este realizat printr-o magistral intern pe 64 de bii. Setul de instruciuni FPU al
procesorului 6x86 este compatibil x87 i ader standardului IEEE-754.
Procesorul Cyrix 6x86 execut instruciunile ntregi n paralel cu instruciunile n virgul
flotant. Instruciunile ntregi pot fi executate n inordine cu respectarea instruciunilor FPU.
Aa cum s-a mai spus, instruciunile FPU sunt ntotdeauna executate n banda de asamblare X.
Nivelul pentru calculul adresei din banda X verific apariia excepiilor de gestionare a
memoriei i acceseaz operanzii din memorie folosii de FPU. Dac nu apare nici o excepie, se
salveaz starea curent a procesorului n AC2 i trimite instruciunea n virgul flotant spre
execuie FPU-ului. Apoi unitatea central poate executa orice instruciune ntreag urmtoare,
speculativ i n inordine.
Unitatea central 6x86 poate trimite pn la patru instruciuni FPU n coada de ateptare a FPU.
CPU-ul continu cu execuia speculativ i n inordine pn cnd apare una dintre condiiile ce
cauzeaz oprirea execuiei speculative. Pe msur ce FPU termin de executat o instruciune n
virgul flotant, este decrementat nivelul speculativ i sunt terse valorile de stare salvate la
nceputul acestei instruciuni. Unitatea n virgul flotant mai conine i un set de patru
tampoane de scriere pentru a preveni ntreruperile datorate scrierilor speculative.
Procesoarele Cyrix 6x86MX i MII
Aceste procesoare au la baz nucleul procesorului 6x86, mbuntit cu cele 57 instruciuni
multimedia noi, compatibile cu tehnologia MMX. n plus, 6x86MX i MII lucreaz la frecvene
mai mari, conin un cache de dimensiune mai mare, un tampon destinat translatrii adreselor
liniare n adrese fizice (TLB) pe dou nivele i un cache destinat adreselor de salt mbuntit
(Fig. 7).
Pentru a oferi suportul pentru operaiile multimedia, cache-ul poate fi transformat ntr-o
memorie RAM scratchpad. Aceast memorie funcioneaz ca o memorie privat pentru CPUi
nu particip n operaiile cache.
Pn unde se poate merge n direcia miniaturizrii i creterii performanelor?
O privire asupra dezvoltrii procesoarelor de la origini pn n prezent ne poate permite
s caracterizm arhitecturile microprocesoarelor contemporane i chiar s ncercm s
prevedem cum vor arat cele de mine.
Am ntlnit de mai multe ori un banc pe Internet, care spunea c, dac mainile ar fi evoluat n
aceeai msur cu calculatoarele, acum ar fi mers 120 de kilometri cu benzina dintr-o brichet
i ar fi costat ct o pine. Pe de alt parte, un contra-banc, din partea industriei automobilistice,
ofensate, zicea apoi c, dac ar fi evoluat la fel, maina ar fi refuzat s mai mearg de cteva ori
pe zi, i ar fi trebuit s o duci napoi n garaj ca s reporneasc.
Adevrul este c progresele fcute de tehnologia calculatoarelor sunt absolut uluitoare; ajunge
s i cumperi un calculator nou dup doi ani ca s fii impresionat de ctigul de performan

12

nregistrat. Sporul de performan se datoreaz unor procesoare din ce n ce mai sofisticate i


mai rapide, i unor memorii de capaciti din ce n ce mai mari.
Rspunztoare pentru creterea exponenial a performanei sunt ns n cea mai mare msur
microprocesoarele. n acest articol vom arunca o privire asupra evoluiei microprocesoarelor de
la origini pn n prezent. Vom ncerca apoi s caracterizm arhitecturile procesoarelor
contemporane i s extrapolm din datele la dispoziie, speculnd despre unele din posibilele
evoluii viitoare.
Domeniul tehnologiilor de calcul este extraordinar de volatil i se mic cu o vitez fantastic;
orice previziune este cel puin hazardat.
Aspecte economice
Un istoric interesant al diferitelor idei arhitecturale din microprocesoare putei gsi pe web la
http://bwrc.eecs.berkeley.edu/CIC/archive/ cpu_history.html.
Primul microprocesor a fost creat de firma Intel n 1971. Numele su era Intel 4004, i era un
procesor pe 4 bii. Apariia primului microprocesor a fost un pas cu uriae consecine n
evoluia ulterioar a sistemelor de calcul. Diferena ntre microprocesor i metodele ndeobte
folosite era c procesorul strnge pe o singur pilul de siliciu toate unitile funcionale
importante necesare executrii programelor; fiind toate strns integrate, comunicaia ntre ele
este rapid i eficace, permind dintr-o dat un salt calitativ.
Nu mai puin important este reducerea de cost care urmeaz unei astfel de integrri. Cu
siguran c principalul motiv al evoluiei explozive a tehnologiei circuitelor integrate nu este
de natur tehnologic, ci economic: spirala preurilor din ce n ce mai sczute face
echipamentele de calcul din ce n ce mai accesibile, cererea crete, ducnd la venituri mai
ridicate pentru fabricani, care investesc mai mult n cercetare/dezvoltare i linii tehnologice,
obinnd densiti mai mari, permind integrarea mai multor circuite precum i costuri i mai
sczute. Cu toat scderea de pre, veniturile globale ale industriei semiconductoarelor au
crescut n mod galopant: numai anul trecut vnzrile globale au fost de 149 de miliarde de
dolari!
Esenial pentru a menine aceast spiral este faptul c echipamentele de calcul mresc enorm
productivitatea muncii, direct sau indirect: de aici cererea crescnd. Iar experii 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 main
modern are n medie 15 microprocesoare, care controleaz, regleaz i diagnosticheaz tot
felul de parametri, de la injecie pn la frne.
Nu pot s m abin s remarc c Statele Unite ale Americii atribuie o treime din creterea
venitului naional brut n anul trecut doar tehnologiilor informaionale, care ns ocup doar 8%
din fora de munc. n foarte mare msur, tehnologia informaiei este responsabil pentru
fenomenala dezvoltare economic pe care Statele Unite o traverseaz n aceti ani.
Aspecte cantitative
S lsm acum deoparte economia, i s aruncm o privire asupra evoluiei unor parametri ai
procesoarelor de-a lungul timpului. Tabela "Cronologia Intel" prezint evoluia generaiilor
succesive ale celei mai proeminente familii de procesoare, ale firmei Intel.
Ultima coloan din tabel i figura "Performane - estimri" arat care este impactul
miniaturizrii: aceast coloan indic dimensiunea de baz (feature size), care poate fi vzut ca
fiind dimensiunea unui tranzistor. Orice reducere a acestei valori are un impact cvadratic,
pentru c suprafaa crete cu ptratul laturii. O reducere de la 2 microni la 1,5 (50%) mrete
deci suprafaa efectiv cu 77% (4/2,25 = 1,77).

13

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. Proiectanii pot face deci procesorul s funcioneze cu un ceas mai rapid.
Observaie: Majoritatea covritoare a procesoarelor contemporane funcioneaz n mod
sincron: ntreaga lor funcionare este orchestrat de un tact de ceas, care garanteaz c feluritele
pri sunt sincronizate. Din ce n ce mai mult ns se tinde spre scheme cu multiple semnale de
ceas, sau chiar scheme asincrone. Nu ne vom ocupa ns de aceste evoluii n textul acestui
articol.
Faptul c avem siliciu la dispoziie pentru a implementa mai muli tranzistori nseamn c:
1). Putem muta mai multe circuite auxiliare pe acelai cip. Evoluia procesoarelor cunoate
cteva salturi calitative: cnd miniaturizarea fcea posibil integrarea unui nou dispozitiv pe
acelai circuit integrat, se realiza un salt de performan. Astfel, au fost integrate succesiv:
uniti din ce n ce mai mari de procesare (8, 16, 32, acum 64 de bii), coprocesoare aritmetice,
uniti de management al memoriei, cache-uri de nivel 1 i chiar 2;
2). Designerii folosesc tranzistorii suplimentari pentru a construi circuite mai sofisticate, care
pot executa mai repede i mai eficient programele. Metoda fundamental folosit este de a face
mai multe lucruri n paralel.
mpreun aceste trei fenomene (viteza ceasului, integrarea pe o singur pastil i exploatarea
paralelismului) contribuie la creterea performanei totale a procesoarelor. Aa cum am povestit
i cu alte ocazii, msurarea performanei unui calculator se face evalund sistemul pe mai multe
programe (deci performana 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 va interesa acum prea tare ce reprezint numerele acestea; cert este
c cu ct sunt mai mari, cu att e mai bine. Graficul din figura "Performane - SPEC" arat
evoluia performanei procesoarelor n ultimii 10 ani, n termeni SPEC.
Evoluia urmrete aproximativ o curb exponenial: n fiecare an performana crete cu 60%.
Tehnologii arhitecturale
O mulime de inovaii tehnologice au fost introduse una dup alta n arhitecturi; de fapt
intenionez s continui aceast serie i n viitor, pentru c mai sunt de prezentat i alte
mecanisme importante.
mi permit s prezint n continuare viziunea profesorului John Hennessy, de la universitatea
Stanford, aa cum a expus-o n prelegerea pe care a inut-o ca invitat la Federated Computer
Research Conferences, n mai 1999.
Hennessy vede dou tehnologii arhitecturale ca fiind eseniale: exploatarea paralelismului la
nivel de instruciune (Instruction Level Parallelism, ILP) i ierarhii sofisticate de memorie
(cache-uri). S spunem cteva cuvinte despre fiecare:
ILP
Paralelismul la nivel de instruciune const n independena instruciunilor din programe una de
alta, ceea ce ne permite s executm mai multe instruciuni simultan. Am vorbit altdat pe larg
despre paralelismul la nivel de instruciune; s observm c toate procesoarele contemporane l
exploateaz prin dou forme:
Execuia pe band de asamblare (pipeline) a instruciunilor succesive;
Execuia n paralel a instruciunilor independente: procesoarele de tip VLIW (very long
instruction word) aleg la compilare care instruciuni merg n paralel, iar procesoarele
superscalare fac aceast alegere n timpul execuiei.

14

Astfel, n 1985 au aprut primele procesoare cu banda de asamblare, n 1990 primele


procesoare de tip VLIW, iar n 1995 procesoare foarte sofisticate superscalare, care pot executa
instruciunile n ordini foarte diferite de cea din program (out-of-order execution).
Cache-uri
Am scris n repetate rnduri despre cache-uri n PC Report (de pild martie 1997 i noiembrie
1998). Aici vom arunca doar o privire superficial asupra lor; scopul nostru este de a nelege de
ce cache-urile joac un rol fundamental n creterea performanei. Figura "Performane memorii i procesoare" ne ofer cheia: dei att procesoarele ct i memoriile cresc constant n
vitez, creterea procesoarelor este cu 50% mai rapid dect a memoriilor. Ca atare exist o
disparitate crescnd ntre nevoile de date (i instruciuni) ale procesorului i ceea ce memoriile
pot oferi. Durata unui acces la memorie ajunge la zeci de cicli de ceas pentru procesoarele
contemporane. ntrzierea 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.
Proiectanii au reuit s sporeasc eficacitatea cache-urilor folosind dou metode:
(a) Prin folosirea unor cache-uri din ce n ce mai mari, plasate din ce n ce mai aproape de
procesor. Aceast evoluie este clar vizibil:
Primele procesoare nu aveau nici un fel de cache, pentru c memoriile erau suficient de rapide
pentru a le servi cu date. n 1980 au aprut cache-uri (L1) sub forma unor circuite speciale, care
n 1984 au fost integrate pe aceeai pilul de siliciu cu procesorul central, dup care (1986) a
aprut un al doilea nivel de cache (L2), mai mare i ceva mai lent, care n procesoarele moderne
(1995) este la rndul lui adesea integrat cu circuitul microprocesorului, pentru a permite un
acces rapid. Au aprut nivele teriare de cache (1999).
(b) Pe de alt parte metodele de management ale cache-urilor sunt din ce n ce mai sofisticate:
Au aprut cache-uri care servesc procesorul de ndat ce primul cuvnt a sosit, chiar dac restul
sunt pe drum (early restart, 1992), cache-uri care nu blocheaz procesorul cnd datele lipsesc,
ci i permit s continue execuia (non-blocking, 1994) i tot felul de alte tehnologii sofisticate,
pe care le-am expus n alte pri (cache-uri victim, buffere de scriere, instruciuni speciale
(prefetching) de management al cache-ului etc.). Tot aici se cuvine s menionm
multiprocesoarele simetrice i protocoalele de coeren ale cache-urilor pentru astfel de sisteme;
toate procesoarele moderne sunt construite pentru a fi folosite n sisteme multi-procesor, i
includ astfel de dispozitive.
Arhitecturile contemporane
Astfel, urmrind evoluia arhitecturilor, am ajuns pn n ziua de azi. Vom ncerca s
caracterizm sumar starea arhitecturilor, dup care vom arunca o privire asupra unora din
direciile viitoare.
Hardware i software. Istoria modern a procesoarelor contrapune dou paradigme pentru
creterea performanei, bazate pe software i respectiv pe hardware. Aparent, un articol despre
arhitectura procesoarelor nu are nimic de-a face cu softul. Nimic mai greit: la ora aceasta
exist o simbioz total ntre hardware i software. Procesoarele se proiecteaz odat cu
compilatoarele care le folosesc iar relaia dintre ele este foarte strns: compilatorul trebuie s
genereze cod care s exploateze caracteristicile arhitecturale, altfel codul generat va fi foarte
ineficace.
Metodele de cretere a performanei cu ajutorul compilatoarelor se numesc i statice, pentru c
programul este analizat i optimizat o singur dat, nainte de a fi pornit n execuie. Metodele

15

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 iniial
RISC/CISC era de aceeai natur, ca i dezbaterea ntre superscalar i VLIW, pe care am
menionat-o deja n acest text.
Not: n anii '80 a aprut ideea de a face procesoarele mult mai simple pentru a le permite s
mearg mai repede. Astfel de arhitecturi au fost numite RISC: Reduced Instruction Set
Computer, prin contrast cu celelalte, Complex ISC.
De fapt, aa cum menionam 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. Aa c de
fapt, chiar arhitecturile care pornesc la una din extreme, tind s convearg ctre folosirea unui
amestec de trsturi din ambele domenii:
La ora actual distincia RISC/CISC aproape c s-a estompat. De exemplu, Pentium, un
procesor tipic CISC, de fapt traduce n mod automat instruciunile n instruciuni de tip RISC n
hardware, dup care le execut. Pe de alt parte, toate procesoarele RISC au cptat extensii la
setul de instruciuni (gen CISC) pentru a le mri eficacitatea; de pild toate procesoarele au
extensii speciale pentru multimedia.
De asemenea, graniele dintre super-scalar i VLIW tind s se estompeze, fiecare mprumutnd
din tehnologiile celuilalt.
Cu siguran c un model mixt este preferabil, pentru c poate lua ce e mai bun din fiecare
tehnologie.
Crusoe
Se cuvine s atragem atenia asupra unei recrudescene a "luptei" sistemelor pure: anul acesta
compania Transmeta a anunat apariia unui nou procesor, numit Crusoe, care exploateaz la
maximum tehnologiile statice (compilarea). Compania Transmeta a fcut mare vlv, nu att
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 att de curentul RISC, ct i de modelele VLIW), n care hardul
este simplu i rapid iar compilatorul duce greul. Echipa care a lucrat la Transmeta este compus
n mare msur din ingineri plecai de la IBM: IBM a lucrat la o versiune de procesor PowerPC
care putea face exact acelai lucru: putea executa n mod nativ cod x86 (adic compatibil Intel),
dar proiectul lor a fost ntrerupt dei era ntr-o stare foarte avansat, aparent din motive de
marketing.
Ct de serios este acest nou competitor?
Din pcate atuurile lui Crusoe nu sunt prea clare:
cipul nu are un ceas mai rapid dect procesoarele Intel (versiunile de Crusoe disponibile
acum merg doar la 400Mhz, comparativ cu Pentium, care ajunge la 800);
cipul ntr-adevr consum mult mai puin energie i are nevoie de mult mai puin
rcire. Transmeta afirm c asta-l face ideal pentru laptop-uri. Din pcate, principalul
consumator de energie ntr-un laptop nu este procesorul, ci ecranul i discul, aa nct
avantajele noului cip vor fi marginale;
Crusoe se bucur de compatibilitate cu setul de instruciuni x86; dar pentru platformele
pe care x86 este dominant (desktop, laptop, chiar i server) am vzut c performana lui
este insuficient. Dac Crusoe vrea s concureze pentru celelalte piee, de procesoare

16

integrate (embedded computing), atunci are de-a face cu ali competitori formidabili, ca
procesoarele de semnal de la Motorola, Texas Instruments i Intel (ARM), asupra crora
nu este clar cte avantaje are.
Probabil c pentru a rmne viabil, Crusoe va trebui s se metamorfozeze i s devin mai
complicat, folosind i o serie de mecanisme dinamice de cretere a performanei.
n definitiv exist o singur resurs aproape gratuit i care este n cantiti suficiente: numrul
de tranzistori. Datorit miniaturizrii numrul de tranzistori disponibili pentru design crete
enorm; de aceea simplitatea cu orice pre (aa cum o ncarneaz Crusoe) nu este neaprat o
calitate.
Constrngerile fizice
Proiectanii de microprocesoare se lovesc n ziua de azi de mai multe dificulti. Nici una dintre
ele nu e insurmontabil, dar soluiile 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
soluii pentru depirea lor.
Accesul la memorie
Dup cum am vzut n figura "Performane - memorii i procesoare", n ultimii 10 ani viteza
memoriilor a crescut cu 10% pe an, n timp ce viteza procesoarelor a crescut cu o rata de 60%.
Toate motivele ne ndeamn s credem c aceast disparitate va continua s se accentueze, i c
preul relativ al unui acces la memorie (msurat n cicli de ceas) va continua s creasc.
Putere
Un alt factor care limiteaz evoluia circuitelor integrate este consumul de putere; n urm cu 15
ani un procesor consuma 2 wai; astzi un procesor ca Alpha 80364 consum 100W; de aici
rezult limitri pentru ceas (puterea consumat crete cu frecvena ceasului), i necesitatea unor
dispozitive speciale de rcire.
Din fericire tehnologia lucreaz n direcia favorabil: miniaturizarea duce la scderea puterii
necesare. Un alt factor care duce la scderea puterii consumate este scderea tensiunilor de
alimentare.
Interesant este faptul c, dei dimensiunea tranzistorilor a sczut ntr-una, dimensiunile
circuitelor fabricate au crescut: foamea neostoit a designerilor cere suprafee din ce n ce mai
mari ale plcuelor de siliciu; de aceea puterea consumat a crescut i ea.
Complexitate
Un factor deloc neglijabil este complexitatea enorm a circuitelor. Procesoarele cele mai
moderne au peste 25 de milioane de tranzistoare, iar n civa ani designerii vor avea la
dispoziie un miliard. Astfel de circuite sunt foarte greu de verificat i testat. La ora actual o
companie ca Intel cheltuiete 40% din budget pentru proiectare i dezvoltare, i 60% pentru
verificare i testare!
O alt problem important este legat de liniile tehnologice de fabricaie: o astfel de instalaie
cost la ora actual dou miliarde de dolari. Puine companii i pot permite investiii de
asemenea anvergur pentru o tehnologie care se schimb n 3 ani!
Srmele
E clar c miniaturizarea nu va putea continua n acelai ritm exponenial: peste ceva vreme am
ajunge la necesitatea de a face un tranzistor mai mic dect un atom, ceea ce e evident imposibil.
Dar chiar nainte de a atinge un astfel de prag, vom avea alte probleme de nfruntat.
O analiz extrem de interesant a fost fcut de Mark Horowitz, profesor la universitatea
Stanford, ntr-un articol intitulat "Viitorul srmelor". Articolul pornete de la caracteristicile
electrice ale semiconductorilor i analizeaz o serie de scenarii posibile pentru tehnologiile de
fabricaie. Textul ia n considerare tot felul de factori, cum ar fi geometria srmelor, capaciti i

17

rezistene, disiparea puterii etc. Vom ignora toate aceste detalii, ns vom privi una din
concluziile la care autorul ajunge.
Autorul observ c n general srmele vor evolua n sensul dorit: vor deveni mai scurte, iar
viteza de transmisiune a informaiei nu va scdea, relativ la dimensiunea circuitului. Deci dac
am lua un microprocesor de astzi i l-am reduce la scar, srmele nu ar constitui un
impediment n funcionarea sa corect.
Problema apare ns din faptul c de fapt suprafaa circuitelor nu scade, din cauz c designerii
adaug noi module. O mare problem sunt srmele care traverseaz mai multe module.
Lungimea acestora rmne practic constant, n milimetri. Ori, cum viteza ceasului crete
mereu, asta nseamn c semnalele electrice nu mai au timp s parcurg srmele de la un capt
la altul. La 1Ghz, lumina strbate n vid 30 de centimetri. Dar viteza luminii n solide este mai
mic iar viteza de propagare scade semnificativ odat cu numrul de "consumatori" ai srmei
(adic o srm conectat la 3 circuite e mult mai lent dect una cuplat la doar dou). De
asemenea, liniile lungi de transmisiune vor avea nevoie de amplificatoare, care ncetinesc
substanial semnalul.
Asta nseamn c circuitele viitorului nu vor mai putea comunica prin semnale globale: pur i
simplu va fi imposibil pentru o srm s uneasc diferitele pri ale circuitului. Aceasta este o
consecin de cea mai mare importan pentru arhitecturile viitoare!
Zgomotul
n fine, pe msur ce tranzistorii sunt mai mici, srmele sunt mai subiri i consumul de putere
este mai mare, circuitele sunt mai sensibile la zgomot, fie el termic, din mediu (de exemplu
radiaii cosmice) sau, n curnd, chiar efecte cuantice! Fenomenele de transport din
semiconductori pe care se bazeaz tranzistorul sunt fenomene statistice: or, cnd dimensiunile
devin att de mici nct numai civa electroni produc semnalele, statistica nu mai opereaz iar
excepiile ncep s apar.
Generaia urmtoare
n aceast ultim seciune vom ncerca s discernem ce ne ofer viitorul. Marile companii
lucreaz simultan la mai multe generaii 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 msura n care companiile dezvluie astfel de informaii.
Cercetarea n arhitectura procesoarelor este efervescent, att n industrie ct i n universiti;
este absolut imposibil de urmrit ntregul peisaj. Iat ns unele dintre direcii:
Evoluie incremental
Un efort substanial este n continuare depus n a perfeciona tehnicile care n ultimii 15 ani au
servit att de bine arhitectura, pe care le-am descris mai sus: exploatarea paralelismului la nivel
de instruciune i ierarhiile de memorie.
Iat unele dintre tendine:
Trace cache: este un cache pentru instruciuni care, n loc de a pstra instruciunile n ordinea
adreselor lor, le menine n ordinea n care este probabil s fie executate.
Execuia speculativ i predicia valorilor: ntr-un articol anterior din PC Report (din iulie
1999) am vzut c principala limitare n calea execuiei paralele a instruciunilor sunt
dependenele ntre instruciuni: una are nevoie de rezultatul alteia pentru a se executa. Or, dac
prima instruciune dureaz mult, atunci a doua nu se poate executa nici ea. Soluia ades folosit
este de a ghici valoarea rezultat i de a executa i instruciunea dependent. Cnd rezultatul
primei instruciuni sosete, este comparat cu cel ghicit (prezis); dac predicia a fost corect,
toate sunt bune, altfel instruciunea dependent este re-executat. Exist felurite forme de
predicie a valorilor, unele folosite deja de mult vreme (cum ar fi predicia salturilor, pe care

18

am descris-o n PC Report din august 1999), dar este plauzibil ca scheme din ce n ce mai
sofisticate s-i fac apariia.
Execuia predicat, care este deja folosit de procesoare de prelucrare de semnal ca Texas
Instruments C6X, i care va fi una din trsturile fundamentale ale noii arhitecturi de la Intel,
Merced. Execuia predicat evit execuia instruciunilor de salt (care au un efect negativ asupra
performanei, aa cum am artat n articolul mai sus-citat) i prefer s execute instruciuni n
mod inutil dup care s arunce rezultatele la gunoi (de exemplu, cnd avem o structur de genul
if-then-else, o arhitectur predicat poate executa ambele ramuri ale condiiei, dar va permite
numai uneia dintre ele s-i fac efectele vizibile).
Multi-procesoare
Aa cum am vzut, proiectanii tind s nghesuie din ce n ce mai multe circuite pe aceeai
pilul de siliciu. O evoluie 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 strns cuplate, pe aceeai pilul de
siliciu.
De fapt, astfel de scheme exist deja: procesorul pentru mainframes IBM S/390 are dou nuclee
identice, care execut sincron acelai program: n cazul n care rezultatele nu sunt identice se
execut o excepie i programul este reluat. Acesta este un exemplu n care mai multe resurse
sunt folosite pentru o fiabilitate sporit, dar IBM a anunat c viitorul lor procesor G5 va
conine dou nuclee independente pe aceeai pilul, permind realizarea unor sisteme multiprocesor cu un singur cip.
Multithreading
O evoluie natural ar fi spre a exploata alte forme de paralelism dect cel la nivel de
instruciune (ILP). Calculatoarele moderne exploateaz excelent paralelismul la nivel de proces,
dar exist forme intermediare, i trebuie s ne ateptm s vedem arhitecturi din ce n ce mai
orientate spre acestea:
Paralelism la nivel de bucl: n care iteraii succesive ale unei bucle sunt executate n
paralel.
Paralelism la nivel de thread; despre multithreading am scris un articol amplu n PC
Report din ianuarie 1997.
Exist o sum de inovaii arhitecturale legate de aceste tehnologii, nc ne-integrate n produse
comerciale. S privim cteva dintre ele:
Thread-level data speculation: este o metod de a implementa paralelismul la nivel de
bucl, lansnd cte un thread pentru fiecare iteraie a buclei. De exemplu, proiectul
STAMPede de la Universitatea Carnegie Mellon, condus de profesorul Todd Mowry
exploreaz aceast alternativ (http://www.cs.cmu.edu/ ~tcm/STAMPede.html).
Simultaneous multi-threading, propus la universitatea din Seattle n 1995. Aceast
tehnologie menine starea fiecrui thread n hardware i permite comutarea rapid ntre
thread-uri. Putem distinge dou variante, ca n caseta "Multithreading": ntr-una din
variante, n fiecare ciclu de ceas putem executa instruciuni dintr-un alt thread, i alta, n
care n fiecare ciclu, instruciuni din thread-uri diferite candideaz pentru uniti
funcionale diferite.
Avantajul unor astfel de scheme este c, dac un thread execut operaii care au nevoie de mult
timp (de exemplu accese la memorie), putem alte thread-uri care sunt gata de execuie, folosind
mai eficient unitile funcionale ale procesorului.
Dincolo de legea lui Moore

19

n fine, voi ncheia acest articol cu o privire extrem de sumar asupra unor proiecte de cercetare
ambiioase, 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,
aa c trebuie s ne ateptm la o ncetinire a vertiginoasei creteri de performan. Dar chiar i
aa, numrul uria de resurse puse la dispoziie trebuie s fie folosit cumva; iat unele
posibiliti:
IRAM, Smart Memory
Proiectul IRAM (Intelligent RAM) de la Berkeley este condus de David Patterson
(http://iram.cs. berkeley.edu/) i i propune integrarea tehnologiilor de fabricaie a memoriilor
i procesoarelor (la ora actual liniile de fabricaie sunt complet diferite). IRAM ncearc s
evite disparitatea de acces la memorii mpingnd o multitudine de procesoare micue printre
celulele de memorie, unde pot lucra independent.
Un proiect foarte asemntor este cel de la Stanford, al profesorului Mark Horowitz, numit
Smart Memories (http://velox. stanford.edu/smart_memories/).
Aceste proiecte ncearc s depeasc problema accesului lent la memorie prin distribuirea
unitilor de procesare printre memorii, astfel nct accesul s fie paralel i rapid. De asemenea,
astfel de scheme, n care calculul este distribuit n multe uniti independente, face ca impactul
"srmelor lungi" s fie redus.
RAW
Proiectul RAW de la MIT (http://www.cag.lcs.mit.edu/raw/) atac problema dintr-un cu totul alt
punct de vedere: maina RAW const din foarte multe procesoare, relativ simple, construite pe
aceeai pilul de siliciu. Aceste procesoare coopereaz pentru a executa o singur aplicaie, care
este paralelizat automat de compilator.
Imagine
Un proiect foarte interesant este Imagine (http://cva.stanford.edu /imagine/cva_imagine.html),
dezvoltat la universitatea Stanford sub conducerea lui William Dally. Proiectul, orientat mai
degrab pe procesarea de semnal, propune un nou model de programare, orientat spre
multimedia, n care paralelismul datelor este fcut explicit prin noiunea de flux (stream). De
exemplu, pentru a afia 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 i
aa mai departe.
PipeRench i Brass
Menionam dou proiecte care ncearc s mbine hardware-ul reconfigurabil cu procesoarele
tradiionale: 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 (PC Report din iulie 1998).
Fiecare poart universal poate fi programat s execute orice funcie logic, iar comutatoarele
pot cupla i decupla srmele (vezi figura "Hardware reconfigurabil"). Porile universale se pot
implementa din mici celule RAM. Astfel se pot sintetiza uniti funcionale extrem de
complexe, care pot opera uneori mult mai eficient dect un procesor de uz general.
Concluzii
Performana microprocesoarelor s-a situat pe o curb exponenial n cei treizeci de ani de la
crearea lor. Miniaturizarea i tehnicile de design contribuie n mod egal la aceste spectaculoase
creteri.
Bibliografie:
1. http://bwrc.eecs.berkeley. edu/CIC/, CPU Info Center

S-ar putea să vă placă și