Sunteți pe pagina 1din 413

CUPRINS

PREFA __________________________________________________5
1. INTRODUCERE N PROBLEMATICA MICROARHITECTURILOR
PREDICTIVE I SPECULATIVE ______________________________11
2. LIMITRI FUNDAMENTALE ALE PARADIGMEI ILP. SOLUII.20
2.1. LIMITAREA PRODUCTORULUI (FETCH BOTTLENECK).
SOLUII. _____________________________________________________20
2.1.1. PROBLEMA N SINE __________________________________________ 20
2.1.2. SOLUIE: TRACE CACHE. TRACE PROCESOARE. ______________ 22
2.2. LIMITAREA CONSUMATORULUI (ISSUE BOTTLENECK).
SOLUII. _____________________________________________________30
2.2.1. REUTILIZAREA DINAMIC A INSTRUCIUNILOR _______________ 35
2.2.2. PREDICIA DINAMIC A VALORILOR INSTRUCIUNILOR _______ 51
2.2.3. PROBLEME DE IMPLEMENTARE A PREDICIEI VALORILOR N
ARHITECTURI CU MICROFIRE MULTIPLE DE PROCESARE ____________ 89
3. METODOLOGIA DE SIMULARE____________________________94
3.1. BENCHMARK-URI UTILIZATE N SIMULARE.
CARACTERISTICI. ____________________________________________94
3.1.1. BENCHMARK-URILE SPEC95. _________________________________ 94
3.1.2. BENCHMARK-URILE SPEC2000. _______________________________ 95
3.1.3. ALTE BENCHMARK-URI: SPEC JVM98, MEDIABENCH. __________ 101
3.2. DEZVOLTAREA DE SIMULATOARE SUB MEDIUL
SIMPLESCALAR UTILIZND BENCHMARK-URILE SPEC. ______106
3.2.1. CE ESTE "SIMPLESCALAR TOOL SET" ? _______________________ 107
3.2.2. AVANTAJELE UTILIZRII "SIMPLESCALAR TOOL SET". ________ 108
3.2.3. DEZVANTAJE N UTILIZAREA SETULUI DE INSTRUMENTE
"SIMPLESCALAR". _______________________________________________ 110
3.2.4. UTILITARE GNU.____________________________________________ 111
3.2.5. INSTALAREA SETULUI DE INSTRUMENTE "SIMPLESCALAR". ___ 112
3.2.6. SIMULATOARELE SETULUI DE INSTRUMENTE "SIMPLESCALAR
3.0". ____________________________________________________________ 114
3.2.7. COMPILAREA I EXECUIA PROGRAMELOR C I C++ SUB LINUX.
INSTALAREA I COMPILAREA BENCHMARK-URILOR SPEC2000 PENTRU
ARHITECTURA SIMPLESCALAR PISA. ____________________________ 124
3.2.8. FOLOSIREA DEBUGGER-ULUI GNU. __________________________ 132
2 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
3.3. EXTINDEREA MEDIULUI SIMPLESCALAR 3.0 CU UN MODUL
PROPRIU. ___________________________________________________137
3.3.1. DESCRIEREA SUMAR A CODULUI SURS AFERENT
SIMULATOARELOR SIMPLESCALAR EXISTENTE. ___________________ 137
3.3.2. IMPLEMENTAREA SIMULATORULUI PROPRIU. ________________ 139
3.4. ARHITECTURA SIMPLESCALAR __________________________142
4. INFLUENA UNOR CONCEPTE DE PROGRAMARE
PROCEDURAL / OBIECTUAL ASUPRA GENERRII
SALTURILOR INDIRECTE__________________________________145
4.1. ANALIZA LIMBAJELOR C I C++ DIN PUNCT DE VEDERE AL
PROCESRII LOR PE ARHITECTURI CU PARALELISM LA
NIVELUL INSTRUCIUNILOR ________________________________145
4.2. INVESTIGAII PRIVIND GENERAREA SALTURILOR /
APELURILOR INDIRECTE PRIN APLICAII PROCEDURALE
RESPECTIV OBIECTUALE____________________________________158
4.3. INSTRUCIUNI DE SALT INDIRECT CU CARACTER DINAMIC
POLIMORF__________________________________________________180
5. CONTRIBUII LA PREDICIA SALTURILOR / APELURILOR
INDIRECTE_______________________________________________183
5.1. PREDICIA DINAMIC A RAMIFICAIILOR DE PROGRAM.
NECESITATE. SOLUII_______________________________________183
5.1.1. STRUCTURI CLASICE DE PREDICIE A SALTURILOR
CONDIIONATE. _________________________________________________ 187
5.1.2. DEPIREA PERFORMANELOR PREDICTOARELOR CLASICE
PRINTR-O ABORDARE INTEGRATOARE HARDWARE-SOFTWARE ______ 193
5.1.2.2. METODE NEURONALE DE PREDICIE. PREDICTORUL
PERCEPTRON. _________________________________________________ 195
5.2. NECESITATEA PREDICIEI SALTURILOR / APELURILOR
INDIRECTE. SOLUII. ________________________________________213
5.2.1. PREDICTOARE ADAPTIVE PE DOU NIVELURI. PREDICTORUL
TARGET-CACHE._________________________________________________ 214
5.2.2. PREDICTOARE HIBRIDE I METAPREDICTOARE._______________ 218
5.2.2.1. CU SELECIE BAZAT PE CODUL SURS. _________________ 218
5.2.2.2. CU SELECIE BAZAT PE ARITATE. ______________________ 221
5.2.2.3. CU SELECIE BAZAT PE CONFIDEN. __________________ 222
5.2.2.4. STRUCTUR DE PREDICIE PENTRU EXPLOATAREA
CORELAIEI VARIABILE. ______________________________________ 225
5.2.2.5. SELECIA DINAMIC A CONTEXTULUI RELEVANT PENTRU
PREDICIE. ___________________________________________________ 227
5.2.3. PREDICTOARE CASCADATE PE DOU SAU MAI MULTE NIVELURI.
________________________________________________________________ 242
Cuprins 3
5.3. CERCETRI PROPRII PRIVITOARE LA PREDICIA
SALTURILOR / APELURILOR INDIRECTE. ____________________248
5.3.1. PREDICTORUL PPM COMPLET. _______________________________ 248
5.3.2.MBUNTIREA PERFORMANEI PREDICTORULUI TARGET
CACHE. IMPLEMENTAREA UNUI MECANISM DE CONFIDEN. ______ 256
5.3.3. PREDICIA SALTURILOR INDIRECTE:_________________________ 268
5.3.3.1. IMPLEMENTAREA PREDICTORULUI HIBRID CU SELECIE
BAZAT PE ARITATE.__________________________________________ 268
5.3.3.2. PREDICTOR HIBRID CU SELECIE BAZAT PE CONFIDEN. 272
5.3.4. JIndirSim SIMULATOR FUNCIONAL PENTRU PREDICIA
SALTURILOR INDIRECTE. ________________________________________ 274
5.3.4.1. ARHITECTURA APLICAIEI.______________________________ 274
5.3.4.2. JIndirSim. INTERFA GRAFIC. GHID DE UTILIZARE. ______ 277
6. CERCETRI CU PRIVIRE LA PREDICIA DINAMIC A
VALORILOR INSTRUCIUNILOR ___________________________284
6.1. PREDICIA VALORILOR INSTRUCIUNILOR (LOAD, ALU)._284
6.1.1. DESCRIEREA SIMULATORULUI VALUE PREDICTOR. _________ 284
6.1.2. IMPLEMENTAREA TIMING-ULUI N CADRUL SIMULATORULUI. _ 290
6.2. VECINTATEA I PREDICIA VALORILOR CENTRAT PE
CONTEXTUL CPU. ___________________________________________293
6.2.1. PREDICTOARE CLASICE (LASTVALUE, INCREMENTAL,
CONTEXTUAL, HIBRID) __________________________________________ 297
6.2.2. PREDICTOR HIBRID CU SELECIE BAZAT PE METAPREDICTOARE.
DESCRIERE SIMULATOR. _________________________________________ 302
7. REZULTATE OBINUTE PRIN SIMULARE. INTERPRETRI. _318
7.1. CERCETRI PRIVIND VECINTATEA I PREDICIA
APELURILOR INDIRECTE____________________________________319
7.1.1. REZULTATE OBINUTE PRIN SIMULAREA BENCHMARK-URILOR
SPEC____________________________________________________________ 320
7.1.2. SIMULAREA PROPRIILOR PROGRAME DE TEST. REZULTATE. ___ 338
7.2. CERCETRI PRIVIND VECINTATEA I PREDICIA
VALORILOR INSTRUCIUNILOR _____________________________342
7.3. PREDICIA VALORILOR REGITRILOR CPU. ______________356
7.3.1. REZULTATE BAZATE PE PREDICTOARELE DE VALORI:
INCREMENTAL, CONTEXTUAL I HIBRID CU PRIORITIZARE STATIC. 356
7.3.2. EVALUAREA PREDICIEI NEURONALE APLICAT REGITRILOR
PROCESORULUI. _________________________________________________ 363
8. CONCLUZII I CONTRIBUII ORIGINALE. DEZVOLTRI
ULTERIOARE_____________________________________________368
BIBLIOGRAFIE ___________________________________375
4 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
ANEXA 1 _________________________________________________388
EXEMPLE JUSTIFICATIVE PRIVIND IMPACTUL LA NIVEL
MICROARHITECTURAL AL UNOR TEHNICI DE MBUNTIRE A
PERFORMANEI PROCESOARELOR PRIN PREDICIA
SALTURILOR INDIRECTE__________________________________388
ANEXA 2 _________________________________________________393
EXEMPLU PRIVIND EFICIENA PREDICIEI PE REGITRII
PROCESORULUI MIPS [Flo03] ______________________________393
ANEXA 3 _________________________________________________395
LIMITAREA PREDICTIBILITII SALTURILOR PE ALGORITMII
DE SORTARE RAPID _____________________________________395
ANEXA 4 _________________________________________________398
REDUCEREA COMPLEXITII UNOR STRUCTURI
MICROARHITECTURALE PRIN DISPERSIA ADRESELOR______398
ANEXA 5 _________________________________________________407
OPTIMIZAREA COLIZIUNILOR N STRUCTURILE PIPELINE __407

PREFA
Importanta rat de cretere, cu cca. 60% pe an, a performanelor
microprocesoarelor ultimilor 10 ani a fost susinut n principal prin dou
abordri corelate: prima vizeaz mbuntiri tehnologice (creterea
frecvenei tactului, scderea latenei memoriilor cache, creterea gradului de
integrare etc.) i are o pondere de cca. 35%, iar a 2-a, mai semnificativ
(65%), vizeaz organizri arhitecturale tot mai eficiente. Aceast lucrarea
elaborat de ctre dl. dr.ing. Adrian Florea se focalizeaz n esen pe cea de
a 2-a abordare, innd desigur cont i de caracteristicile, uneori restrictive,
ale tehnologiilor moderne din domeniul microarhitecturilor de calcul.
Paradigma actual de procesare a instruciunilor i datelor exploateaz
paralelismul la nivel de instruciuni prin tehnici de tip pipelining (paralelism
temporal la nivelul fazelor de procesare ale instruciunilor main) i
respectiv prin tehnici de execuii multiple ale instruciunilor independente
(Multiple Instruction Issue). Desigur c aceste paralelisme sunt posibile prin
utilizarea unor metode hardware-software complexe, precum cele de
planificare i reorganizare a instruciunilor (n mod static, dinamic i hibrid)
i respectiv de predicie a instruciunilor de ramificaie urmate de procesri
speculative etc. n ciuda performanelor deosebite ale acestei paradigme
arhitecturale, ea implic cel puin dou limitri fundamentale, care nu vor
putea fi depite dect printr-o nou generaie de microprocesoare de uz
general, cea de a 4-a, care va ngloba structuri novatoare de prelucrare.
Prima limitare, cunoscut sub denumirea de fetch bottleneck (strangularea
mecanismului de aducere a instruciunilor), se refer n principiu la
imposibilitatea actualelor microprocesoare de a aduce din memorie mai mult
de o unitate secvenial de program (basic-block) ntr-un ciclu i este
datorat instruciunilor de salt. A 2-a limitare, denumit n literatur
dataflow bottleneck sau issue bottleneck (strangularea mecanismului de
execuie a instruciunilor, datorat dependenelor reale de date ntre acestea),
se refer la imposibilitatea rulrii programului ntr-un timp mai mic dect
latena cii critice a acestuia.
Actualitatea i oportunitatea acestei lucrri de cercetare tiinific
deriv tocmai din curajul autorului de a ncerca s elaboreze cteva soluii
originale n vederea depirii acestor limitri fundamentale. Soluiile
propuse, ncadrate n mod pragmatic ntr-un ansamblu al unor cercetri de
prestigiu i de actualitate pe problematica anterior schiat, vor putea
constitui contribuii importante, cu un puternic caracter evolutiv, n
6 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
procesul, uneori fascinant, de elaborare a viitoarei generaii arhitecturale de
microprocesoare.
Pe de alt parte, o provocare continu n tiina i ingineria
calculatoarelor o reprezint nelegerea profund a complexelor i subtilelor
interaciuni hardware-software. Optimizrile interfeei hardware-software nu
sunt posibile dect pe baza unui asemenea proces de nelegere, care
necesit o viziune integratoare asupra multiplelor i complicatelor procese
de prelucrare a informaiei, codificat la niveluri semantice diferite. n acest
sens, consider c cercetrile autorului relative la analiza legturilor adnci
dintre caracteristicile unor programe HLL (High Level Languages), pe de o
parte, i structurile hardware de predicie a salturilor indirecte prin registru,
pe de alt parte, constituie un valoros exemplu de aventur tiinific
formativ, dar i aplicativ.
Iat doar cteva motive care m determin s constat c aceast
monografie tiinific este una deosebit de necesar, actual i oportun, n
mediul academic romnesc. Cnd idealurile profesionale sunt mici,
provinciale, realizrile nu pot fi dect pe msur. Nu este deloc cazul acestei
cri, care i-a propus de la nceput ambiii mari, n deplin sincronizare cu
cele mai noi cercetri din domeniul fertil al microarhitecturilor de calcul cu
paralelism la nivelul instruciunilor i microfirelor de execuie.
Dup ce n primul capitol autorul prezint n mod sintetic o
introducere n problematica microarhitecturilor predictive cu execuii
speculative ale instruciunilor, n capitolul al 2-lea se face o analiz util a
limitrilor fundamentale aferente actualei generaii de microprocesoare.
Capitolul este deosebit de bine plasat ntruct, n continuare, pornind de la
aceste limitri fundamentale, prin rafinarea soluiilor propuse n literatura de
specialitate, se dezvolt anumite soluii originale interesante. Autorul insist
n mod justificat pe limitarea numit fetch bottleneck rezolvat prin
arhitecturi de tip Trace-Cache (memorii cache care rein pe o intrare,
secvene de basic-block-uri anterior procesate i deci, pretabile la re-
procesare), care ntre timp au fost implementate n microprocesoarele
comerciale (ex. Pentium IV). Apoi se prezint limitarea cii critice de
program mpreun cu cele dou soluii deja consacrate: reutilizarea
dinamic a instruciunilor i respectiv predicia dinamic a valorilor
instruciunilor. Ambele soluii se bazeaz pe principiul vecintii temporale
a valorilor instruciunilor (value locality), formulat prima dat de Lipasti i
Shen ntr-un articol din 1996. Se insist asupra celei de a 2-a soluii ntruct
aici autorul determin posibile oportuniti de cercetare, care vor fi
prezentate pe larg n continuarea lucrrii. Pe lng analiza riguroas a
principalelor tipuri de predictoare dezvoltate n literatur, se fac consideraii
interesante asupra performanei globale de procesare a acestor
Prefa 7
microarhitecturi (exprimat n instruciuni / ciclu), autorul elabornd i un
model teoretic care corecteaz un model anterior, aparinnd unor cunoscui
cercettori israelieni. Foarte interesant mi s-a prut a fi i paragraful 2.2.3. n
care se abordeaz dificila i extrem de importanta problem a arhitecturilor
predictive i cu procesri multiple ale micro-firelor de execuie
(multithreaded processors). Oarecum similar cu sistemele multiprocesor i
aici se pun probleme legate de pstrarea unui model coerent i consistent al
sistemului ierarhizat de memorie, din punct de vedere al variabilelor
globale. Sunt prezentate n mod succint cteva soluii propuse n literatur
actual de specialitate.
n capitolul 3 autorul prezint metodologia de simulare utilizat n
cercetare. n esen aceasta se bazeaz pe benchmark-urile SPEC (Standard
Performance Evaluation Corporation) i respectiv pe mediul de dezvoltare
dedicat cercetrii procesoarelor superscalare numit SimpleScalar, dezvoltat
n mediile academice din SUA. Consider c prin utilizarea acestor
instrumente software, lucrarea este pe deplin sincronizat la acest nivel cu
cele mai noi cercetri academice i industriale din domeniu. Dei capitolul
are mai degrab un caracter tehnic dect unul tiinific, utilitatea sa n cadrul
monografiei este indiscutabil. Subsemnatul a fost martor la eforturile
deosebite ale autorului de a nelege mediul SimpleScalar de simulare n
toat complexitatea sa, de a-l extinde cu noi module de program n scopul
validrii cercetrilor sale originale i respectiv de a compila benchmark-
urile SPEC2000 i alte programe de test elaborate de ctre autor pentru
arhitectura int. Dup tiina subsemnatului dl. dr.ing. Adrian Florea este
primul din Romnia, care, bazat pe aceste instrumente software, a dezvoltat
un cadru solid de investigare a microarhitecturilor cu execuii multiple i
speculative ale instruciunilor. De altfel, aceast problematic a prezentat-o
pe larg ntr-o consistent lucrare de peste 400 de pagini, scris n colaborare
cu subsemnatul, publicat tot n editura Matrix Rom din Bucureti.
Capitolul al 4-lea este unul oarecum inedit ntruct autorul abordeaz
o problematic de grani, relativ puin dezbtut n literatur, i anume
cea a influenei unor concepte de programare procedural respectiv
obiectual asupra generrii salturilor i apelurilor indirecte prin registru.
Dup cum se tie, predicia adreselor destinaie ale acestor salturi este o
problem extrem de dificil (ntruct adresele int se modific n mod
dinamic) i actual iar soluiile propuse nu sunt nc mulumitoare. Autorul
a sesizat n mod corect faptul c, nainte de a aborda efectiv problema
prediciei ar trebui s neleag n profunzime modurile n care aceste
apeluri indirecte sunt generate prin compilare. Pentru aceasta, el dezvolt
programe de test proprii, att procedurale ct i obiectuale, care conin
corpuri suspectate de a genera apeluri i salturi indirecte n urma
8 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
compilrii. Pe baza acestei cercetri se extrag concluzii valoroase i deosebit
de utile cu privire la construciile HLL generatoare ale unor astfel de salturi
(apeluri indirecte de funcii prin pointeri, construcii switch/case n cazuri
bine precizate de autor, prezena funciilor de bibliotec, legarea dinamic
realizat prin polimorfism etc.). Cred c toate aceste informaii de nivel
semantic superior pot fi utilizate cu succes n predicia adreselor salturilor /
apelurilor indirecte care, actualmente, utilizeaz n majoritatea lor informaii
de nivel semantic mai sczut, precum codul obiect, adrese binare etc. Mai
general, pierderea semanticii codului de nivel nalt dup compilare, cred c
devine inacceptabil pentru noua generaie de microprocesoare. Sper c n
cercetrile sale viitoare dl. dr.ing. Adrian Florea va exploata mai mult i
aceast ni fertil, pe care, de altfel, singur i-a creat-o.
n capitolul 5 se abordeaz n mod natural interesanta problem a
prediciei salturilor indirecte n cadrul procesoarelor superscalare. Important
de remarcat faptul c autorul prezint mai nti o excelent sintez, deosebit
de actual, asupra principalelor contribuii din literatura de specialitate. De
aici, rezult mai apoi i niele proprii de cercetare, bazat pe mbuntirea
unora dintre aceste scheme de predicie. O prim contribuie original o
reprezint utilizarea unei scheme de predicie de tip Target Cache (o
memorie cache coninnd n principal ultimele instane ale adreselor int
aferente unui salt / apel indirect) accesat cu o informaie extins, mai
complet, prin care acurateea prediciei poate crete. Principiul prediciei
are la baz un model stohastic de tip Markov corespunztor secvenelor de
valori ale adreselor int aferente unui astfel de salt. Pornind de la aceeai
schem Target Cache, autorul o mbuntete prin adugarea unei
informaii de confiden (ncredere) a prediciei, ceea ce, iari, poate crete
performana. n acest ultim sens se propun metrici interesante de evaluare a
performanelor. n fine, se propun apoi alte dou noi predictoare de tip
hibrid: unul cu selecie bazat pe aritatea adreselor destinaie ale salturilor
indirecte i un altul cu selecie bazat pe confidenele asociate celor dou
predictoare componente. Dovezile cantitative referitoare la superioritatea
acestor predictoare originale vor fi aduse n capitolul 7 al lucrrii, pe baza
unor laborioase simulri.
Capitolul al 6-lea abordeaz o problem conex, prezentnd
contribuii relative la predicia dinamic a valorilor instruciunilor. Pe
aceast baz, se ncearc apoi execuia speculativ a unor secvene de
instruciuni aparinnd cii critice de program. O contribuie deosebit de
valoroas mi s-a prut aici cea legat de centrarea prediciei valorilor pe
contextul CPU (registrele generale) i nu pe instruciuni, cum se face n
toate articolele studiate pn la acest moment. Avantajele sunt evidente, n
primul rnd reducerea drastic a numrului de predictoare implementate.
Prefa 9
Ideea este dezvoltat n continuare i autorul propune predictoare hibride de
valori (contextuale i incrementale) n care selecia predictorului curent se
face prin intermediul unor selectoare dinamice de tip automat finit respectiv
de tip neuronal. Desigur c selecia se va face n esen pe baza
confidenelor ataate fiecrui predictor component. Cred c aceast
contribuie este una de for a lucrrii, faptul fiind justificat i prin
publicarea de ctre autor (n colaborare) a unui valoros articol pe aceast
tem, n prestigioasa revist IEE Proceedings. Computers and Digital
Techniques (2005, acreditat ISI Thomson). Rezultatele cantitative vor fi
prezentate i n acest caz n capitolul urmtor al lucrrii.
Capitolul 7 prezint ntr-o manier realmente impresionant din punct
de vedere al eforturilor de programare i simulare, cu totul deosebite, modul
de optimizare al schemelor propuse precum i utile comparaii ntre acestea
i cele deja publicate n literatura de specialitate. Mai nti se abordeaz
problema prediciei salturilor indirecte. ntr-un mod sistematic, autorul
studiaz vecintatea temporal a valorilor (value locality) adreselor
destinaie care se dovedete a fi una extrem de semnificativ. Apoi se
determin optimul pattern-ului de cutare pentru predictoarele contextuale
(modele stohastice Markov simplificate). Foarte interesante mi s-au prut a
fi aici: validarea ideii de extindere a informaiei de corelaie pentru structuri
de tip Target Cache (cu rezultate spectaculoase !), validarea schemei Target
Cache cu mecanismul de confiden propus de autor, validarea schemelor
hibride de predicie propuse, cu selecie bazat pe aritatea salturilor /
apelurilor indirecte (acuratei de predicie medii cu cca. 4% mai mari fa de
schemele Target Cache respectiv contextuale !). n continuare, se prezint
rezultate extrem de interesante ale unor simulri focalizate pe predicia
generalizat a valorilor instruciunilor. Deosebit de utile mi s-au prut a fi:
optimizarea capacitii tabelei de predicie n cazul instruciunilor Load (512
locaii) precum i optimizarea predictorului hibrid de valori. Paragraful 7.3
valideaz ntr-un mod remarcabil ideea centrrii prediciei valorilor pe
contextul CPU. Autorul cerceteaz mai nti, ntr-un mod sistematic,
vecintatea valorilor asociate registrelor CPU, pentru a nelege care dintre
aceste registre sunt predictibile din punct de vedere al coninutului. Mai
mult, se dau i explicaii calitative corecte, ca i justificare. Apoi se
dezvolt, de asemenea ntr-un mod sistematic, mai multe predictoare
destinate registrelor respective, inclusiv predictoare hibride foarte
performante. Deosebit de interesant este cercetarea celor trei tipuri de
selectoare dinamice propuse ntr-un capitol anterior, care cred c ar putea fi
continuat i aprofundat cu succes.
n urma studierii i analizei acestei cri de adnc specialitate n
ingineria calculatoarelor, pot concluziona urmtoarele aspecte:
10 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Lucrarea domnului dr.ing. Adrian Florea se refer la probleme actuale,
extrem de importante, privind microarhitecturile predictive i speculative.
Pe baza unei cercetri bibliografice vaste, s-a elaborat o sintez critic
valoroas a domeniului, cu evidenierea principalelor limitri dar i a
oportunitilor de cercetare.
S-au cercetat structurile de programe procedurale i obiectuale care
genereaz salturi / apeluri indirecte prin registru.
S-au elaborat scheme originale de predicie a salturilor / apelurilor
indirecte, superioare majoritii schemelor publicate n literatura de
specialitate.
S-au proiectat predictoare centrate pe contextul CPU, o idee complet
original i care ofer avantaje deosebite n raport cu deja clasicele
predictoare centrate pe instruciune.
S-au dezvoltat o serie de simulatoare software complexe menite s
evalueze i s optimizeze microarhitecturile novatoare propuse de ctre
autor. Astfel, n urma unor laborioase simulri realizate sub mediul
SimpleScalar cu utilizarea benchmark-urilor SPEC, autorul dovedete n
mod convingtor superioritatea structurilor propuse de el, din punct de
vedere al raportului performan / cost.
Aceast carte reprezint o cercetare bibliografic la zi privind
aspectele actuale ale micro-arhitecturilor cu procesri speculative ntreesut
cu multe completri i contribuii originale, rodul unei munci a autorului n
acest domeniu de circa 8 ani. Dincolo de rezultatele tiinifice obinute, cred
c scopul acestei monografii este unul deosebit de important i generos:
anume acela de a arta ntr-un mod convingtor, c domeniul cercetrii
microarhitecturilor de mare performan poate i trebuie s fie abordat n
mod creator i n mediile academice romneti. n acest sens, autorul pune la
dispoziia celor interesai instrumente software utile pentru cercetare.
Lucrarea este una formativ, pe baza unor experiene aplicative autentice ale
autorului. Iat de ce, o recomand n mod clduros pentru a fi utilizat efectiv
n universiti de studenii din anii terminali ai studiilor de licen, de
studenii masteranzi i de cei doctoranzi din domeniile tiinei i ingineriei
calculatoarelor, electronicii i domeniilor conexe; este util de asemenea
inginerilor, cadrelor didactice universitare i cercettorilor, tuturor
profesionitilor IT i (mai ales !) celor foarte amatori de aventuri n
ingineria calculatoarelor.

Sibiu, 01 iunie 2005 Prof.univ.dr.ing. Lucian N. VINAN
Membru (c.) al Academiei de tiine Tehnice din Romnia
1. INTRODUCERE N PROBLEMATICA
MICROARHITECTURILOR PREDICTIVE I
SPECULATIVE
Provocrile domeniului arhitecturii calculatoarelor cu paralelism la
nivelul instruciunilor, ca de altfel a multora din tiina i ingineria
calculatoarelor, sunt n principal conceptuale, arhitecturale, i abia n final
tehnologice. n ultimii 10 ani performana relativ a microprocesoarelor a
crescut cu cca. 60% pe an. Cercettorii susin c aproximativ 65% din
aceast cretere se datoreaz mbuntirilor arhitecturale i doar 35% celor
de natur tehnologic. Tendinele tehnologice se refer la creterea gradului
de integrare al tranzistorilor pe cip, creterea frecvenei ceasului
procesorului, diminuarea timpul de acces la memorie, reducerea costurilor
de implementare hardware la aceeai putere de calcul ori capacitate de
memorare etc. Tendinele arhitecturale urmresc exploatarea paralelismului
la nivelul instruciunilor i microfirelor de execuie, att prin tehnici statice
(soft), ct i dinamice (hard) sau hibride (cazul arhitecturii IA-64, procesorul
Intel Itanium), o ierarhizare a sistemului de memorie prin utilizarea unor
arhitecturi evoluate de memorii tip cache, reducerea latenei cii critice de
program, utilizarea multiprocesoarelor n cadrul arhitecturilor serverelor i
staiilor grafice etc.
Microarhitecturile predictive i speculative se nscriu n domeniul
procesoarelor cu paralelism la nivelul instruciunilor (ILPP). Acestea
nglobeaz caracteristici hardware-software specifice procesoarelor
viitorului apropiat fiind considerate de ctre cercettori ca aparinnd celei
de a patra generaii arhitecturale (dup prima generaie compus din
procesoarele eminamente seriale von Neumann, a doua reprezentat de
procesoarele pipeline scalare i a treia reprezentat de mainile cu execuie
multipl MEM, categorie din care fac parte procesoarele pipeline
superscalare i cele de tip Very Long Instruction Word). Arhitecturile
MEM din a treia generaie arhitectural, sunt considerate arhitecturi
decuplate, n sensul c lucreaz dup un mecanism de tip "productor -
consumator". n fiecare ciclu se desfoar n mod simultan dou procese
independente: unul de aducere a instruciunilor din memorie n staiile de
rezervare SR sau ntr-un buffer de prefetch (productorul) i un altul de
lansare n execuie a acestor instruciuni din respectivul buffer sau SR
12 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
(consumatorul). Mecanismul de reacie ntre consumator i productor este
realizat prin instruciunile de ramificaie (branch). Generaia arhitectural
urmtoare de microprocesoare se bazeaz n principiu i ea pe acelai model
doar c se vor utiliza tehnici de procesare mai agresive precum cele bazate
pe reutilizarea dinamic a instruciunilor care au mai fost aduse sau / i
executate, pe memorii de mare capacitate integrate "on chip" (trace cache),
pe exploatarea paralelismului la nivel masiv de "microthread" sau pe
predicia dinamic a valorilor resurselor etc. Procesoarele superscalare din
generaia a patra (trace procesorul, procesoare multithread, arhitectura
multiscalar) extrag paralelismul dinamic prin execuie speculativ,
multithreading sau trimitere spre execuie "out of order".
Din pcate procesoarele ILP sunt caracterizate de limitri att din
punct de vedere al productorului ct i din punct de vedere al
consumatorului. Rata de execuie a instruciunilor este fundamental limitat
de ctre hazardurile reale de date (RAW read after write) ntre instruciuni
(calea critic de program). Cauza principal a acestei limitri o constituie
natura intrinsec serial a programelor, n care se dicteaz ordinea secvenial
de transmitere a datelor ntre instruciuni. Alte limitri sunt reprezentate de
hazardurile structurale, hazardurile de ramificaie etc. Aceste ultime limitri,
spre deosebire de dependenele RAW pot fi depite prin diverse tehnici
software sau hardware, n cadrul paradigmei actuale.
Un alt neajuns se refer la paradigma actual de cercetare / exploatare
n domeniul arhitecturii calculatoarelor care este prea specializat, prea
limitat. Instrumentele de cercetare aferente sunt destul de mbtrnite. De
asemenea, interfaa hardware-software nu poate fi neleas n
profunzime, sau formalizat ntr-o manier real calitativ metodele actuale
de cercetare sunt bazate n principal pe simulare, benchmarking i prelucrri
statistice i mai puin pe teorie formalizat matur. n consecin, rezultatele
cantitative obinute reprezint doar efecte i nu cauze reale ale fenomenelor
procesate. Metodologia actual de investigare impune necesitatea dezvoltrii
unor instrumente de cercetare precum: compilatoare, asambloare, link-
editoare, depanatoare la nivel de cod surs, benchmark-uri reprezentative a
cror execuie s fie simulat. Pe lng acestea, cel mai important ns,
trebuie dovedit abilitatea cercettorului de a gsi soluii la dificilele
provocri ale domeniului sau de a investiga probleme noi, neabordate nc.
Istoria procesoarelor ILP contrapune dou paradigme pentru creterea
performanei, bazate pe software i respectiv pe hardware. n ciuda scopului
comun de exploatare i cretere a paralelismului la nivelul instruciunilor
comunitatea cercettorilor se mparte n dou entiti aproximativ
disjuncte n ncercrile lor de a-l ndeplini. Pe de o parte, arhitecii de
calculatoare i canalizeaz eforturile pentru exploatarea / optimizarea
Introducere n problematica microarhitecturilor predictive i speculative 13
tehnicilor de procesare existente prin simulri substaniale pe programe de
test reprezentative n format cod obiect, fr a ine cont de semantica
codului surs de nivel nalt, iar pe de alt parte, autorii de compilatoare
urmresc optimizarea codului obiect, reducerea necesarului de memorie etc.
Toate aceste eforturi sunt ndreptate de fapt pentru depirea limitrilor
tehnologice, dar mai ales arhitecturale, specifice procesoarelor ILP.
Caracteristicile arhitecturale complexe implic tehnologii tot mai sofisticate,
parte din ele nc nedisponibile. Totodat ns, mbuntirile aferente
procesului tehnologic de fabricare, realizate prin creterea capacitii de
integrare a tranzistoarelor i reducerea timpilor de comutaie, determin
creterea frecvenei procesoarelor actuale i viitoare. Micorarea continu a
perioadei de tact a acestora conduce la imposibilitatea realizrii ntr-o
singur perioad de tact a proceselor de predicie sau accese la diverse
structuri de date, cu efect imediat i asupra vitezei globale de execuie a
programelor msurat n IPC (instruciuni per ciclu). De exemplu, exist o
strns legtur ntre dimensiunea informaiei de corelaie, capacitatea
tabelei de predicie, acurateea prediciei (informaii legate de arhitectur) i
timpul n care se realizeaz predicia (informaie tehnologic), n condiiile
impuse de fezabilitate hardware. Pe de alt parte, performanele
arhitecturilor cresc asimptotic pe actualele modele. Totui, schimbri
fundamentale sunt mai greu de acceptat n viitorul apropiat, n primul rnd
datorit compilatoarelor optimizate, avnd drept scop exploatarea mai
pronunat a paralelismului la nivel de instruciuni, deoarece acestea sunt
deosebit de complexe i puternic dependente de caracteristicile hardware.
Soluiile, dup cum se arat i n aceast carte, pot veni mai ales dintr-o
mbinare a ideilor din diverse domenii tiinifice: arhitectura calculatoarelor
i inteligen artificial.
n aceast lucrare este abordat o tehnic relativ nou, predicia
valorilor resurselor, menit s exploateze redundana instruciunilor i
datelor, existent n programe. Tehnica a fost propus pentru depirea
limitrilor fundamentale ale paradigmei procesoarelor cu paralelism la
nivelul instruciunilor, scopul fiind de a reduce calea critic de program
efectul defavorabil provocat de dependenele reale de date asupra
performanei globale de procesare. Avnd n vedere puternica vecintate a
valorilor asignate unei instruciuni sau resurse hardware, care sugereaz c
valorile posibil a fi asignate respectivei resurse s nu fie echiprobabile, ci
dimpotriv, localizate pe instruciune sau pe resursa hardware, face ca
predicia valorilor instruciunilor n vederea execuiei speculative a acestora
s aib anse importante de reuit. O alt problem atacat n lucrarea de
fa se refer la implementarea unor structuri moderne de predicie a
salturilor codificate n moduri de adresare indirecte prin registru, pornind de
14 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
la asemnarea existent ntre problema prediciei valorilor i problema
prediciei adreselor destinaie aferente instruciunilor de salt indirect.
Structurile de date implementate n hardware pentru ambele procese de
predicie au principii identice de funcionare, i anume asocierea cvasi-
bijectiv a contextului de apariie al instruciunii respective cu data / adresa
de predicionat, n mod dinamic, odat cu execuia programului. O soluie
proprie, novatoare, a constituit-o extinderea prediciei valorilor de la nivelul
instruciunilor la regitrii procesorului, cu implicaii benefice asupra
performanei, reducndu-se totodat complexitatea i costul hardware al
microarhitecturilor speculative.
Se pare c pentru a continua i n viitor creterea exponenial a
performanei microprocesoarelor, sunt necesare idei noi, revoluionare chiar,
pentru depirea limitrilor paradigmei actuale din punct de vedere
conceptual. Exist nc o puternic tendin de specializare ngust care face
adesea ca paradigma domeniului s fie una nchis n tipare preconcepute.
Abordri recente, ilustrate i n aceast lucrare, arat ns c sinergia unor
instrumente aparent disjuncte ale tiinei calculatoarelor converge spre
realizri novatoare ale unui anumit domeniu de cercetare (vezi conceptul de
predictor neural spre exemplu). Alte posibile soluii constau n abordri
integratoare de gen hardware-software, tehnologie-arhitectur, algoritmi,
concepte, metode.
O prim astfel de soluie se refer la necesitatea mbinrii eficiente a
tehnicilor de scheduling software cu cele dinamice, de procesare hardware.
n prezent, separarea ntre cele 2 abordri este artificial i poate prea
accentuat. n acest sens, programele ar trebui s expliciteze paralelismul
intrinsec ntr-un mod mai clar. Cercetri actuale arat c un program
optimizat static ruleaz mai prost pe un procesor Out of Order dect pe
unul In Order [Ste99]. Printre cauze se amintesc expansiunea codului dup
reorganizare, noile dependene de date introduse prin execuia condiionat a
instruciunilor, faptul c instruciunile gardate nu permit execuia Out of
Order etc. Separarea schedulingului dinamic de cel static este o prejudecat
nociv dar care este din pcate deja consacrat n ingineria calculatoarelor
unde practic nimeni nu i-a pus problema dezvoltrii unui optimizator de
cod dedicat unei maini cu procesare Out of Order.
Cercetarea algoritmilor ar trebui s in seama i de concepte precum,
de exemplu, cel de cache, n vederea exploatrii localitilor spaiale ale
datelor prin chiar algoritmul respectiv. Se cunosc, la ora actual, relativ
puine lucruri despre ce se ntmpl cu un algoritm cnd sunt implementate
ierarhii de memorii pe maina fizic. n general, algoritmii nu in cont la ora
actual de caracteristicile mainii i acest lucru nu este pozitiv pentru c
algoritmul ruleaz ntotdeauna pe o main fizic avnd limitri importante
Introducere n problematica microarhitecturilor predictive i speculative 15
(de ex. elementele unui tablou se pot afla parial n cache i parial pe disc!).
Chestiuni similare sunt ilustrate n capitolul 4 al prezentei lucrri unde se
arat prin exemple concrete influena polimorfismului din programele de
nivel nalt asupra salturilor / apelurilor indirecte, generate la nivelul codului
obiect, i greu predictibile. Cu toate acestea, nu nseamn c programatorul
va trebui s devin expert n arhitectura calculatoarelor, dar nu o va mai
putea neglija total dac va dori performan. La momentul actual sunt
realizate cercetri serioase asupra algoritmilor care vizeaz nu numai o
mbuntire a performanei ci i o reducere a puterii consumate, vital mai
ales la nivelul dispozitivelor de calcul de tip handheld i al sistemelor
dedicate. De asemenea, prezentul tehnologiei informaiei, ca s nu mai
spunem de viitor, centrat pe Internet i tehnologia WWW, impun ca alturi
de performana n sine, fiabilitatea, disponibilitatea i scalabilitatea s
devin criterii eseniale, ceea ce implic iari necesitatea unei noi viziuni
pentru arhitectul de computere.
Cercettorii predicioneaz o dezvoltare puternic n continuare a
procesoarelor multimedia. Diferite de aplicaiile de uz general, cele
multimedia sunt caracterizate de structuri de date regulate, de tip vectorial,
cu tendine de procesare identic a scalarilor componeni. n acest caz
devine necesar procesarea i generarea rspunsurilor n timp real.
Exploatarea paralelismului la nivelul microthread-urilor independente ale
aplicaiei (codri / decodri audio, video, etc) i localizarea pronunat a
instruciunilor prin existena unor mici bucle de program i nuclee de
execuie care domin timpul global de procesare sunt aspecte care
influeneaz n mod direct arhitectura procesoarelor multimedia.
Pe scurt, lucrarea este structurat astfel:
n capitolul 2 sunt prezentate pe larg limitrile fundamentale ale
paradigmei ILP: fetch bottleneck (limitarea productorului) i issue
bottleneck (limitarea consumatorului), cauze i soluii n depirea lor. n
ceea ce privete soluiile la limitarea productorului se insist asupra
conceptului de Trace Cache cu toate mecanismele pe care le implic
(predictor multiplu de salturi, unitate de umplere, logic de selecie),
inclusiv pe implementarea comercial existent la procesorul Intel
Pentium4. O mare parte a acestui capitol este concentrat n jurul celor dou
tehnici novatoare (una speculativ - predicia valorilor i una non-
speculativ reutilizarea dinamic a instruciunilor) menite s reduc
efectele defavorabile provocate de dependenele reale de date dintre
instruciuni (limitare fundamental a consumatorului). Sunt trecute n revist
o serie de predictoare de valori, de la cele mai simple pn la cele mai
complexe i actuale, analizate din punct de vedere calitativ i cantitativ
performanele i limitrile acestora.
16 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Capitolul 3 ilustreaz programele de test standardizate (suita SPEC),
metodologia de simulare, instrumentele software utilizate baza de
cercetare de la care s-a pornit n exploatarea schemelor de predicie propuse.
Pentru compararea rezultatelor simulrilor cu cele obinute de ceilali
cercettori din domeniu pe plan internaional se impune standardizarea
procesului de simulare. n acest sens a fost utilizat i descris setul
SimpleScalar 3.0 o colecie de instrumente software, pus la dispoziia
cercettorilor n arhitecturi moderne de calcul, care cuprinde: compilatoare,
asambloare, link-editoare, simulatoare i instrumente de vizualizare a unei
arhitecturi (super)scalare generice. Pentru generarea codului la nivel limbaj
de asamblare MIPS i a codului obiect specific arhitecturii virtuale
SimpleScalar 3.0. a fost nevoie de recompilarea instrumentelor setului
(utilitarele GNU, compilatorul Gcc). Cu ajutorul acestora au fost
recompilate benchmark-urile SPEC2000 i propriile programe de test
folosite n vederea studierii legturii calitative i cantitative existente ntre
paradigmele actuale de programare (programe procedurale vs. obiectuale) i
respectiv generarea valorilor de anumite tipuri de instruciuni (salturi
indirecte, instruciuni Load, ALU etc).
n capitolul 4 s-a ncercat investigarea legturii existente ntre
motenire, polimorfism i alocarea dinamic a memoriei pe de o parte, i
comportamentul salturilor indirecte (JR reg) de cealalt parte, fiind
cunoscut ca o problem dificil predicia acestora. Se urmrete practic
transmiterea de informaii de la nivel software ctre proiectanii de
arhitecturi (hardware). S-a realizat o analiz comparativ a limbajelor C i
C++ din punct de vedere al procesrii lor pe arhitecturi cu paralelism la
nivelul instruciunilor i s-au evideniat diferenele dintre acestea.
Comportamentul diferit al celor dou tipuri de aplicaii i penuria de
programe obiectuale de test standardizate au impus generarea unor
programe proprii de test relativ simple, prin intermediul crora s-a artat c
cele dou "emisfere" software i hardware sunt doar n aparen disjuncte.
Cele 2 programe obiectuale C++ i 3 procedurale C propuse evideniaz
corpuri i construcii de program prezente n sursele de nivel nalt
procedurale, respectiv concepte ale programrii obiectuale care genereaz la
nivel low salturi / apeluri indirecte. Finalul capitolului ilustreaz cteva
exemple de instruciuni de salt indirect cu caracter dinamic polimorf (care
genereaz trei sau mai multe target-uri distincte) din benchmark-urile SPEC
simulate, pentru a se evidenia dificultatea prediciei acestora.
n capitolul 5 sunt prezentate cercetri ale autorului cu privire la
dificila problem a prediciei branch-urilor n cadrul arhitecturilor
superscalare de procesare, condiionate, dar mai ales cele codificate n
moduri de adresare indirecte. Sunt aduse argumente privind necesitatea
Introducere n problematica microarhitecturilor predictive i speculative 17
prediciei salturilor condiionate i indirecte, utilitatea pstrrii unei
informaii de corelaie ct mai bogate, eventual variabile ca lungime n
funcie de fiecare salt. Capitolul se constituie ntr-un adevrat state of the
art a structurilor de predicie dedicate att salturilor condiionate (de la
predictoare simple de tip BTB, corelate pe dou niveluri pn la cele mai
complexe markoviene, neurale, bazate pe arbori de decizie) ct i celor
indirecte (Target Cache, structuri hibride, cascadate pe mai multe niveluri,
structuri preluate din predicia valorilor). n ce privete cercetrile proprii
privind predicia salturilor / apelurilor indirecte, s-a nceput cu arhitectura
cea mai simpl, predictorul de tip last value i s-a continuat cu predictoare
contextuale PPM complet, de tip Target Cache, hibride etc. Cu ajutorul
predictorului contextual de tip PPM complet s-a ncercat determinarea
pattern-ului optim de cutare, stabilirea corelaiei existente ntre salturi n
funcie de context. n vederea mbuntirii acurateii prediciei aferente
instruciunilor de salt indirect au fost aduse cteva modificri structurii de
predicie Target Cache originare. Mai nti a fost studiat influena istoriei
globale a salturilor condiionate asupra prediciei, urmat de extinderea
informaiei de corelaie. Un ultim experiment privitor la aceast structur l-a
constituit ncercarea de mbuntire a acurateii de predicie printr-o
ignorare selectiv a efecturii unor predicii. A fost de asemenea exploatat
i o schem de predicie hibrid cu selecie bazat pe aritate.
n capitolul 6 se prezint contribuiile originale ale autorului n analiza
de performan i respectiv determinarea unor parametri optimali de
proiectare, pentru diferite structuri de predicie a valorilor instruciunilor.
Au fost implementate cele mai multe din schemele prezentate n capitolul 2
(predictorul LastValue, Incremental, Contextual, Hibrid) i s-au studiat
probleme legate de vecintatea valorilor i predicia valorilor instruciunilor
cu consecina execuiei speculative a instruciunilor avnd influene benefice
asupra timpului de procesare. De asemenea, n acest capitol s-a pus accentul
pe o nou contribuie original care pune n eviden conceptul de vecintate
a valorilor asociate regitrilor generali afereni CPU. Ideea asocierii cte
unui predictor de valori pentru anumii regitri predictoare centrate pe
regitri i nu pe instruciuni, ar putea implica tehnici arhitecturale novatoare
structuri de predicie mult mai simple, i, n consecin, performane
mbuntite, complexitate i costuri mai reduse ale microarhitecturilor
speculative. n continuare au fost propuse soluii de nlturare a neajunsului
provocat de predictorul hibrid (de departe cel mai bun) cu prioritizare
static, fix, n alegerea tipului de predictor component ce urmeaz a fi
folosit n procesul de predicie i care conduce la o soluie neoptimal.
Astfel, au fost descrise structurile de metapredicie implementate, care
selecteaz dinamic, bazat pe diverse grade de ncredere, structura care s fie
18 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
utilizat la un moment dat pentru predicie. Au fost propuse dou tipuri de
metapredictoare ne-adaptive, prin ataarea unui automat de confiden sau
registru binar de deplasare fiecrui predictor component, i respectiv unul
adaptiv, care utilizeaz o reea neural de tip feedforward
MultiLayerPerceptron cu algoritm de nvare backpropagation.
Capitolul 7 prezint cele mai elocvente rezultate cantitative i
interpretarea acestora din punct de vedere calitativ. S-a realizat o structurare
a rezultatelor pe trei categorii: prima dintre acestea evideniaz acurateea
prediciei salturilor indirecte obinut pe diverse scheme (Target Cache,
predictoare PPM, hibride). A doua categorie analizeaz probleme legate de
vecintatea i predictia valorilor instruciunilor de tip Load i aritmetico-
logice. De asemenea, au fost repetate experimentele pentru locaiile
memoriei de date. Ultima categorie de rezultate ncearc s dovedeasc
fezabilitatea conceptului novator de predictor de valori centrat pe regitrii
procesorului. Simulrile au fost efectuate pe procesoare Pentium III la 500
MHz parial efectuate sub sistem de operare Microsoft Windows98, 2000,
sau NT avnd la dispoziie emulatorul Cygwin i parial sub sistemul Linux
RedHat 7.3. Evalurile arhitecturilor propuse au fost fcute folosind o
colecie de simulatoare execution-driven specifice arhitecturilor ILP,
originale i puternic parametrizabile (dezvoltate din setul de instrumente
SimpleScalar 3.0). Simularea a fost realizat pe cele dou versiuni ale
benchmark-urilor SPEC (95 i 2000).
n capitolul 8 sunt trecute succint n revist contribuiile tiinifice ale
acestei lucrri, este evideniat ctigul cantitativ al fiecrei tehnici introduse,
sunt realizate comparaii ntre acestea i artate cteva dintre direciile
viitoare de cercetare. Concluziile acestei lucrri sugereaz necesitatea unor
analize teoretice mai profunde, mai generale i mai sistematizate n acest
domeniu, dublate i verificate prin simulri laborioase. Cercetrile abordate
n aceast lucrare trebuie continuate n scopul rezolvrii altor probleme ale
domeniului ILP rmase deschise, interesante i conexe cu cele prezentate
aici.
Lucrarea se ncheie cu o lista bibliografic a peste 120 de lucrri
utilizate pe parcursul cercetrii i conine peste 130 de figuri i 20 de tabele,
dintre care peste 60% coninnd rezultatele cercetrilor efectuate de ctre
autor i respectiv 30 de relaii analitice. Anexa 1 prezint dou exemple
justificative privind impactul la nivel microarhitectural al unor tehnici de
mbuntire a performanei procesoarelor prin predicia cu acuratee a
salturilor indirecte. Prima aplicaie, simpl la nivel high-level, dar mai
complex i dificil de urmrit la nivel asamblare urmrete s evidenieze
situaii n care extinderea informaiei de corelaie pentru instruciunile de
salt indirect are sens, contribuind la creterea acurateii prediciei acestora.
Introducere n problematica microarhitecturilor predictive i speculative 19
Cea de-a doua aplicaie evideniaz limitarea avantajului introdus de tehnica
de extindere a informaiei de corelaie pentru pattern-uri de salturi
condiionate de istorie redus. Exemplul simplu prezentat n Anexa 2
ilustreaz la un nivel redus necesitatea prediciei valorilor centrat pe
regitrii procesorului MIPS. Anexele 3, 4 i 5 reprezint exemple concrete
ce demonstreaz necesitatea unor abordri integratoare de gen hardware-
software, tehnologie-arhitectur, algoritmi, concepte, metode, cunoscut
fiind faptul c, n proiectarea procesoarelor noilor generaii, accentul
principal nu se mai pune pe implementarea hardware, ci pe proiectarea
arhitecturii n strns legtur cu aplicaiile poteniale. n Anexa 3 se
demonstreaz c predictibilitatea salturilor n unele programe poate fi
analizat exact, furnizndu-se o limit superioar a predictibilitii pe
algoritmii de sortare rapid. n Anexa 4 se evideniaz prin intermediul a
dou aplicaii practice cum dispersia adreselor ajut la reducerea
complexitii unor structuri microarhitecturale. Anexa 5 descrie posibilitatea
utilizrii algoritmilor greedy n optimizarea coliziunilor din structurile
pipeline. CD-ul care nsoete aceast lucrare cuprinde simulatoarele
(sursele, executabilele, bibliotecile necesare) dezvoltate pentru exploatarea
ideilor de cercetare expuse anterior i prezentate mai amplu pe parcursul
fiecrui capitol (structuri i mecanisme de predicie).
n finalul acestei introduceri doresc s mulumesc att conductorului
meu de doctorat, prof.dr.ing. Mircea Petrescu ct i domnului prof.dr.ing.
Lucian Vinan pentru sprijinul lor profesional continuu i de o nalt inut
tiinific precum i pentru ncrederea pe care mi-au acordat-o pe toat
perioada pregtirii prin doctorat. De asemenea, in s mulumesc domnilor
prof.dr.ing. Adrian Petrescu i prof.dr.ing. Vladimir Creu pentru analiza
competent i amabilitatea de a recenza aceast lucrare ntr-o versiune
anterioar. Cuvinte de recunotin vreau s transmit i colegilor mei sibieni
din catedra de Calculatoare, n special d-lui conf.dr.ing. Macarie Breazu
pentru discuiile profesionale extrem de fecunde cu privire la paradigmele
actuale de programare i posibilele lor implicaii n hardware. Din acelai
colectiv doresc s mulumesc unui tnr cercettor de perspectiv, prietenul
meu Arpad Gellert cu care de multe ori am depanat, compilat i simulat cot
la cot o parte din surse. Un gnd bun se ndreapt i spre personalul
Editurii Matrix Rom care s-a implicat cu generozitate i profesionalism n
editarea acestei lucrri. n final, i ntotdeauna pe nedrept la final, dei
cuvintele nu pot s exprime cu adevrat att ct ar trebui, vreau s
mulumesc familiei soiei Delilah i copilailor mei Adrian, Albert i
Deborah, pentru nelegerea, rbdarea i dragostea cu care m-au nconjurat
n toi aceti ani.
2. LIMITRI FUNDAMENTALE ALE
PARADIGMEI ILP. SOLUII.
2.1. LIMITAREA PRODUCTORULUI (FETCH
BOTTLENECK). SOLUII.
2.1.1. PROBLEMA N SINE
Din punct de vedere funcional procesoarele superscalare de nalt
performan sunt compuse din 2 mecanisme decuplate: mecanismul de
aducere (fetch) a instruciunilor pe post de productor i respectiv
mecanismul de execuie a instruciunilor pe post de consumator. Separarea
ntre cele 2 mecanisme (arhitectur decuplat) se face prin bufferele de
prefetch i staiile de rezervare, ca n figura 2.1. Instruciunile de ramificaie
i predictoarele hardware aferente acioneaz printr-un mecanism de reacie
ntre consumator i productor. Astfel, n cazul unei predicii eronate,
bufferul de prefetch trebuie s fie golit mcar parial iar adresa de acces la
cache-ul de instruciuni trebuie i ea modificat n concordan cu adresa la
care se face saltul.


Figura 2.1. Arhitectur superscalar decuplat


Limitri fundamentale ale paradigmei ILP. Soluii. 21
Rezultate statistice bazate pe simulri laborioase pe benchmark-uri
reprezentative (SPEC95, 2000) arat c o instruciune de salt apare la
fiecare 58 instruciuni dinamice executate, ceea ce nseamn c
productorul, prin rata de aducere a instruciunilor (fetch rate FR) este
limitat la cel mult 8, aducerea simultan a mai multor instruciuni fiind
inutil (fetch bottleneck). Aceast limitare fundamental ar avea consecine
defavorabile i asupra consumatorului cuantificat prin rata medie de
execuie a instruciunilor (issue rate IR) ntruct IRFR. n subcapitolul
2.2.2.6 sunt prezentate informaii cantitative i calitative care evideniaz
influena defavorabil a lrgimii reduse de band a mecanismului de aducere
a instruciunilor asupra eficacitii unor tehnici de comprimare a cii critice
de program, cum ar fi predicia valorilor. Pentru creterea gradului de
paralelism la nivelul instruciunilor este necesar dezvoltarea i
implementarea de noi tehnici care s reduc ntrzierile n procesare
(hazarduri) pe oricare din cele dou fluxuri: de instruciuni (control-flow) i
respectiv de date (data-flow).
Progresele semnificative n algoritmii de lansare n execuie impun
ns depirea acestei bariere. n acest sens, cercetrile actuale insist pe
mbuntirea mecanismelor de aducere a instruciunilor (fetch) prin
urmtoarele tehnici:
predicia simultan a mai multor ramificaii / tact rezultnd rate de
procesare (IR) sporite.
posibilitatea accesrii i aducerii simultane a mai multor basic -
block-uri din cache, chiar dac acestea sunt nealiniate, prin
utilizarea unor cache-uri multiport (trace-cache).
pstrarea unei latene reduse a procesului de aducere a
instruciunilor, n contradicie cu cele 2 cerine anterioare.
Latena unitii de aducere a instruciunilor, pipeline-izat, are un
impact profund asupra performanei procesorului, n primul rnd datorit
costului de reumplere a structurii pipeline, n cazul unui salt greit
predicionat, cu instruciuni de la adresa corect. Evident c, necesitatea
prediciei mai multor salturi simultan, precum i aliniamentul necontiguu n
memorie al instruciunilor contigue din punct de vedere al execuiei,
determin o crestere a latenei unitii de aducere a instruciunilor (fetch).
Ali factori care determin limitarea ratei de fetch a instruciunilor (FR -
Fetch Rate) sunt: lrgimea de band limitat a interfeei procesor - cache,
capacitatea redus a buffer-ului de prefetch, accesele cu miss n cache,
acurateea de predicie nesatisfctoare (procentajul cel mai ridicat obinut
de cercettori este de 98.29%, realizabil printr-un predictor neural de tip
Perceptron [Jim02]) i respectiv latena ridicat de refacere a contextului n
22 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
cazul unei predicii eronate. De asemenea, un alt factor care poate limita rata
de fetch a instruciunilor l constituie instruciunile de salt indirect,
revenirile din proceduri i ntreruperile software. Pstrnd contextul, o alt
limitare poate fi reprezentat de nealinierea aa numitelor blocuri atomice
[Pat98]. Unitatea de umplere fill unit (vezi subcapitolul 2.1.2) este forat
s creeze un segment de instruciuni (bloc atomic) mai mic dect
dimensiunea maxim a liniei din trace cache deoarece basic-block-ul
urmtor din irul dinamic de instruciuni care se execut este mai mare dect
spaiul rmas disponibil n linia din trace cache.
ntruct asupra conceptului Trace Cache se va insista n subcapitolul
urmtor (2.1.2), n continuare sunt descrise foarte pe scurt alte cteva soluii
alternative de extindere a lrgimii de band aferente mecanismului de fetch.
Mecanismul de predicie Branch Address Cache, propus n [Yeh93] ca
o extensie a structurii Branch Target Buffer [Smi84] este capabil s
prediconeze mai multe salturi simultan, determinnd adresele de nceput a
basic-blocurilor care se vor executa. Toate aceste target-uri multiple vor fi
trimise ctre un cache de instruciuni cu grad ridicat de ntreesere pentru a
fi efectuat procesul de fetch simultan ntr-un singur ciclu de tact.
O alt schem, propus n [Con95] permite extragerea a dou linii
necontigue din cache-ul de instruciuni. Suplimentar este utilizat un buffer
de colapsare pentru detecia branch-urilor scurte din interiorul unei linii de
cache i evacuarea instruciunilor dintre branch i target-ul su.
2.1.2. SOLUIE: TRACE CACHE. TRACE PROCESOARE.
O paradigm menit s extind conceptul de superscalaritate i care
poate constitui o soluie interesant fa de limitrile mai sus menionate, o
constituie trace - procesorul, adic un procesor superscalar avnd o
memorie trace - cache (TC) vezi figura 2.6. Ca i cache-urile de
instruciuni (IC), TC este accesat cu adresa de nceput a noului bloc de
instruciuni ce trebuie executat, n paralel cu IC. n caz de miss n TC,
instruciunea va fi adus din IC sau - n caz de miss i aici - din memoria
principal. Spre deosebire ns de IC, TC memoreaz instruciuni contigue
din punct de vedere al secvenei lor de execuie, n locaii contigue de
memorie. O linie din TC memoreaz un segment de instruciuni executate
dinamic i secvenial n program (trace - segment). Un trace poate conine
mai multe basic-block-uri (uniti secveniale de program). Aadar, o linie
TC poate conine N instruciuni sau M basic - block-uri, N > M, nscrise pe
parcursul execuiei lor.
Limitri fundamentale ale paradigmei ILP. Soluii. 23
Memoria TC este accesat cu adresa de nceput a basic - block-ului A,
n paralel cu predictorul multiplu de salturi (vezi figura 2.2). Acesta, spre
deosebire de un predictor simplu, predicioneaz nu doar adresa de nceput a
urmtorului basic - block ce trebuie executat ci toate cele (M - 1) adrese de
nceput aferente urmtoarelor (M - 1) basic - block-uri care urmeaz dup A.
Cei (M - 1) bii generai de ctre predictorul multiplu (taken/not taken)
selecteaz spre logica de execuie doar acele blocuri din linia TC care sunt
predicionate c se vor executa (n cazul acesta doar blocurile A i B ntruct
predictorul a selectat blocurile ABD c se vor executa, n timp ce n linia TC
erau memorate blocurile ABC).
O linie din TC conine:
N instruciuni n form decodificat, fiecare avnd specificat
blocul creia i aparine.
cele 2
M-1
posibile adrese destinaie aferente celor M blocuri
stocate n linia TC.
un cmp care codific numrul i "direciile" salturilor memorate
n linia TC.


Figura 2.2. Ansamblul trace-cache respectiv predictor multiplu
nainte de a fi memorate n TC, instruciunile pot fi predecodificate n
scopul nscrierii n TC a unor informaii legate de dependenele de date ce
24 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
caracterizeaz instruciunile din linia TC curent. Aceste informaii vor
facilita procese precum bypassing-ul datelor ntre unitile de execuie,
redenumirea dinamic a regitrilor cauzatori de dependene WAR (Write
After Read) sau WAW (Write After Write) ntre instruciuni etc., utile n
vederea procesrii Out of Order a instruciunilor. n [Lee02] este propus o
structur care extinde Trace Cache-ul cu un predictor hibrid de valori pentru
instruciunile cauzatoare de dependene. Prin predicia selectiv a valorilor
instruciunilor este redus numrul de accese la tabela de predicie, rezultnd
o utilizare mult mai eficient resurselor, permindu-se astfel reducerea cii
critice de program i implicit creterea ratei de execuie.
O linie din TC poate avea diferite grade de asociativitate n sensul n
care ea poate conine mai multe pattern-uri de blocuri, toate avnd desigur
aceeai adres de nceput (A), ca n figura 2.3.


Figura 2.3. Selecia dintr-o linie trace-cache asociativ
Aadar, segmentele ncepnd de la aceeai adres (A), sunt memorate
n aceeai linie asociativ din TC. Ca i n structurile TC neasociative,
verificarea validitii liniei selectate se face prin compararea (cutarea) dup
tag. Deosebirea de esen const n faptul c aici este necesar selectarea - n
conformitate cu pattern-ul generat de ctre predictorul multiplu - trace-ul cel
mai lung dintre cele coninute n linia respectiv. Este posibil ca aceast
selecie complex s dureze mai mult dect n cazul neasociativ i prin
urmare s se repercuteze negativ asupra duratei procesului de aducere a
instruciunilor (fetch). Avantajul principal ns, dup cum se observ i n
Limitri fundamentale ale paradigmei ILP. Soluii. 25
figur, const n faptul c este probabil s se furnizeze procesorului un
numr de blocuri "mai lung" dect un TC simplu. Astfel de exemplu, dac
pattern-ul real de blocuri executate este ABD, structura TC l va furniza fr
probleme, n schimb o structur TC neasociativ ce conine doar pattern-ul
ABC, evident va furniza n aceast situaie doar blocurile AB.
Pe msur ce un grup de instruciuni este procesat, el este ncrcat
ntr-o aa-numit "fill unit" (FU - unitate de pregtire), dup cum poate fi
vzut n figura 2.6. Rolul FU este de a asambla instruciunile dinamice, pe
msur ce acestea sunt executate, ntr-un trace - segment. Segmentele astfel
obinute sunt memorate n TC. Este posibil ca nainte de scrierea
segmentului n TC, FU s analizeze instruciunile din cadrul unui segment
spre a marca explicit dependenele dintre ele. Acest lucru va uura mai apoi
lansarea n execuie a acestor instruciuni ntruct ele vor fi aduse din TC i
introduse direct n staiile de rezervare aferente unitilor funcionale.
Unitatea FU se ocup deci de colectarea instruciunilor lansate n execuie,
asamblarea lor ntr-un grup de N instruciuni (sau M blocuri) i nscrierea
unui asemenea grup ntr-o anumit linie din TC. Exist desigur cazuri cnd
FU poate crea copii multiple ale unor blocuri n TC (vezi figura 2.4).
Aceast redundan informaional poate implica degradri ale performanei
(nlocuirea unor linii din trace cache care conin informaie util cu blocurile
redundante determin creterea ratei de miss i implicit diminuarea ratei
globale de procesare), dar pe de alt parte, lipsa redundanei ar degrada
valoarea ratei de fetch a instruciunilor deci i performana global.

Figura 2.4. Segmente asamblate pe timpul execuiei unei bucle de program
Se poate deci afirma c un TC exploateaz reutilizarea eficient a
secvenelor dinamice de instruciuni, reprocesate frecvent n baza a 2 motive
de principiu: localizarea temporal a trace-ului i respectiv comportarea
predictibil a salturilor n virtutea comportrii lor anterioare. Aadar, TC
26 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
memoreaz trace-uri n scopul eficientizrii execuiei programului i nu doar
n scopul eficientizrii procesului de aducere al instruciunilor. Aceasta, pe
motiv c un segment din trace conine numai instruciuni care se vor
executa. n cazul IC, dac ntr-un bloc exist o ramificaie efectiv,
instruciunile urmtoare se aduceau inutil ntruct nu s-ar fi executat.
Cum TC trebuie s lucreze ntr-o strns dependen cu predictorul de
salturi, se impune mbuntirea performanelor acestor predictoare. O
soluie de viitor ar consta ntr-un predictor multiplu de salturi, al crui rol
principal const n predicia simultan a urmtoarelor (M - 1) salturi asociate
celor maximum M blocuri stocabile n linia TC. De exemplu, pentru a
prediciona simultan 3 salturi printr-o schem de predicie corelat pe 2
nivele, trebuie expandat fiecare intrare din structura de predicie PHT
(Pattern History Table), de la un singur numrtor saturat pe 2 bii, la 7
astfel de automate de predicie, ca n figura 2.5. Predicia generat de ctre
primul predictor (taken/not taken) va multiplexa rezultatele celor 2
predictoare asociate celui de al doilea salt posibil a fi stocat n linia curent
din TC. Ambele predicii aferente primelor 2 salturi vor selecta la rndul lor
unul dintre cele 4 predictoare posibile pentru cel de-al treilea salt ce ar putea
fi rezident n linia TC, predicionndu-se astfel simultan mai multe salturi.
Dac predictorul multiplu furnizeaz simultan mai multe PC-uri, TC rezolv
elegant i problema aducerii simultane a instruciunilor pointate de aceste
PC-uri, fr multiportarea pe care un cache convenional ar fi implicat-o.


Figura 2.5. Predictor a 3 salturi succesive
Asemenea predictoare multiple n conjuncie cu structuri de tip TC
conduc practic la o nou paradigm a procesrii unui program main
numit "multiflow", caracterizat prin procesarea n paralel a mai multor
basic-block-uri dintr-un program. Cercetri bazate pe simulare asupra
conceptelor novatoare de TC i predictor multiplu, integrate ntr-o
Limitri fundamentale ale paradigmei ILP. Soluii. 27
arhitectur superscalar extrem de agresiv dezvoltat la Universitatea din
Michigan, SUA evideniaz urmtoarele aspecte [Pat97]:
creterea gradului de asociativitate a TC de la 0 (mapare direct) la 4
(asociativitate n blocuri de 4 intrri/ bloc) poate duce la creteri ale
ratei medii de procesare a instruciunilor de pn la 15%.
capaciti egale ale TC i respectiv memoriei cache de instruciuni (64
ko, 128 ko) conduc la performane cvasioptimale.
asociativitatea liniei TC nu pare a conduce la creteri spectaculoase de
performan.
performana global fa de o arhitectur echivalent, dar fr TC,
crete cu circa 24%, iar rata de fetch a instruciunilor n medie cu
92%.


Figura 2.6. Microarhitectur de procesare care nglobeaz un TraceCache
n [Jac99] sunt propuse trei optimizri ale trace-urilor de instruciuni
n cadrul unui trace procesor: scheduling-ul instruciunilor, propagarea
constantelor i colapsarea instruciunilor dependente de date.
Preprocesarea instruciunilor se face nainte de plasarea acestora n Trace
Cache. Scopul preprocesrii este de a completa prin transformri adiionale
aplicabile n momentul execuiei, i nu de a substitui optimizrile
compilatoarelor, pentru o mai bun utilizare a resurselor hardware (uniti
de execuie i lrgime de band a mecanismului de issue limitate).
Scheduling-ul instruciunilor este unul dinamic. Practic instruciunile nu
28 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
sunt mutate n alt ordine ci le sunt asignate prioriti care vor fi utilizate de
logica de execuie out-of-order. Dac o instruciune este identificat pentru
a-i fi crescut prioritatea, atunci i lanului de instruciuni dependente de
aceasta le va fi sporit prioritatea. De asemenea, instruciunilor care folosesc
valorile generate de trace-uri (basic-blocuri) anterioare le va fi decrementat
prioritatea, iar instruciunilor care vor fi productoare de valori pentru
alte trace-uri le va fi incrementat prioritatea. Colapsarea transform un lan
de instruciuni dependente de date ntr-o singur instruciune, mai complex,
cu mai mult de doi operanzi surs. Exploatat n conjuncie cu colapsarea
dependenelor de date, beneficiul scheduling-ului dinamic este mai
pronunat. Ctigul de performan msurat pe benchmark-urile SPEC95
este ntre 4% i 24%.
La ora actual, procesorul Intel Pentium IV reprezint primul procesor
comercial care nlocuiete nivelul L1 de cache clasic cu un Execution Trace
Cache. Dect s memoreze instruciunile standard x86, acest Trace Cache
reine instruciunile dup ce tocmai au fost decodificate n instruciuni
specifice RISC, numite microoperaii - ops. n fiecare linie a Trace Cache-
ului Intel stocheaz 6 ops. Un predictor de tip BTB cu 4096 de intrri
aferent trace-cache-ului (Trace Branch Predictor) este menit s sprijine aa
numitul Execution Trace Cache 8 way asociativ, cu mecanism de
evacuare de tipul Least Recently Used, care poate nmagazina pn la 12000
de microoperaii la versiunea Northwood a procesorului Intel realizat n
tehnologie de 130nm, i respectiv pn la 16000 de ops la versiunea Intel
Prescott implementat n tehnologie de 90nm [Intel03]. Dac predictorul d
gre trebuie ateptat 7 cicli pn cnd este adus instruciunea din nivelul L2
de cache sau mai mult dac trebuie accesat memoria central. Dac
predicia este corect atunci trace-cache-ul poate furniza 3 ops per ciclu de
tact scheduler-ului de execuie. ntruct memoria TC stocheaz doar
instruciunile contigue din punct de vedere al execuiei n zone contigue,
rezult c spaiul de cache, destul de limitat, este astfel mult mai eficient
folosit. Adresarea Execution Trace Cache se face cu adrese virtuale, nefiind
nevoie de conversie n adrese fizice pn la accesul spre nivelul L2 de
cache. Decodificatorul aferent procesorului Intel Pentium4 poate converti
cel mult o instruciune x86 per ciclu de tact, mai puin dect celelalte
arhitecturi. Cu toate acestea, ntruct microoperaiile sunt stocate n TC i
posibil refolosite parte din ele, lrgimea de band a unitii de decodificare
poate asigura o rat de 3 ops per ciclu de tact, cerut de unitatea de pre-
execuie (issue). Dac o instruciune x86 necesit mai mult de 4 ops
(instruciuni complexe, consumatoare de timp), atunci decodificatorul
extrage microoperaiile suplimentare dintr-o memorie ROM dedicat.
Limitri fundamentale ale paradigmei ILP. Soluii. 29
n final sunt subliniate cteva aspecte suplimentare referitoare la
memoria Trace Cache i structurile de predicie ajuttoare, care intervin la
unul din cele mai recente procesoare produse de Intel. Pentium4 Hyper-
Thread conine dou procesoare logice (execut practic dou fire n mod
concurent) i arbitreaz n fiecare ciclu de tact accesul la Trace Cache. n
fiecare ciclu de tact este deservit cte un microthread. n cazul n care unul
din firele de execuie este blocat atunci cellalt va putea accesa Trace
Cache-ul n fiecare ciclu. Intrrile din TC sunt extinse cu cte un cmp de
Tag avnd informaii despre fire alocarea fcndu-se dinamic dup
necesiti. Partajarea TC se poate face inegal ntre cele dou fire dup cum
este nevoie. Structurile de predicie pot fi i ele partajate sau duplicate.
Buffer-ul Return Stack care prezice destinaia instruciunii de revenire din
proceduri este duplicat deoarece este o structur foarte mic i perechile
Call / Return sunt predicionate mai bine pentru fiecare fir de execuie n
parte. Cte un registru de istorie global este pstrat independent pentru
fiecare thread n parte. Cu toate acestea, registrul de istorie global aferent
ntregului procesor reprezint o structur partajat avnd intrri cu Tag
pentru identificarea fiecrui thread n parte (procesor logic).
O tehnic de cretere a lrgimi de band a mecanismului de aducere
prin sporirea unitii atomice de instruciuni o reprezint promovarea
branch-urilor. Prin aceast tehnic, salturile condiionate, puternic
polarizate (spre taken T sau not taken NT) sunt convertite dinamic n
salturi predictibile static. Astfel, numrul salturilor prezise dinamic (chiar
simultan) va scdea, iar predictorul va suferi mai puin datorit
interferenelor. Unitatea de umplere a Trace Cache-ului este responsabil cu
conversia (filtrarea) branch-urilor. ntruct anumite salturi condiionate sunt
puternic polarizate spre not taken iar altele spre taken rezult c, prin
promovarea acestora, instruciunile din interiorul unei uniti atomice din
Trace Cache sunt garantat executate toate sau neexecutate toate. Branch-
urile candidate la promovare sunt detectate printr-un mecanism hardware
bazat pe o tabel de salturi care conin rezultatul fiecrui salt (T / NT) i un
automat de confiden reprezentat printr-un numrtor saturat. Valoarea
numrtorului reprezint de cte ori consecutiv branch-ul a avut acelai
rezultat. Unitatea de umplere indexeaz aceast tabela de cte ori branch-ul
este adugat segmentului de instruciuni care va fi inserat n Trace Cache.
Dac valoarea numrtorului este mai mare dect un threshold impus, atunci
saltul va fi promovat. n cazul n care un branch promovat se dovedete
a fi greit predicionat, procesarea instruciunilor este reluat din anteriorul
punct de verificare sfaritul basic-block-ului anterior. Prin tehnica de
promovare a branch-urilor, un segment de trace (un basic block) va avea
mai puini succesori, astfel c predictorul dinamic trebuie s selecteze ntre
30 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
mai puine inte posibile (numrul prediciilor necesare n fiecare ciclu de
tact scade).
Simulri laborioase realizate pe branchmark-urile SPEC95 au artat
c pentru un threshold de 64 este mbuntit rata de fetch cu 7%. De
asemenea, folosind acelai threshold, necesitatea de a efectua 2 predicii per
ciclu de tact este de 12%, iar necesitatea de a efectua 3 predicii per ciclu de
tact este de 3%, pentru a umple o linie de 16 instruciuni a Trace Cache-ului.
Tehnica de promovare poate fi realizat i static prin extinderea
arhitecturii setului de instruciuni (ISA) cu un cmp suplimentar de bii
pentru comunicarea salturilor puternic polarizate (T/NT) procesorului, n
momentul execuiei. Cu toate acestea, salturile care i schimb rezultatul pe
perioada execuiei (pe termen lung), dar rmn puternic polarizate (pe
termen scurt) sau sunt senzitive la datele de intrare pot fi scpate din
vedere n timpul analizei statice. Exist ns avantajul c salturile nu
trebuie s treac printr-o faz de nclzire (warm-up) pn s fie detectate
ca i promovabile [Pat98].
2.2. LIMITAREA CONSUMATORULUI (ISSUE
BOTTLENECK). SOLUII.
Rata de execuie a instruciunilor este fundamental limitat de ctre
hazardurile RAW ntre instruciuni (calea critic de program). Cauza
principal a acestei limitri o constituie natura intrinsec serial a
programelor, n care se dicteaz ordinea secvenial de transmitere a datelor
ntre instruciuni. Alte limitri nefundamentale, le reprezint hazardurile
structurale i hazardurile de ramificaie. Aceste ultime limitri nu
constituie o limit superioar de paralelism obtenabil la nivelul
instruciunilor ntruct pot fi depite prin diverse tehnici software sau
hardware. Hazardurile structurale sunt determinate de conflictele la
resurse comune, adic atunci cnd mai multe procese simultane aferente mai
multor instruciuni n curs de procesare, acceseaz o resurs comun
(principala cauz a conflictelor reprezentnd-o deci centralizarea resurselor).
Pentru a le elimina prin hardware, se impune de obicei multiplicarea acestor
resurse. De exemplu, un procesor care are un set de regitri generali de tip
uniport i n anumite situaii exist posibilitatea ca 2 procese s doreasc s
scrie n acest set simultan. O alt situaie de acest fel poate consta n accesul
simultan la memorie a 2 procese distincte: unul de aducere a instruciunii
Limitri fundamentale ale paradigmei ILP. Soluii. 31
(IF), iar cellalt de aducere a operandului sau scriere a rezultatului n cazul
unei instruciuni LOAD / STORE (nivelul MEM). Aceast situaie se
rezolv n general printr-o arhitectur Harvard a bus-urilor i cache-urilor
(spaii i bus-uri separate pe instruciuni i date).
O idee interesant bazat pe descentralizarea resurselor [Fra93] are n
vedere implementarea mai multor aa numite "Instruction Windows" (IW)-
un fel de buffere de prefetch multiple n locul unuia singur i respectiv pe
conceptul de multithreading. Lansarea n execuie a instruciunilor se face
pe baza determinrii celor independente din fiecare IW. De asemenea,
trebuie determinate i dependenele inter- IW- uri. Ideea principal const n
execuia paralel a mai multor secvene de program aflate n IW- uri
diferite, bazat pe mai multe uniti funcionale (multithreading). Astfel de
exemplu, 2 iteraii succesive aferente unei bucle de program pot fi procesate
n paralel dac sunt memorate n IW- uri distincte. O asemenea idee
faciliteaz implementarea conceptelor de expandabilitate i scalabilitate,
deosebit de utile n dezvoltarea viitoare a arhitecturii.
Hazardurile de ramificaie sunt generate de ctre instruciunile de
ramificaie (branch). Cauzeaz pierderi de perfoman n general mai
importante dect hazardurile structurale i de date, mai ales la procesoarele
superscalare. Efectele defavorabile ale instruciunilor de ramificaie pot fi
reduse prin metode soft (reorganizarea programului surs), sau prin
metode hard care determin n avans dac saltul se va face sau nu (branch
prediction) i calculeaz n avans noul PC (program counter) vezi pe larg
n capitolul 5.
n momentul de fa se disting mai multe abordri moderne de
exploatare i cretere a paralelismului la nivelul instruciunii (ILP):
= Procesoarele superscalare extrag paralelismul dinamic prin execuie
speculativ, multithreading sau trimitere spre procesare "out of order":
trace procesorul [Rot97], procesoare multithread [Wall99, Mar00],
arhitectura multiscalar [Fra93]. Trace procesorul i procesorul
superspeculativ speculeaz att dependenele de date ct i cele de
control, n timp ce arhitectura multiscalar este susintoarea unei
abordri multithread cu expediere vast de fire spre execuie.
= Eforturile de mbuntire tehnologic i arhitectural sunt canalizate
spre reducerea decalajului tehnologic dintre un procesor avansat i
sistemul ierarhic de memorie (selective victim cache) [Sti94].
= Ali factori care determin limitarea ratei de issue a instruciunilor sunt:
lrgimea de band limitat a interfeei procesor - cache, miss-urile n
cache-ul de date, alias-urile de memorie. Pentru a contracara efectul
acestor factori se poate utiliza cu succes mecanismul Data Write Buffer
32 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
(DWB). DWB reprezint un mic procesor de ieire care lucreaz n
paralel cu CPU degrevndu-l pe acesta de sarcina scrierii n cache. DWB
ofer porturi de scriere virtuale multiple spre deosebire de DataCache
care conine un numr limitat de porturi (LOAD/STORE). DWB rezolv
prin "bypassing" elegant hazardurile de tip "LOAD after STORE" cu
adrese identice, deseori nemaifiind deci necesar accesarea sistemului de
memorie de ctre instruciunea LOAD.
= Prin colapsarea dependenelor reale de date ntre instruciuni se urmrete
eliminarea / reducerea parial a efectelor defavorabile cauzate de
hazardurile RAW (deblocarea instruciunilor dependente aflate n
ateptare), folosind dac este posibil uniti aritmetico-logice cu mai mult
de dou intrri. Tehnicile hardware recente de reutilizare dinamic a
instruciunilor i predicia valorilor, menite s exploateze redundana
existent n programe, reducnd timpul de execuie al acestora prin
colapsarea dinamic a dependenelor de date, sunt reprezentative n acest
sens [Lip96, Sod00].
= Schedulerele de instruciuni exploateaz paralelismul n momentul
compilrii prin rearanjarea codului surs, dezambiguizarea referinelor la
memorie, metode de in lining aplicate procedurilor, tehnici de optimizare
local i/sau global (loop unrolling, list/trace scheduling, software
pipelining), etc. Procesoarele EPIC [Vin00a], cu paralelism explicit la
nivelul instruciunilor (vezi Intel Itanium 2), prin execuia speculativ i
predicativ urmresc creterea abilitii compilatoarelor n exploatarea
paralelismului n programele cu procentaj ridicat de instruciuni de
ramificaii [Sias04].
= Dezvoltarea de noi instrumente de cercetare care aparin i altor domenii
(inteligen artificial, algorimi genetici etc) pentru creterea acurateii de
predicie a ramificaiilor de program - predictoare neuronale, genetice
[Vin00a].
n continuare se va insista foarte pe scurt asupra ultimelor dou idei,
anterior enunate. Dac pn recent, majoritatea compilatoarelor urmau un
stil evoluionist de dezvoltare, bazat pe mbuntirea metodelor tradiionale
de scheduling (global / local) pentru creterea paralelismului la nivelul
instruciunilor, o ultim abordare realizat de compilatorul IMPACT
[Sias04], structural i bazat pe transformri radicale la nivelul
controlului programului (execuie predicativ i speculativ, replicare de
cod), ncearc o exploatare ct mai eficient a caracteristicilor procesoarelor
EPIC, avnd acelai deziderat de performan.
n calea optimizrilor compilatorului pentru creterea paralelismului la
nivelul instruciunilor se remarc cteva obstacole:
Limitri fundamentale ale paradigmei ILP. Soluii. 33
instruciunile de salt, care descriu modul de traversare al grafului de
control. Efectul defavorabil este redus prin execuie predicativ i
folosirea regitrilor booleeni de gard. Dependenele de control sunt
transformate n dependene de date.
false dependene: accesele la memorie i apelurile de subrutine
reprezint bariere n calea micrii codului (percolation [Vin00a]),
blocnd att scheduling-ul ct i optimizarea acestuia. IMPACT ncearc
eliminarea acestor false dependene prin algoritmi compleci de analiz
interprocedural [Sias04].
dependenele ocazionale, provocate de execuia out-of-order a
instruciunilor load / store, nu pot fi nlturate static fr suport
suplimentar hardware pentru execuie speculativ (analiza antialias
dinamic ce presupune utilizarea de cod i regitrii suplimentari)
nerezolvat nc de IMPACT.
nedeterminismul, poate fi introdus, spre exemplu, de accesele cu miss la
memoria cache de date a instruciunilor cu referire la memorie.
Compilatorul dezvoltat n laboratoarele de cercetare ale universitii
din Ilinois (IMPACT) i dedicat versiunii de procesor EPIC pe 64 bii (Intel
Itanium 2), dezvoltat de Intel n colaborare cu Hewlett-Packard, realizeaz o
analiz interprocedural, inlining aplicat procedurilor, dar i anumite
modificri impuse n urma obinerii informaiilor de profil. Un exemplu de
astfel de optimizare o reprezint type feedback (vezi detalii n subcapitolul
4.1), care, bazat pe informaii de profil, transform apelurile indirecte de
funcii n apel direct i crora li se poate aplica apoi tehnica de inlining.
Abordarea structural se refer la procesul de simplificare a grafului de
control, generarea de zone de cod largi, stabile din punct de vedere al
execuiei (trace-uri) i reorganizarea acestora. Dintre avantajele
compilatorului IMPACT relativ la arhitectura Intel Itanium 2 se remarc
speed-up-ul obinut fa de compilatorul GNU gcc (pn la 2.3 [Sias04]),
reducerea numrului de salturi cu 27%, reducerea numrului de cicli de
penalizare n cazul unei predicii eronate cu 22%, mbuntirea eficienei
procesului fetch instruciune i diminuarea cu 15% a stagnrilor datorate
miss-urilor n cache-ul de instruciuni. Ca i efecte secundare, ocazional,
prin execuia speculativ a instruciunilor load pot apare ntrzieri
suplimentare datorate miss-urilor n cache-ul de date.
Datorit nvechirii paradigmei actuale de cercetare, cercettorii
[Vin01] opineaz c, pentru continuarea creterii exponeniale a
performanei microprocesoarelor, sunt necesare idei noi, revoluionare chiar,
bazate pe o abordare integratoare, care s mbine eficient tehnicile de
scheduling software cu cele dinamice, de procesare hardware. n prezent,
separarea ntre cele 2 abordri este destul de accentuat. n acest sens,
34 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
programele ar trebui s expliciteze paralelismul intrinsec ntr-un mod mai
clar. Cercetri actuale arat c un program optimizat static merge mai prost
pe un procesor Out of Order dect pe unul In Order [Tat00]. Printre cauze se
amintesc expansiunea codului dup reorganizare, noile dependene de date
introduse prin execuia condiionat a instruciunilor, faptul c instruciunile
gardate nu permit execuia Out of Order etc.
Cercetarea algoritmilor ar trebui s in seama i de concepte precum,
cel de cache, n vederea exploatrii localitilor spaiale ale datelor prin
chiar algoritmul respectiv. n general, algoritmii nu in cont la ora actual de
caracteristicile mainii i acest lucru nu este bun pentru c algoritmul nu
ruleaz ntr-un "eter ideal"[Vin00a] ci, ntotdeauna pe o main fizic avnd
limitri importante (de ex. elementele unui tablou se pot afla parial n cache
i parial pe disc!). Astfel, dihotomia teorie - practic devine una artificial
i cu implicaii negative asupra performanei globale a mainii.
Realizatorii aplicaiilor obiectuale i vizuale trebuie s in cont de
faptul c polimorfismul genereaz apeluri indirecte de funcii, greu
predictibile la nivel hardware [Flo04]. Preocuprile programatorilor nu
trebuie s vizeze doar interfaa care atrage sau diversele artificii care fac din
utilizator un simplu robot ci i implicaiile pe care aplicaia creat o are
asupra microarhitecturii. Scopul aplicaiei trebuie s fie utilizarea optim
att a resurselor software (biblioteci, elemente de interfa) avute la
dispoziie ct i a algoritmilor / conceptelor de programare cunoscute
(declaraii de funcii virtuale, apeluri de funcii prin pointer chiar i acolo
unde nu este cazul). n caz contrar, "rul" (a se citi n primul rnd salturi
indirecte, cod obiect masiv, resurse hardware suplimentare) se rsfrnge
asupra performanelor arhitecturii. n ce-i privete pe proiectanii de
arhitecturi, schemele propuse de acetia ar putea fi mai eficiente dac nu ar
analiza numai codul obiect al benchmark-urilor avute la dispoziie
(dezbrcat de orice semantic) ci ar privi "mai sus" spre sursa de nivel nalt
a programelor simulate.
Abordarea strict convenional, situat doar la nivelul arhitecturilor
de calcul, pare s fie insuficient pentru ndeplinirea dezideratului de
performan ridicat. O abordare mai neconvenional, care s utilizeze
concepte ale unor domenii considerate pn n prezent a nu avea legatur cu
arhitectura sistemelor de calcul (arbori de decizie, reele neuronale,
algoritmi genetici, algoritmi de predicie PPM) poate genera rezultate
surprinztoare, precum i o mbuntire a paradigmei arhitecturilor
avansate. n [Vin99b, Jim02] sunt propuse, cu mare success, structuri de
predicie alternative care fac o legtur neateptat ntre domeniul
arhitecturii procesoarelor avansate i cel al recunoaterii formelor.
Predictoarele neurale de tip Perceptron i MultiLayerPerceptron costituie
Limitri fundamentale ale paradigmei ILP. Soluii. 35
soluii fezabile hardware i cu acuratei de predicie cel puin de nivelul
predictoarelor corelate pe dou niveluri. n [Vin00b] este descris modul de
determinare automat cu ajutorul arborilor binari a unor noi scheme de
predicie a salturilor pe baza unor algoritmi genetici, pornind de la o
populaie iniial de predictoare cunoscute. Exist cercetri cu rezultate
remarcabile n domeniul prediciei salturilor [Vin99a] sau cel al prediciei
valorilor [Saz99], care utilizeaz lanuri Markov i algoritmul de predicie
bazat pe potrivire parial (PPM complet), folosit cu succes n compresia
datelor. n subcapitolul 5.3 am descris cteva cercetri proprii privind
predicia target-urilor salturilor indirecte folosind predictoare bazate pe
context i algoritmul PPM-complet. Dintre cele mai recente cercetri, se
poate ilustra ca exemplu n sprijinul ideii de abordare neconvenional,
folosirea arborilor de decizie pentru selecia celor mai relevante
caracteristici necesare procesului de predicie [Fern03].
2.2.1. REUTILIZAREA DINAMIC A INSTRUCIUNILOR
Reutilizarea dinamic a codului se nscrie n domeniul optimizrilor
arhitecturilor de calcul i s-a manifestat pentru prima dat la nivel software,
prin tehnica de programare dinamic metod de rezolvare a problemelor a
cror soluie se construiete dinamic n timp. Introdus nc din 1957 de
ctre matematicianul american Richard Bellman [Bell57], programarea
dinamic opereaz ntr-o manier bottom-up, nerecursiv i presupune
cunoaterea exact, de la nceput, a subproblemelor care nu sunt
independente aprute n descompunerea problemei iniiale. Pentru a fi
eficient, metoda programrii dinamice trebuie s rezolve fiecare
subproblem o singur dat i s memoreze soluia acesteia pentru a o
putea utiliza n cazul reapariiei aceleai subprobleme n cadrul unei alte
subprobleme. Fazele rezolvrii unei probleme prin metoda programrii
dinamice sunt:
rezolvarea subproblemelor de dimensiunile cele mai mici care apar
n descompunerea problemei iniiale i memorarea soluiilor
acestora;
rezolvarea treptat a subproblemelor de dimensiuni din ce n ce mai
mari prin combinarea soluiilor subproblemelor de dimensiuni mai
mici i memorarea soluiilor acestora pn la obinerea rezultatului
final.
Reutilizarea dinamic a instruciunilor (reutilizare de tip fine grain)
este o tehnic non-speculativ menit s exploateze fenomenul de repetiie
36 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
dinamic a instruciunilor, reducnd cantitatea de cod - main necesar a fi
executat i care prin colapsarea dependenelor de date determin
mbuntirea timpului de execuie al instruciunilor crescnd gradul de
paralelism al arhitecturii. Ideea originar aparine cercettorilor A. Sodani i
G. Sohi i a fost introdus n 1997, la conferina ISCA 97 inut la Denver,
SUA. n [Sod97] se arat c reutilizarea unor instruciuni sau secvene de
instruciuni este relativ frecvent i se datoreaz modului compact de scriere
a programelor precum i caracteristicilor intrinseci ale structurilor de date
prelucrate. O instruciune dinamic este reutilizabil dac ea opereaz
asupra acelorai intrri i produce aceleai rezultate precum o instan
anterioar a aceleiai instruciuni. Ideea de baz este c dac o secven de
instruciuni se reia n acelai context de intrare, atunci execuia sa nu mai
are sens fiind suficient o simpl actualizare a contextului de ieire, n
concordan cu unul precedent memorat. Se reduce astfel numrul de
instruciuni executate dinamic, acionndu-se direct asupra dependenelor de
date ntre instruciuni. Instruciunile reutilizate nu se vor mai executa din
nou, contextul procesorului fiind actualizat n conformitate cu aciunea
acestor instruciuni, bazat pe istoria lor memorat.
n [Sod98] se analizeaz mai nti dac gradul de reutilizare a
instruciunilor dinamice este semnificativ i se arat c rspunsul este unul
afirmativ. Mai puin de 20% din numrul instruciunilor statice care sunt
repetate implic o repetabilitate de peste 90% a instruciunilor dinamice. n
medie armonic, msurat pe benchmarkurile SPEC95, 26% dintre
instruciunile dinamice sunt reutilizabile. Exist n acest sens 2 cauze
calitative: n primul rnd faptul c programele sunt scrise n mod generic,
ele opernd asupra unei varieti de date de intrare, iar n al doilea rnd,
aceste programe sunt scrise ntr-un mod concis aceasta semnificnd
meninerea unei reprezentri statice compacte a unei secvene dinamice de
operaii n vederea obinerii rezultatelor dorite (n acest sens structurile de
tip recursiv, buclele de program etc. sunt reprezentative).
Pentru o mai bun nelegere a fenomenului de repetiie a
instruciunilor, execuia dinamic a programelor este analizat pe trei
niveluri: global, de funcie i local (n interiorul funciei). n analiza global,
pattern-urile de date utilizate n programe sunt reinute ca entiti ntregi i
determinate sursele de repetiie ale instruciunilor (intrri externe, iniializri
globale de date sau valori interne ale programelor). ntruct repetiia
instruciunilor se datoreaz n mare msur ultimelor dou surse de repetiie,
se impune concluzia c fenomenul de repetiie este mai mult o proprietate a
modului n care calculul este exprimat n program i mai puin o proprietate
a datelor de intrare. Concluziile generate n urma analizei la nivel de funcie
sunt c de foarte multe ori funciile sunt invocate repetat cu exact aceleai
Limitri fundamentale ale paradigmei ILP. Soluii. 37
valori ale parametrilor de intrare i c relativ puine apeluri de funcii nu au
argumente repetate. Chiar i n cazul unor apeluri repetate ale unei funcii cu
parametrii de intrare diferii, procentajul de instruciuni dinamice
reutilizabile poate fi semnificativ. La nivelul analizei locale, instruciunile
funciilor/procedurilor sunt clasificate n funcie de sursa valorilor folosite
(exemplu: argumentele funciei, date globale, valori returnate de alte funcii
etc.) i funcie de sarcina realizat (exemplu: salvare - restaurare regitri,
prolog - epilog, calcul adrese globale etc.). Majoritatea repetiiei
instruciunilor se datoreaz valorilor globale sau argumentelor funciei dar i
funciilor prolog i epilog.
Preluat din [Sod97], se prezint n continuare un exemplu sugestiv n
care apare fenomenul de reutilizare dinamic a instruciunilor. Funcia func
(figura 2.7.a) caut o valoare x n tabloul list de dimensiunea size. Funcia
principal main_func (figura 2.7.c) apeleaz funcia func de mai multe ori,
cutnd cte un alt element n acelai tablou la fiecare apel. La apelul
funciei func tabloul este parcurs element cu element n mod iterativ,
cutndu-se valoarea pna la captul tabloului, condiia de ncheiere a
cutrii reprezentnd-o gsirea elementului. Expandarea buclei din interiorul
funciei func corespondent unei iteraii este prezentat n figura 2.7.b.
Instanele dinamice ale instruciunilor generate de primul apel func sunt
descrise n figura 2.7.d. n fiecare iteraie a buclei, instruciunea 2 este
dependent de parametrul size, instruciunile 3 i 4 sunt dependente de
parametrul list, instruciunea 5 este dependent att de list ct i de valoarea
cutat n tablou, iar instruciunea 6 este dependent de contorul i. Dac
func e apelat din nou n acelai tablou list (de aceeai dimensiune size), dar
cu alt parametru de cutare, atunci toate instanele dinamice ale
instruciunilor 1 4 i 6 vor produce aceleai rezultate pe care le-au produs
la apelul anterior al funciei func. Doar instanele dinamice ale instruciunii
5 produc rezultate care ar putea diferi de apelurile anterioare ale funciei
func. Repetarea rezultatelor instanelor dinamice ale instruciunilor 1 4 i 6
este direct atribuit faptului c func a fost scris ca o funcie generic de
cutare ntr-un tablou, dar n acest caz particular, doar unul din parametri se
modific ntre apeluri diferite. Chiar dac func ar fi apelat cu toi parametri
diferii pentru fiecare apel n parte, instanele dinamice diferite ale
instruciunii 6 (i = 0, i = 1, i = 2,) vor produce aceleai valori generate n
primul apel al funciei, consecin a utilizrii buclelor pentru a exprima
calculele dorite ntr-o manier concis. Dac parametrul size ar fi diferit la
un al doilea apel al funciei func, atunci doar min(size1, size2) instane
dinamice ale instruciunii 6 vor produce aceleai rezultate. Prin urmare,
acest exemplu sugestiv arat faptul c repetabilitatea instruciunilor
38 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
dinamice este considerabil i n consecin reutilizarea instruciunilor este
posibil. Instanele dinamice marcate cu "*" vor realiza aceleai operaii
pentru ambele apeluri ale funciei func.


Figura 2.7. Exemplu ilustrnd repetabilitatea instruciunilor
Pentru o nelegere mai profund a conceptului de reutilizare dinamic
a instruciunilor se impune cunoaterea rspunsului la unele ntrebri: cror
caracteristici ale structurilor de programe scrise n limbaje de nivel nalt li
se datoreaz gradele ridicate de reutilizabilitate ? Care sunt relaiile ntre
caracteristicile programrii obiectuale i reutilizarea dinamic ori n ce fel
contribuie tehnicile de optimizare locale i globale aferente programelor
Limitri fundamentale ale paradigmei ILP. Soluii. 39
asupra reutilizabilitii instruciunilor main ? [Vin02] n ciuda
cercetrilor din domeniu aceste probleme rmn nc neelucidate.
Bazat n principal pe premisele anterior expuse, Sodani i Sohi
dezvolt 3 scheme de reutilizare dinamic a instruciunilor, primele dou la
nivel de instruciune iar ultima, la nivel de lan de instruciuni dependente
RAW [Sod97]. Instruciunile deja executate, se memoreaz ntr-un mic
cache numit buffer de reutilizare (Reuse Buffer - RB). Acesta poate fi
adresat cu PC-ul pe timpul fazei de aducere a instruciunii, avnd i un
mecanism pentru invalidarea selectiv a unor intrri bazat pe aciunile
anumitor evenimente (vezi figura 2.8). RB trebuie s permit i un
mecanism de testare a reutilizabilitii instruciunii selectate. Testul de
reutilizare verific dac informaia accesat din RB reprezint un rezultat
reutilizabil sau nu. Detaliile de implementare ale testului depind de fiecare
schem de reutilizare folosit. Trebuie tratate dou aspecte privind
managementul RB: stabilirea instruciunii care va fi plasat n buffer i
meninerea consistenei bufferului de reutilizare. Decizia privind modul de
inserare a instruciunilor n RB poate varia de la una nerestrictiv ("no
policy"), care plaseaz toate instruciunile n buffer, n cazul n care nu sunt
deja prezente, la una mai selectiv, care filtreaz instruciunile ce vor fi
inserate dup probabilitatea statistic de a fi reutilizate. Problema
consistenei are n vedere garantarea corectitudinii rezultatului instruciunii
reutilizate din RB. Meninerea consistenei informaiilor n RB depinde de
fiecare schem de reutilizare n parte dup cum se va putea constata n cele
ce urmeaz.


Figura 2.8. Structura hardware a bufferului de reutilizare
n vederea compatibilizrii cu modelul superscalar care lanseaz n
execuie mai multe instruciuni simultan, RB este n general multiport
40 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
pentru a putea permite reutilizarea mai multor instruciuni de execuie
curent. Este evident c gradul de multiportare al RB-ului nu are sens a fi
mai mare dect fereastra maxim de execuie a instruciunilor.
n cazul reutilizrii la nivel de instruciune, o intrare n RB ar putea
avea urmtorul format:

Tag Op1 Op2 Adr Rez Rez_valid Mem_Valid

Tag ar putea fi reprezentat de ctre PC-ul instruciunii ntr-o implementare
asociativ.
Op1, Op2 reprezint numele regitrilor utilizai de ctre instruciune.
Rez reprezint rezultatul actual al instruciunii, cel care va fi reutilizat n
caz de hit n bufferul RB.
Rez_Valid indic, n cazul instruciunilor aritmetico-logice, dac
rezultatul Rez este valid sau nu. n cazul instruciunilor Load
i Store, dac e setat, arat c adresa instruciunii este valid n
RB i poate fi deci reutilizat. Este setat odat cu introducerea
instruciunii n RB. Este resetat automat de ctre orice
instruciune care scrie ntr-unul din regitrii surs (Op1, Op2).
Adr este adresa (reutilizabil) de memorie n cazul unei instruciuni
Load/Store.
Mem_Valid indic dac valoarea din cmpul Rez este reutilizabil n
cazul unei instruciuni Load. Bitul este setat la nscrierea
instruciunii Load n RB. Resetarea bitului se face prin orice
instruciune Store avnd aceeai adres de acces.
Rezult c pentru instruciunile aritmetico-logice reutilizarea este
asigurat dac bitul de stare Rez_Valid = 1. De asemenea, Rez_Valid = 1
garanteaz adresa corect pentru orice instruciune Load/Store i scutete
procesorul de calculul ei (adresare indexat). n schimb, rezultatul unei
instruciuni Load nu poate fi reutilizat dect dac Mem_Valid = 1 i
Rez_Valid = 1. Plusul de performan datorat reutilizrii dinamice a
instruciunilor se datoreaz att scurtcircuitrii unor nivele din structura
pipe ct i reducerii hazardurilor structurale i deci a presiunii asupra
diverselor resurse hardware. Prin reutilizarea instruciunilor se evit
stagnarea n staiile de rezervare (Instruction Window) i timpul de execuie,
rezultatele instruciunilor reutilizate fiind scrise mai repede n bufferul de
reordonare. Rezult o disponibilizare a unitilor funcionale de execuie
care nu vor mai avea de procesat instruciunile reutilizate i o deblocare mai
rapid a instruciunilor dependente RAW de cea reutilizat. De remarcat c
Limitri fundamentale ale paradigmei ILP. Soluii. 41
evacuarea din RB trebuie s in cont de faptul c instruciunile invalidate
trebuie s aib prioritate n acest proces.
n cazul unei scheme care reutilizeaz un ntreg lan de instruciuni
dependente, structura unei intrri RB este aceeai cu cea precedent, doar c
aici apar dou noi subcmpuri, asociate operanzilor surs, notate SrcIndex1
respectiv SrcIndex2. Acestea pointeaz spre adresele instruciunilor din RB
care au produs operandul surs 1 respectiv operandul surs 2, afereni
instruciunii curente memorate n RB. Aici, instruciunile sunt clasificate n
3 categorii: surs care produc rezultate pentru alte instruciuni din lan
numite dependente i respectiv independente a cror operanzi surs nu
sunt produi n cadrul lanului de instruciuni considerat. O alt diferen
esenial fa de schema anterioar const n faptul c pentru schema de
reutilizare la nivel de lan de instruciuni (dependente), n cazul modificrii
unui operand surs, sunt invalidate doar instruciunile independente care
conin acest operand. Pentru a nelege mai bine beneficiile acestei reguli
selective de invalidare, se consider urmtoarea secven de instruciuni
dependente RAW [Vin02]:

I: R1 <- 0
J: R2 <- R1 + 5
K: R3 <- R1 + R2
.
R: R1 <- 6

n acest caz, procesarea instruciunii R nu va invalida instruciunile J
i K pentru c acestea sunt dependente de instruciunea I. Mai mult,
instruciunea R nu va invalida nici chiar instruciunea independent I, pentru
simplul motiv c registrul R1 nu este surs n aceast instruciune. Astfel, la
o nou instaniere a lanului IJK, rezultatele acestuia (R1 = 0, R2 = R3 = 5)
vor fi reutilizate, nemaifiind necesar procesarea efectiv a instruciunilor
respective. Din pcate, n cazul schemei anterioare acesteia (cea cu
reutilizare la nivelul unei singure instruciuni), instruciunea R ar fi
invalidat, n mod conservator i inutil, instruciunile J i K, nepermind
astfel reutilizarea acestora dei ele sunt, evident, reutilizabile.
O alt problem care se pune [Vin02] se refer la integrarea
instruciunilor de ramificaie (branch) n schemele de reutilizare dinamic.
Considerarea acestor instruciuni conduce la restricii n politica de
introducere a instruciunilor n RB. Pentru a analiza aceast problem, se
consider urmtoarea secven de instruciuni:


42 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
I1: R1 <- 1
I2: BRANCH <Cond>, I4; If <Cond>=True, salt la I4
I3: R1 <- 0
I4: R2 <- R1+4

n cazul execuiei speculative a instruciunilor, politica de introducere
a instruciunilor n RB, aa cum a fost ea descris anterior, poate fi una
inadecvat. Mai nti, se va considera schema de reutilizare la nivel de
instruciune, anterior descris. Se presupune c I2 este iniial predicionat
ca Not Taken. Ar rezulta c instruciunile I3 i I4 se introduc n RB. n cazul
n care, ulterior, se constat c I2 a fost greit predicionat, este necesar
refacerea contextului i execuia cii Taken. n consecin, este posibil
reutilizarea instruciunii I4, care va genera un rezultat eronat ntruct
operandul surs R1=0, aa cum l-a modificat I3. Pentru rezolvarea acestei
anomalii se impune ca o instruciune speculativ s fie inserat n RB numai
dac instruciunile sale surs sunt nespeculative. Astfel, n exemplul
considerat, cum I3 este speculativ, rezult c I4 nu se va introduce n RB i
deci eroarea anterior semnalat nu mai apare.
n cazul schemei cu reutilizare la nivel de lan de instruciuni
dependente, situaia este mai complicat. n acest caz, dup introducerea
instruciunilor I3 i I4 n RB, va exista un pointer de la I4 la I3 semnificnd
faptul c I3 este surs. Aadar, cnd datorit prediciei eronate se va procesa
ramura alternativ, I4 nu se va mai reutiliza pentru c legtura sa cu I3 va
disprea, n acest caz instruciunea sa surs fiind I1. Totui, aceiai
problem care a aprut la schema anterioar va aprea i n acest caz dac I4
ar fi fost inserat n RB ca instruciune independent (spre exemplu, dac
din anumite motive, I3 nu ar mai fi n RB). Prin urmare, n cazul acestei
scheme, se impune ca o instruciune speculativ s fie inserat n RB numai
dac instruciunile sale surs sunt nespeculative sau dac toate instruciunile
surs sunt prezente n RB.
Preluat din [Con99] se prezint o idee relativ nou pentru exploatarea
repetiiei dinamice a instruciunilor bazat pe integrarea unor tehnici
hardware-software. Mai precis, n aceast abordare compilatorul analizeaz
codul n scopul identificrii acelor regiuni de program care ar putea fi
reutilizate pe timpul execuiei dinamice a instruciunilor. Compilatorul
comunic codului obiect prin intermediul unei interfee simple, special
concepute n acest scop, regiunea de cod reutilizabil, specificnd desigur
intrrile i ieirile aferente acesteia. Pe timpul execuiei programului,
rezultatele acestor regiuni reutilizabile sunt memorate n buffer-e hardware
pentru a fi potenial reutilizate. Spre exemplificarea acestor idei se consider
o macro-definiie preluat din cadrul benchmarkului 008.espresso,
Limitri fundamentale ale paradigmei ILP. Soluii. 43
aparinnd setului SPEC. Aceasta calculeaz numrul biilor setai pe unu
logic din cadrul unui cuvnt v pe 32 de bii. n acest scop se mparte
cuvntul v n 4 octei iar dup prelucrarea lor, fiecare octet este utilizat pe
post de index n tabela bit_count. Apoi, rezultatele obinute pentru fiecare
octet al cuvntului, sunt nsumate, rezultnd astfel numrul de bii de unu
logic din cuvntul v.

#define count_ones(v)\
(bit_count[v&255] + bit_count[(v>>8)&255]\
+ bit_count[(v>>16)&255]
+ bit_count[(v>>24)&255])

Considernd: A- instruciuni aritmetico-logice, L- Load, R deplasare
la dreapta, S deplasare la stnga, graful dependenelor de date aferent
secvenei anterioare scrise n limbajul C, este prezentat n figura 2.9. Se
observ n mod clar c ntregul graf conine o singur intrare (r3 cu
valoarea v) i respectiv genereaz o singur ieire (r26 numrul biilor
setai pe unu logic). Compilatorul poate determina prin analiz anti-alias c
tabelul bit_count este static i prin urmare nu se schimb pe durata
execuiei. Astfel, devine evident faptul c ntregul graf de instruciuni ar fi
reutilizabil n ipoteza n care valoarea introdus n r3 este aceiai. Schemele
pur hardware de reutilizare vor fi practic incapabile s sesizeze structura
acestei secvene i faptul c singura sa ieire este r26. n plus, memorarea
tuturor acestor instruciuni implic un consum mare de resurse. n schimb, la
nivelul compilatorului, graful este vizibil de vreme ce chiar acest compilator
l-a construit. n consecin, compilatorul poate construi un graf alternativ
celui din figura 2.9, utiliznd de exemplu o instruciune special numit
REUSE [Con99]. Aceasta comunic cu buffer-ele hardware pentru a decide
dac r26 poate s fie reutilizat sau nu. Dac da, instruciunea REUSE va
actualiza doar r26 cu valoarea respectiv i va trece la urmtoarea
instruciune (vezi figura 2.9). Rezult o schem hibrid hardware-software
de reutilizare care are avantajul fa de schemele pur hardware c ofer o
viziune superioar asupra structurii programului i deci, implic
performane mai bune. n plus, aceast abordare exploateaz o redundan
semantic superioar [Vin02], existent la nivelul programelor scrise n
limbaje de nivel nalt i invizibil n mod normal programelor obiect. Pentru
a fi fezabil o astfel de idee, setul de instruciuni al mainii va trebui n acest
caz s fie mbogit cu o interfa corespunztoare, prin intermediul creia
soft-ul va comunica cu logica hardware de reutilizare. Creterile de
performan raportate pentru o astfel de arhitectur hibrid fa de una
44 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
superscalar echivalent sunt de cca. 30% [Con99], ceea ce dovedete
eficiena acestei abordri hibride.


Figura 2.9 Graful dependenelor de date i secvena reutilizat
Figura 2.10 ilustreaz o microarhitectur tipic cu reutilizare a
instruciunilor. Singura modificare de principiu fa de modelul superscalar
este dat de apariia buffer-ului de reutilizare. n faza fetch instruciune sunt
extrase din cache-ul de instruciuni sau memoria principal instruciunile i
plasate n bufferul de prefetch (Instruction Queue). Urmeaz apoi faza de
decodificare a instruciunilor i redenumire a regitrilor n vederea
eliminrii conflictelor de nume (dependene WAR i WAW). n faza de
citire operand valorile operanzilor afereni instruciunilor sunt citite fie din
setul de regitri generali fie din buffer-ul de reordonare, funcie de structura
care conine ultima versiune a regitrilor. Accesul la buffer-ul de reutilizare
poate fi pipeline-izat i suprapus cu faza de aducere a instruciunii. Imediat
dup decodificarea instruciunii, n timpul fazei de citire operanzi, se
realizeaz testul de reutilizare asupra intrrilor citite din RB pentru a ti dac
rezultatele instruciunilor sunt, sau nu, reutilizabile. Dac este gsit un
rezultat reutilizabil instruciunea aferent nu mai trebuie procesat n
Limitri fundamentale ale paradigmei ILP. Soluii. 45
continuare, acesta fiind transmis direct buffer-ului de reordonare.
Instruciunile Load evit fereastra Instruction Window doar dac rezultatele
ambelor micro-operaii (calculul adresei i accesarea memoriei) sunt
reutilizabile. Testarea reutilizrii poate dura unul sau mai muli cicli, avnd
n vedere c este un proces secvenial ce depinde de numrul de instruciuni
dependente din lan.


Figura 2.10. Microarhitectur superscalar generic cu buffer de reutilizare
n cazul prediciei eronate a unei instruciuni de ramificaie,
mecanismul de refacere a contextului va trebui s fie suficient de selectiv
astfel nct s nu invalideze n RB instruciunile situate imediat dup
posibilul punct de convergen al ramificaiei i care ar putea fi reutilizate.
Reutilizarea este exploatat la maxim i n acest caz, cu beneficii evidente
asupra performanei.
Rezumnd, se desprind cteva avantaje introduse de tehnica de
reutilizare dinamic a instruciunilor i anume:
Scurtcircuitarea unor nivele din structura pipe de ctre instruciunile
reutilizate, reducnd presiunea asupra resurselor (staii de rezervare,
uniti funcionale, porturi ale cache-urilor de date etc.) necesare altor
instruciuni aflate n ateptare.
La reutilizarea unei instruciuni rezultatul su devine cunoscut mai
devreme dect n situaia n care s-ar procesa normal, permind n
consecin altor instruciuni dependente de aceste rezultate s fie
executate mai rapid.
Reduce penalitatea datorat prediciei eronate a adreselor destinaie n
cazul instruciunilor de salt, prin reutilizarea, fie i parial, codului
succesor punctului de convergen.
46 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Colapsarea dependenelor de date determin mbuntirea timpului de
execuie al instruciunilor crescnd gradul de paralelism al arhitecturii.
Procentajul de reutilizare al instruciunilor dinamice calculat pe
benchmark-urile SPEC95 este semnificativ, ajungndu-se la valori
maxime de 76% [Sod00].
Accelerarea obinut fa de modelul superscalar pe aceleai programe de
test nu este la fel de pronunat ca i procentajul de reutilizare (medii de
7 - 15%), valoarea maxim atins fiind de 43% [Sod00].
Reutilizarea dinamic a instruciunilor (DIR) este o tehnic
nespeculativ care recunoate un lan de instruciuni dependente executat
anterior i nu-l mai execut din nou - early validation - actualiznd doar
diferite date (rezultatele) n tabelele hardware aferente. DIR comprim un
lan de instruciuni din calea critic de execuie a programului.
Figura 2.11 prezint implementarea n structura pipeline a unei
microarhitecturi a mecanismului de reutilizare dinamic a instruciunilor.


Figura 2.11. Pipeline cu DIR
Deoarece DIR valideaz rezultatele devreme n structura pipe, bazat
pe intrri, pot apare urmtoarele situaii dezavantajoase: dac intrrile unei
instruciuni nu sunt disponibile n momentul realizrii testului de reutilizare
atunci respectiva instruciune nu va fi reutilizat. O instruciune care
produce un rezultat identic cu unul anterior, dar cu intrri diferite (operaii
logice, instruciuni Load), nu va fi reutilizat.
DIR reduce penalitatea datorat unei predicii greite a salturilor din
dou motive. n primul rnd, cnd un branch (salt condiionat) predicionat
greit este reutilizat, predicia eronat este detectat mai devreme (n faza de
decodificare) dect s-ar realiza dac saltul s-ar executa. Al doilea motiv l
constituie posibila convergen a codului n programe. Astfel prin posibila
reutilizare a codului existent dup punctul de convergen a cilor de
execuie, i care este evacuat n cazul unei predicii eronate, tehnica DIR
mbuntete timpul de execuie al programelor.
DIR influeneaz concurena asupra resurselor prin schimbarea att a
pattern-ului n care resursele sunt folosite ct i a cererii efectuate (prin
colapsarea dependenelor de date, determin execuia mai devreme a
instruciunilor). ntruct o instruciune reutilizat nu se execut, DIR tinde
Limitri fundamentale ale paradigmei ILP. Soluii. 47
s reduc concurena la resurse. Sunt eliberate astfel resurse i puse la
dispoziia altor instruciuni concurente. DIR scade latena de execuie a
operaiilor individuale de la mai muli cicli la doar un singur ciclu (latena
de reutilizare a unei instruciuni).
Este evident faptul c, cu ct reutilizarea se face la un grad de
granularitate mai mare (instruciuni multiple reutilizate simultan) cu att
este mai eficient pentru performana global a sistemului. Pentru
identificarea lanurilor de instruciuni reutilizabile (dependente sau
independente) este necesar o vedere global a ntregului program, dificil de
ndeplinit numai printr-o abordare la nivel hardware [Sas00, Con99, Sod00].
Literatura de specialitate enumer cteva cercetri bazate pe tehnici
hardware de identificare i exploatare a reutilizrii de tip masiv (coarse
grain): reutilizarea basic-block-urilor [Hua99] i respectiv a trace-urilor de
instruciuni [Gon99]. Studiile cercettorilor arat c, utiliznd i suportul
compilatorului pentru extinderea reutilizrii dinamice la nivel de basic-block
se obine o mbuntire substanial a performanei procesoarelor (de la 1%
la 14%, teste realizate pe benchmark-urile SPEC) [Hua99]. Dezavantajul n
cazul acestei abordri const n complexitatea schemei datorit numrului
ridicat de intrri care trebuie reinute (valorile regitrilor n via n
momentul intrrii n basic block) dar i ieirile care pot fi apoi folosite
(reutilizate). Abordarea din [Con99] reprezint o tehnic hibrid, prin care
compilatorul identific regiunile reutilizabile bazat pe consultarea unor
informaii de profil.
n general, tehnicile software urmresc identificarea variabilelor de
intrare invariante pentru anumite regiuni de cod (funcii, proceduri, bucle
de program) i exploatarea acestui fenomen prin reutilizare. O abordare
strict software [Ding04] presupune existena obligatorie a etapelor:
Identificarea zonelor de cod candidate (bucle, rutine etc i eliminarea
zonelor infrecvent executate) pentru reducerea costului de Value
Profiling.
Determinarea intrrilor i ieirilor pe baza unei analize a fluxului de date
(introducerea n cod a seciunilor de tipul profiling code stubs).
Calculul granularitii pe baza informaiilor de profil privind frecvena de
execuie i setul de valori care se repet pentru fiecare zon de cod
selectat.
n [Ding04] bazat pe rata de repetiie a valorilor (value profiling),
gradul de granularitate i de reutilizare al (secvenelor de) instruciunilor i
complexitatea dispersiei instruciunilor reutilizate este propus un algoritm
euristic prin care se estimeaz dac procesul de cutare n tabele hardware
(buffer-e de reutilizare) este mai ieftin dect reexecuia instruciunilor.
Rezultatele raportate n urma mbuntirii compilatorului GNU gcc cu acest
48 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
algoritm i simulrii benchmark-urilor din colecia Mediabench [Lee97] i
pe jocul GNU go evideniaz nu numai o mbuntire a performanei ci i o
reducere a puterii consumate, vital mai ales la nivelul dispozitivelor de
calcul de tip handheld [Ding04]. Dezavantajele abordrilor strict software
l reprezint ns axarea principal pe informaii de profil, care pot diferi n
funcie de fiierele de intrare folosite sau estimrile fcute n timpul analizei
codului s nu fie cele mai corecte. n [Con00] se urmrete nlocuirea
rolului compilatorului care determin prin value profiling regiunile cele
mai reutilizabile cu un mecanism hardware de reutilizare selectiv. Ctigul
const ntr-o utilizare mai eficient a resurselor hardware.
Un exemplu care justific potenialul existent n programe, de
reutilizare masiv (a regiunilor de instruciuni) l reprezint coninutul unei
funcii care caut o adres de ntrerupere ntr-o tabel. Exemplul este extras
din benchmark-ul SPEC95 m88ksim, ns poate aprea n orice aplicaie
ampl care se respect.


Figura 2.12. Reutilizare de tip coarse-grain
n figura 2.12, prin intermediul buclei for este cutat ntr-o tabel de
adrese de ntrerupere (breakPoints) adresa addr. Presupunnd c, coninutul
tabelei nu se modific dup faza de iniializare, rezult c valoarea adresei
addr este singura care se poate schimba de-a lungul multiplelor apeluri ale
funciei GetBreakpoint. n consecin, toate instruciunile buclei exceptnd
bp->addr == addr sunt reutilizabile. Cu toate c, din punct de vedere static
instruciunile reutilizabile sunt contigue, din punct de vedere dinamic
secvena de instruciuni reutilizabil este necontigu, ntrerupt de
instruciunea de testare a egalitii (==).
n [Sas00] este definit noiunea de regiune ca fiind un set de
instruciuni dependente care pot fi simultan reutilizate, dar care nu trebuie s
fie neaprat contigue (un subgraf, fr reacie invers, al grafului
dependenelor de date aferent trace-ului programului). Dou regiuni
Limitri fundamentale ale paradigmei ILP. Soluii. 49
distincte, R
1
i respectiv R
2
se consider a executa operaii identice dac
acestea conin un set identic de instruciuni i un set identic de dependene
de date (subgraf-urile dependenelor de date aferente sunt izomorfe).
Algoritmul propus n [Sas00] pentru detecia regiunilor reutilizabile
urmrete identificarea subgrafurilor identice din graful dependenelor de
date aferent trace-ului programului.
Algoritmul dinamic de construire a regiunilor reutilizabile este de tip
greedy datorit complexitii ridicate a problemei gsirii unui subgraf de
dependene de lungime maxim i respectiv a constrngerilor legate de
spaiu i mai ales timp, care apar n momentul implementrii algoritmului.
ntruct faza de analiz nu poate fi fcut asupra ntregului trace, algoritmul
este divizat i aplicat la nivelul ferestrelor de instruciuni active. Cu ct
aceasta are dimensiunea mai mare, un numr mai mare de regiuni poate fi
identificat [Sas00].
Trebuie realizat un compromis ntre un grad ridicat de reutilizare i
identificarea de regiuni cu numr mare de instruciuni reutilizate.
Simulri laborioase [Sas00] pe benchmark-urile SPEC95 au demonstrat c
29% din totalul instruciunilor dinamice reutilizate provin din regiuni de 8
sau mai multe instruciuni. Pentru acestea costul accesului la buffer-ul de
reutilizare este mult inferior avantajului obinut prin bypassing-ul
instruciunilor reutilizate, rezultnd o mbuntire a performanei globale de
procesare. De asemenea se remarc c procentajul instruciunilor dinamice
coninute n regiuni reutilizabile (instruction coverage) nu depinde
semnificativ de reuse threshold (necesitatea ca o regiune reutilizabil s
apar de ori n execuie).
O tehnic relativ recent (propus de Kavi la conferina ADCOM din
decembrie 2003 inut n India [Kavi03]) urmrete extinderea conceptului
de reutilizare la un nivel de granularitate extrem de masiv: reutilizarea
dinamic a rezultatelor funciilor, bazat pe observaia c de multe ori o
funcie este re-executat cu aceeai parametri (vezi concepte gen
recursivitate, progamare dinamic). Optimizrile compilatorului
influeneaz ns semnificativ ctigul de performan introdus de tehnica de
reutilizare la nivel de funcie. Tehnicile de compilare ncearc prin metode
statice eliminarea (sau diminuarea) calculului redundant (dinamic),
reducerea presiunii asupra memoriei prin tehnici de alocare a variabilelor n
regitri (register allocation), ceea ce conduce la scderea potenialului de
reutilizare din programele de calcul. Pentru ca reutilizarea s fie eficient
este indicat realizarea unei analize n momentul compilrii i o edificare
asupra profilului de execuie al programelor. De asemenea, n exploatarea
50 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
tehnicii de reutilizare la nivel de funcie se impune tratarea urmtoarelor
aspecte:
- determinarea influenei optimizrilor de compilare asupra ctigului
de performan.
- cunoaterea numrului de parametrii al funciei (cu ct numrul este
mai mic crete probabilitatea de a fi reutilizat respectiva funcie).
- influena conceptelor de programare obiectual (motenire,
polimorfism) asupra reutilizrii.
- realizarea unui studiu comparativ ntre ctigul de performan
obinut prin reutilizarea la nivel de funcie (dependent att de
frecvena de execuie a respectivei funcii ct i de numrul de
instruciuni a respectivei funcii) versus reutilizarea la nivel de
instruciune (lan de instruciuni dependente).
Kavi [Kavi03] n urma a laborioase simulri pe benchmark-urile
SPEC`95 m88ksim, go, vortex, jpeg i perl, respectiv SPEC2000
197.perser, 176.gcc, precum i pe un program de test ce presupune calculul
celui de-al n-lea termen din irul lui Fibonnacci, a concluzionat c
potenialul de reutilizare este distribuit uniform de-a lungul tuturor fazelor
unui program (iniializare, execuie, etc.). Simulrile au fost efectuate
folosind instrumentul ATOM [ATOM95], pe o arhitectur DEC/HP Alpha
iar benchmark-urile au fost compilate folosind GNU gcc (versiunea 2.6.3)
cu opiunea de optimizare (-O3). De asemenea, rezultatele simulrilor au
evideniat c pentru 20% dintre cele mai apelate funcii se obine un
potenial de reutilizare (invocare cu aceeai parametrii de intrare) variabil
ntre 10% i pn la 67.7% cu implicaii extrem de benefice asupra timpului
de execuie al programelor i implicit asupra ratei globale de procesare.
Tabelul urmtor (vezi tabelul 2.1), preluat din [Kavi03], ilustreaz pentru
valori diferite ale parametrului de intrare pe programul Fibonnacci ctigul
obinut din punct de vedere al timpului de execuie (reducerea cu cel puin
un ordin de mrime al acestuia).

Funcia Timp execuie (fr
reutilizare)
Timp execuie
(cu reutilizare)
Total apeluri de
funcie
Funcii apelate
cel puin odat
cu aceeai
parametrii
Fib(10) 106.742 100.655 1.090 730
Fib(20) 3.611.713 263.757 135.290 87.938
Fib(30) 454.250.016 33.173.110 1.329.000 890.430
Fib(40) 53.933.197.903 3.940.000.000 127.278.861 86.167.788
Tabelul 2.1. Reutilizarea la nivel de funcie pe programul Fibonnacci
Limitri fundamentale ale paradigmei ILP. Soluii. 51
Referitor la gradul de reutilizare al funciilor variind numrul de
argumente, n [Kavi03] se arat c pentru funciile cu 0 sau 1 parametrii
acesta este de 61%, pentru cele cu 2 parametrii procentul este de
aproximativ 22% iar pentru cele cu 3 sau mai muli parametrii procentul
scade sub 10%.
2.2.2. PREDICIA DINAMIC A VALORILOR
INSTRUCIUNILOR

2.2.2.1. VECINTATEA VALORII (VALUE LOCALITY) I
IMPLICAIILE ACESTEIA N PREDICIE
Odat cu creterea n complexitate a procesoarelor superscalare
moderne (ferestre de instruciuni largi, pipeline cu un numr ridicat de
niveluri) cantitatea de cod executat speculativ crete i ea. Predicia
valorilor (VP) produse de instruciuni, o tehnic speculativ i relativ recent
aprut (1996), a fost sugerat ca o modalitate de comprimare a cii critice
de program n cadrul procesoarelor cu execuii multiple [Vin02].
Considernd un procesor cu regitri generali pe 32 de bii, aparent,
probabilitatea de a prediciona o valoare este de 1/2
32
, practic nul. n
realitate lucrurile stau cu totul altfel, avnd n vedere puternica vecintate a
valorilor asignate unei resurse hardware i care determin ca valorile posibil
a fi asignate unei resurse s nu fie echiprobabile, ci dimpotriv, localizate pe
productor sau pe resursa hardware. Din acest motiv, predicia valorilor
instruciunilor n vederea execuiei speculative a acestora are anse
importante de reuit.
Vecintatea (localitatea) valorii reprezint o a treia dimensiune a
conceptului de localitate (pe lng cea temporal i respectiv spaial,
frecvent ntlnite n programele de uz general), descriind probabilitatea
statistic de referire a unei valori anterior folosite i stocat n aceeai
locaie de memorie sau registru. Conceptul de localitate a valorii a fost
introdus n premier n mod independent de 4 grupuri de cercetare: L.
Widigen i E. Sowadsky de la firma AMD, F. Gabbay and A. Mendelsohn
de la Universitatea Tehnion din Israel, M. Lipasti, C. Wilkerson, J. Shen de
la Universitatea Carnegie Melon SUA [Lip96] i Y. Sazeides, J. Smith de la
universitatea Wisconsin, SUA. Vecintatea valorii este strns legat de
calculul redundant (repetarea execuiei unei operaii cu aceiai operanzi).
52 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Diferena de esen ntre localitile temporale i spaiale i respectiv
localitatea valorilor const n faptul c primele dou sunt focalizate pe
adrese, n timp ce ultima este centrat pe rezultatele produse. Mai precis,
localitatea temporal se refer la probabilitatea ca o anumit adres
coninnd o instruciune sau o dat s fie referit din nou n viitorul
apropiat, n timp ce localitatea valorii se refer la faptul c rezultatul unei
instruciuni care este din nou procesat, s se repete. Exploatarea
localitilor spaiale i temporale se face n principal prin sisteme ierarhizate
de memorii cache care reduc latena memoriilor principale, n timp ce
localitatea valorilor implic predicia acestora n vederea execuiilor
speculative a instruciunilor.
Localitatea valorilor este justificat de cteva observaii empirice
desprinse din programele de uz general, medii i sisteme de operare diverse:
Redundana datelor seturile de intrri de date pentru programele de
uz general sufer mici modificri (Exemple: matrici rare, fiiere text
cu spaii goale, celule libere n foi de calcul tabelar).
Verificarea erorilor tehnica LVP poate fi benefic n gestionarea
tabelelor de erori ale compilatoarelor, n cazul apariiei unor erori
repetate.
Constante n program este mult mai eficient ca programele s
ncarce constante situate n structuri de date din memorie, ceea ce este
exploatat favorabil de tehnica LVP.
Calcululul adreselor instruciunilor de salt n situaia instruciunilor
case (switch n C) compilatorul trebuie s genereze cod care ncarc
ntr-un registru adresa de baz pentru branch, care este o constant
(predicia adreselor destinaie pentru instruciunile de salt).
Apelul funciilor virtuale n acest caz compilatorul trebuie s
genereze cod care ncarc un pointer de funcie, care este o constant
n momentul rulrii.
Localitatea valorii aferent unor instruciuni Load statice dintr-un
program, poate fi afectat semnificativ de optimizrile compilatoarelor: loop
unrolling, software pipelining, tail replication [Vin00a] etc., ntruct aceste
optimizri creeaz instane multiple ale instruciunilor Load.
Convingerea c "localitatea valorilor" exist, are la baz rezultate
statistice obinute prin simulare la nivel de execuie a instruciunilor pe
benchmark-uri SPEC95, SPEC2000. Ca i metric de evaluare, localitatea
valorii pentru un benchmark este calculat ca raport dintre numrul de
instruciuni Load dinamice care regsesc o aceeai valoare n memorie ca i
precedentele k accese i respectiv numrul total de instruciuni Load
dinamice existente n benchmark-ul respectiv. O istorie de localizare pe k
bii semnific faptul c o instruciune Load verific dac valoarea citit din
Limitri fundamentale ale paradigmei ILP. Soluii. 53
memorie se regsete printre ultimele k valori anterior ncrcate. O
problem important de proiectare care se pune la ora actual este: ct de
"mult istorie" s fie folosit n predicie ? nainte de a rspunde ns la
aceast ntrebare poate ar trebui determinat Ct localitate a valorii exprim
programele i cum variaz acest grad de localitate n funcie de istorie ?
Pentru instruciunile de tip Load, cu o "adncime" a istoriei de predicie de 1
(regsirea aceleiai valori n resursa asignat ca i n cazul precedentului
acces), programele de test exprim o localitate a valorii de 50% n timp ce
extinznd verificarea n spaiul valorilor aferente ultimelor 16 accese la
memorie, se obine o localitate de 80% [Lip96]. Rezultatele subliniaz c
majoritatea instruciunilor Load statice aferente unui program exprim o
variaie redus a valorilor pe care le ncarc pe parcursul execuiei.
Compromisurile actuale oscileaz ntre o istorie redus reprezentnd o
acuratee de predicie joas dar cost sczut sau o istorie bogat de predicie
acuratee ridicat de predicie dar costuri i complexitate hardware
ridicate. De asemenea, statistici bazate pe simulare arat c ntre 15 45%
dintre instruciuni produc o singur valoare n ultimele lor 16 instane
succesive i respectiv ntre 28 67% dintre instruciuni produc maximum 4
valori distincte n ultimele lor 16 instane dinamice de apariie [Wang97].
Informaia este deosebit de preioas n tentativa de reducere a dimensiunii
tabelelor de predicie i implicit a costului de implementare. ncercri n
acest sens cu rezultate remarcabile att din punct de vedere al prediciei
valorilor ct i din punct de vedere al fezabilitii hardware, i care vor fi
detaliate pe parcursul capitolului curent sunt predictorul adaptiv pe dou
niveluri [Wang97] i perceptronul introdus n premier n predicia valorilor
de [Tho04].
Exploatarea conceptului de localitate a valorilor se face prin tehnici de
predicie a acestor valori. O alt problem care se pune se refer la
Informaia cu care se va adresa structura de predicie (adresa instruciunii
sau adresa datei) avnd implicaii directe asupra implementrii la nivel de
ciclu "pipe" a tehnicilor de predicia valorilor. n abordarea propus de
Lipasti [Lip96] structura de predicie este indexat cu PC-ul instruciunii cu
referire la memorie. n implementrile proprii am extins acest lucru
adresnd structura de predicie pentru instruciunile Load i cu adresa datei.
Evident c, n cadrul conceptului novator de predicie focalizat pe regitrii
procesorului, propus n capitolul 6.2 i publicat n [Vin05], adresarea
structurii de predicie se face cu indicele registrului supus prediciei.
n [Lep00] este abordat problematica localitii valorilor n contextul
prediciei instruciunilor de tip Store, cu implicaii deosebit de favorabile
asupra performanei sistemelor uniprocesor dar mai ales multimicroprocesor
(n special prin reducerea traficului prin reeaua comun de interconectare).
54 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Localitatea valorilor pentru instruciunile de tip Store s-a msurat pe dou
niveluri: la nivelul instruciunii (PC) i respectiv la nivelul adresei memoriei
de date. Rezultatele sunt optimiste, n ambele cazuri gradul de localitate
fiind cuprins ntre 30% i 70%. Se definete chiar noiunea de Store
silenios pentru acele instruciuni care scriu n memorie o aceeai valoare
ca i precedenta, deci care nu modific starea sistemului. Msurtorile arat
c ntre 34% i 68% din instruciunile Store sunt silenioase. Aceste
caracteristici pot fi exploatate practic, prin anularea execuiei acestor
instruciuni silenioase, cu beneficii asupra performanei sistemului de
calcul. Prin nlturarea acestor store-uri, fie static, n momentul compilrii,
fie dinamic, n momentul execuiei se obine un ctig potenial att din
punct de vedere al dimensiunii codului, i evident a ratei de hit n cache-ul
de instruciuni ct i din punct de vedere al timpului de execuie. De
asemenea, se reduce presiunea asupra porturilor de scriere ale cache-ului de
date, asupra cozii cu instruciuni store (DataWriteBuffer) i asupra traficului
pe busul de date dintre procesor i memorie. Conceptul de evacuare fr
costuri (free) a store-urilor silenioase [Lep00a] se bazeaz pe captarea
porturilor libere de citire pentru faza de verificare (n avans) i utilizarea
unui mecanism agresiv de tip DataWriteBuffer care exploateaz localitatea
spaial i temporal n vederea evacurii instruciunilor store.
Tehnica Load Value Prediction (LVP), prima implementat de ctre
cercettori [Lip96], predicioneaz rezultatele instruciunilor Load la
expedierea spre unitile funcionale de execuie exploatnd corelaia dintre
adresele respectivelor instruciuni i valorile citite din memorie de ctre
acestea, permind deci instruciunilor Load s se execute nainte de calculul
adresei i mbuntind astfel performana. Conceptul de localizare a
valorilor se refer practic la o corelaie dinamic ntre numele unei resurse
(registru, locaie de memorie, port I/O) i valoarea stocat n acea resurs.
Dac memoriile cache convenionale se bazeaz pe localitatea temporal i
spaial a datelor pentru a reduce timpul mediu de acces la memorie, tehnica
LVP exploateaz localitatea valorii prin predicia acesteia reducnd att
timpul mediu de acces la memorie ct i necesarul de lrgime band al
memoriei (se efectueaz mai puine accese la memoria central), asigurnd
astfel un ctig de performan considerabil. Toate aceste avantaje se obin
simultan cu reducerea considerabil a presiunii asupra memoriilor cache. Ca
i consecin a prediciei valorilor se reduc i efectele defavorabile ale
dependenelor RAW, prin reducerea ateptrilor instruciunilor dependente
ulterioare. Dac instruciunile predicionate se afl pe calea critic a
programului, execuia acestuia se comprim n mod considerabil.
n figura 2.13 este descris implementarea tehnicii de predicia
valorilor instruciunilor n structura pipeline a unei microarhitecturi
Limitri fundamentale ale paradigmei ILP. Soluii. 55
generale. La citirea unei instruciuni - din cache sau memoria central - cu
cei mai puin semnificativi bii ai adresei instruciunii (PC
LOW
) se adreseaz
n tabela de predicie (VPT). ntruct avantajul prediciei valorilor apare n
momentul unei predicii corecte, n principiu structura VPT trebuie s
includ pe lng valorile care vor fi prezise i un mecanism de clasificare a
prediciei (ncredere sau nu n valoarea care se prezice la un moment dat).
Prin tratarea separat a fiecrui grup de instruciuni n parte este posibil
exploatarea avantajului maxim n fiecare caz: se poate evita costul unei
predicii greite prin identificarea instruciunilor nepredictibile sau se poate
evita timpul necesar accesului la memorie (pentru instruciunile de tip Load)
identificndu-le i verificndu-le pe cele puternic predictibile. Mecanismul
respectiv, care poate fi implementat i sub forma unui numrtor saturat pe
doi bii (vezi figura 5.28), determin dac va fi fcut sau nu o predicie
(bazat pe gradul de ncredere al automatului corespunztor), n timp ce VPT
nainteaz valoarea prezis. Aceasta va fi preluat prin bypassing de ctre
instruciunile dependente aflate n ateptare n staiile de rezervare. La
obinerea rezultatului real dup faza de execuie (din cache dac a fost
instruciune Load), aceasta este comparat cu valoarea prezis, instruciunile
dependente executate speculativ fie urmeaz parcursul normal - nivelul
Write Back al structurii pipe - fie sunt retrimise spre execuie, iar structura
VPT i automatul de clasificare sunt actualizate n consecin. Statistici
bazate pe simulare realizate pe sistemele Power PC i Alpha AXP, utiliznd
benchmark-urile SPEC95 arat c peste 80% din instruciunile Load
predictibile / nepredictibile sunt clasificate corect de ctre un numrtor
saturat pe doi bii (n concordan cu simulrile proprii din subcapitolul 7.2).


Figura 2.13. Pipeline cu VP
Disponibilitatea foarte devreme (la nceputul fazei de aducere a
instruciunii Fetch) a indexului de accesare a tabelei de predicie VPT
(accesul putnd fi pipeline-izat peste dou sau mai multe niveluri),
complexitatea relativ redus n proiectare i realizarea de tabele relativ mari
fr a afecta perioada de tact a procesorului, sunt caracteristici care fac
tehnica VP atractiv pentru proiectanii de viitoare microarhitecturi. Primele
cercetri au artat o cretere de performan medie de cca. 6% datorat
56 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
implementrii acestei tehnici. n subcapitolul 2.2.2.6 sunt prezentate
informaii cantitative i calitative care evideniaz ctigul de performan
obinut prin implementarea prediciei valorilor dar i influena defavorabil
a lrgimii reduse de band a mecanismului de aducere a instruciunilor
asupra eficacitii VP. Pentru mbuntirea acurateii de predicie a
valorilor au fost propuse cteva tehnici (vezi subcapitolele 2.2.2.2
2.2.2.5). Acestea includ predictoare computaionale (ex. incrementale)
respectiv contextuale (lucreaz la nivel de o singur instruciune i ncearc
s prezic viitoarea valoare care va fi produs de instruciune bazndu-se pe
valorile anterior generate). ntruct respectivele scheme ncearc s
nmagazineze o ct mai mare istorie pentru predicie, aceasta implic tabele
hardware de mari dimensiuni i costuri ridicate de implementare.
Predicia i consecina ei, execuia speculativ, vor fi procese eseniale
n cadrul microarhitecturilor viitoare. Cercetrile din domeniul
microarhitecturilor cu paralelism la nivel de instruciuni s-au concentrat
pn de curnd n vederea depirii hazardurilor structurale, a dependenelor
de date de tip WAR (Write After Read) i WAW (Write After Write) i
respectiv a limitrilor impuse de ctre instruciunile de ramificaie (branch).
Acestea din urm se rezolv n principal prin predicie dinamic, proces care
asigur execuia speculativ a instruciunilor prin paralelizarea unor basic-
block-uri distincte. Dependenele de date de tip RAW (Read After Write),
erau considerate ca reprezentnd o limitare fundamental, ce nu poate fi
depit, datorat unei secvenialiti intrinseci a programului i care
reducea dramatic paralelismul. Graful dependenelor de date asociat unui
program, constituia prin calea sa critic o barier de netrecut n calea
procesrii paralele. Predicia dinamic a valorilor instruciunilor reprezint o
tehnic relativ recent, care permite execuia speculativ a instruciunilor
dependente RAW, prin predicia rezultatelor acestora, reducndu-se astfel n
mod semnificativ latena de execuie a cii critice a programului.
O similitudine tot mai puternic se remarc ntre problema prediciei
valorilor i problema prediciei adreselor destinaie aferente instruciunilor
de salt indirect. Liantul dintre cele dou tehnici de predicie l-ar putea
constitui aflarea legturii calitative i cantitative care exist ntre
paradigmele actuale de programare (procedural i obiectual) i respectiv
generarea valorilor de ctre anumite tipuri de instruciuni. Mai precis,
investigarea legturii existente ntre motenire, polimorfism i alocarea
dinamic a memoriei pe de o parte, i comportamentul salturilor indirecte.
Structurile de date implementate n hardware pentru ambele procese de
predicie, au acelai principiu de funcionare i anume: asocierea
cvasibijectiv a contextului de apariie al instruciunii respective (ALU,
Load sau Branch) cu registrul / data / adresa de predicionat, n mod
Limitri fundamentale ale paradigmei ILP. Soluii. 57
dinamic, odat cu procesarea programului. Se poate constata c
problematica prediciei n microprocesoarele avansate, tinde s devin una
general i ca urmare implementat pe baza unor principii teoretice avansate
i mai generale. Scopul principal i imediat este execuia speculativ
agresiv a instruciunilor, cu beneficii evidente n creterea gradului mediu
de paralelism. O dovad n acest sens l reprezint migrarea ideilor de
predictor markovian i neural de tip Perceptron de la nivelul salturilor
[Chen96, Jim02] (vezi subcapitolul 5.1.2) la nivelul prediciei valorilor
instruciunilor i regitrilor [Tho04, Seng04].
2.2.2.2. PREDICTOARE COMPUTAIONALE
Una dintre potenialele dificulti n exploatarea predictibilitii
valorilor, o constituie alegerea tipului potrivit de predictor pentru o anumit
instruciune. n [Saz97] se ncearc o clasificare empiric a celor mai
frecvente tipuri de secvene de valori generate de ctre programele cele mai
uzuale. Se disting astfel cel puin 3 categorii primitive de secvene de valori
i anume: secvene constante, secvene incrementale (Stride) i respectiv
non incrementale. Secvenele constante (5, 5, 5, ... ) sunt cele mai simple
i rezult n urma execuiei unor instruciuni care produc n mod repetat
acelai rezultat. Apar frecvent n programe. Secvenele incrementale (1, 4, 7,
10, ...) se caracterizeaz prin faptul c diferena ntre dou elemente
succesive este o constant numit i pas. Pasul poate fi pozitiv sau negativ.
Rezult imediat c o secven constant este o secven incremental cu
pasul 0. Astfel de secvene incrementale pot aprea n cazul
contorilor/indecilor buclelor de program sau n cazul accesrii regulate a
unor structuri de date de tip ir, matrice etc. Secvenele non incrementale
reprezint orice alt secven de valori n afara celor constante ori
incrementale (ex. 28, 13, 99, 107, 23, 456 ...). Spre exemplu, traversarea
unei liste nlnuite ar putea genera relativ frecvent valori de adrese care s
fie ncadrabile n aceast categorie. Desigur c pot exista secvene de valori
hibride, obinute prin combinarea acestor 3 tipuri de pattern-uri. De
asemenea s-ar putea considera i secvene de valori repetitive (incrementale
1, 3, 5, 1, 3, 5, ... respectiv non incrementale 1, 13, 88, 7, 1, 13, 99, 7
...).
Aceste tipuri frecvente de secvene de valori conduc la cel puin 2
categorii primitive de predictoare de valori: computaionale i respectiv
bazate pe context. Predictoarele computaionale genereaz predicia pe baza
istoriei valorilor memorate, prelucrndu-le dup un anumit algoritm stabilit.
Un predictor incremental ori unul care predicioneaz valoarea unui ir
58 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
recurent, se ncadreaza n categoria celor computaionale. De observat c,
spre deosebire de predicia contextual, predicia computaional nu provine
strict din definiia localitii valorilor. Predictoarele bazate pe context
predicioneaz valoarea urmtoare corespunztoare unui anumit context
particular memorat. Printr-un context se nelege o secven finit de valori
cu apariie repetat. Aceste predictoare bazate pe context permit predicia
oricrei secvene repetitive de valori, incrementale sau non incrementale.
Un predictor contextual este de ordinul k dac informaia sa de context
include ultimele k valori iar cutrile se fac cu acest pattern de k valori.
Principala limitare a acestor predictoare const n faptul c pentru a
prediciona corect o anumit valoare, aceasta trebuie s fi urmat acelai
context cel puin o dat. n subcapitolul curent vor fi descrise dou structuri
computaionale de predicie (n ordinea n care au fost propuse n literatura
de specialitate LastValue [Lip96] i respectiv Incremental [Lip96b,
Gab98]). Din clasa predictoarelor contextuale sunt prezentate un predictor
de tip PPM complet de ordin k compus din (k+1) predictoare markoviene
[Saz97] i un predictor adaptiv pe dou niveluri [Wang97], ca un caz
particular de predictor contextual (vezi subcapitolul 2.2.2.3). Datorit
imposibilitii de exploatare optim cu un singur tip de predictor a
patternurilor de predictibilitate existente n programe, n subcapitolul 2.2.2.4
s-a propus un predictor hibrid compus dintr-un predictor adaptiv pe dou
niveluri i un predictor incremental. Fiecare din anterior enunatele structuri
de predicie i dedicate diverselor resurse (instruciuni, locaii de memorie,
regitrii procesorului MIPS) au fost implementate n cadrul cercetrilor
proprii din capitolul 6 (vezi i [Flo02, Vin04, Vin05]). n finalul
subcapitolului 2.2.2.5 sunt prezentate dou abordri novatoare, extrem de
recente [Tho04, Seng04], bazate pe utilizarea n premier a perceptronului
n predicia valorilor instruciunilor i regitrilor.

A. Predictoare Last Value

Un tip relativ ntlnit de predictoare computaionale sunt aa numitele
predictoare last value, caracterizate prin faptul c predicioneaz noua
valoare ca fiind aceeai cu ultima valoare produs de ctre instruciunea
respectiv. Totui exist i variante care schimb strategia de modificare a
valorii, bazat pe histerezis. Un exemplu de mecanism de histerezis const
ntr-un numrtor saturat asociat fiecrei intrri n tabela de predicie.
Acesta este incrementat/decrementat atunci cnd predicia este
corect/incorect, respectiv. Valoarea memorat n tabel este evacuat
numai cnd valoarea indicat de ctre numrtorul asociat este sub un
anumit prag prestabilit. Un alt mecanism de histerezis nu modific valoarea
Limitri fundamentale ale paradigmei ILP. Soluii. 59
predicionat din tabel pn cnd noua valoare nu a aprut, n mod
repetitiv, de un anumit numr de ori.


Figura 2.14. Schem bloc pentru un predictor de tip last value
n schema predictorului de tip last value, cmpul Num
implementeaz mecanismul de histerezis printr-un numrtor, n
concordan cu algoritmul de modificare a valorii care a fost implementat.
Funcia de dispersie determin un index de accesare a tabelei VHT, pe post
de adres, printr-un mecanism de comprimare a intrrii. Desigur c VHT are
o capacitate limitat, n principal funcie de tehnologia de integrare folosit.
n [Lip96] se arat c acurateea prediciei obinut printr-o astfel de
schem de tip last value este n medie de 49%, msurat pe o serie de
benchmark-uri SPEC. Considernd c se memoreaza ultimele 4 valori
produse de ctre o anumit instruciune i c abilitatea predictorului de a
alege valoarea corect este perfect, s-a obinut o acuratee de predicie
medie de 61%.

B. Predictoare incrementale

Predictoarele incrementale reprezint o generalizare a predictorului de
tip Last Value (echivalent cu un predictor incremental cu pas 0). n acest
caz, considernd c v
n-1
i v
n-2
sunt cele mai recente valori produse, noua
valoare v
n
va fi calculat dup formula de recuren: v
n
= v
n-1
+ (v
n-1
- v
n-2
),
60 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
unde (v
n-1
- v
n-2
) este pasul secvenei. Pasul poate fi i variabil, nu neaprat
constant tot timpul ci constant doar pe anumite intervale de timp (de
exemplu: iteraiile de parcurgere a unei matrici bidimensionale). n aceast
idee se propun i n acest caz scheme de actualizare a pasului bazate pe
histerezis. Astfel, pasul memorat n tabelele de predicie este modificat
numai atunci cnd numrtorul saturat asociat, memoreaz o valoare situat
peste un prag stabilit. Firete, acest numrtor este incrementat/decrementat
n cazul unei predicii corecte/incorecte, respectiv. O alt strategie cu
histerezis este aa numita 2 delta (vezi figura 2.17). n cazul acesteia
sunt memorai doi pai (s
1
i s
2
), s
1
= v
n
v
n-1
. Pasul s
2
este cel folosit n
procesul de predicie. Numai atunci cnd aceiai valoare s
1
a aprut de dou
ori consecutiv, se face transferul s
2
s
1
. Ambele metode cu histerezis reduc
numrul prediciilor eronate de la dou, la doar una, n cazul secvenelor
incrementale repetitive. n figura urmtoare (figura 2.15) se prezint o
structur tipic de predictor incremental (pas constant) iar figura 2.17
ilustreaz un predictor incremental de tip 2-delta.


Figura 2.15. Structur de predicie incremental

Limitri fundamentale ale paradigmei ILP. Soluii. 61

Figura 2.16. Automatul de stare asociat

Funcie
de
dispersie
TagC Num Val Pas1 Pas2
+ =
Predicie
valid
Valoare
prezis
Value History
Table
(VHT)
index
TagE
PC

Figura 2.17. Structura predictorului incremental de tip 2-delta
O aciune important n cadrul unui predictor incremental este
constituit de detecia pasului. n continuare este descris modul de
funcionare al predictorului incremental de tip 2-delta i al automatului de
stare asociat (cmpul Num). Prima dat cnd o instruciune va fi procesat,
va rezulta un miss n tabela de predicie VHT i evident c nu se va face nici
o predicie. Cnd o instruciune produce un rezultat atunci: (1) rezultatul
este memorat n cmpul Val din VHT i (2) automatul trece n starea
iniial Init (vezi figura 2.16). Att timp ct eventuale urmtoare instane
succesive ale aceleiai instruciuni produc acelai rezultat (pas=0),
62 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
automatul va ramne n starea iniial. Dac ns o instan urmtoare a
instruciunii produce un rezultat (R
1
) diferit de precedentul, atunci se
calculeaz pasul S
1
=R
1
-Val VHT i R
1
VHT. Totodat automatul
trece n starea intermediar Tranziie. Dac n aceast stare apare o nou
instan dinamic a instruciunii, nu se va genera nici o predicie. n schimb
S
2
=R
2
-Val VHT i R
2
VHT. Dac S
1
= S
2
atunci automatul trece n
starea Stabil, altfel rmne n starea Tranziie. n starea stabil, valoarea
prezis = R
2
+S
2
. Cu alte cuvinte, acest automat de stare implementeaz un
anumit grad de ncredere asociat prediciei. Predicia nu se face dect n
cazul n care pragul de ncredere (Confidence Threshold) depete o
anumit valoare, apriori determinat.


Schemele anterior prezentate nu sunt singurele predictoare
computaionale existente. Pot fi implementate i alte variaii pe aceast
tem, alegerea soluiei optime fiind determinat prin simulare. Pentru o
acuratee ridicat a prediciei trebuie anticipat tipul calculului pe care
programul l execut, n caz contrar rolul predictoarelor ar fi total ineficient.
Realizarea acestui lucru se poate face doar n urma unei analize a
caracteristicilor de profil a programului surs din limbajul de nivel nalt
[Vin02]. Spre exemplu, pentru o bucl care calculeaz un ir recurent liniar
omogen de ordinul 2 (v
n
= v
n-1
+v
n-2
), ar trebui activat un predictor
echivalent, special croit pentru acest scop. Acest fapt conduce la o limitare
fundamental a procesului de predicie a valorilor prin predictoare
computaionale. Soluia care se impune n acest caz o reprezint
implementarea unui predictor hibrid.
2.2.2.3. PREDICTOARE CONTEXTUALE
n cazul prediciei contextuale valoarea urmtoare se determin pe
baza unui context anterior nregistrat i a valorilor ce au urmat imediat
acestui context n istoria memorat. O clas important a predictoarelor
contextuale sunt cele care implementeaz algoritmul Prediction by Partial
Matching (PPM), care conine un set de predictoare markoviene ca n
figura 5.26. Ideea originar aparine lui Trevor Mudge cel care a folosit-o
pentru prima dat n scopul dezvoltrii unor predictoare de branch-uri care
generalizau predictoarele de tip adaptiv pe dou niveluri (Two Level
Adaptive Branch Predictors) i care sunt prezentate n subcapitolul 5.1.1
[Mud96].
Valoarea predicionat este aceea care a urmat cu cea mai mare
frecven contextului considerat. Dup cum se observ n figura 5.26, ea
este funcie i de contextul considerat, un context mai bogat (lung)
Limitri fundamentale ale paradigmei ILP. Soluii. 63
conducnd adeseori la o acuratee mai ridicat a prediciei (nu ntotdeauna
ns: cteodat contextul se poate comporta ca zgomot fapt ce poate fi
observat i din rezultatele grafice obinute n urma simulrilor proprii din
subcapitolul 7). Ca i n cazul prediciei branch-urilor i aici un predictor
PPM complet de ordin N trebuie s conin N+1 predictoare Markov, de la
ordinul 0 pn la N. Dac predictorul Markov de ordinul N produce o
predicie (context gsit n secvena de valori) procesul se termin, dac nu
atunci se activeaz predictorul Markov de ordinul (N-1) .a.m.d. Un
exemplu de predictor Markov de ordin k, utilizat n predicia target-urilor
salturilor indirecte este ilustrat n figura 5.27. La nivelul tehnologiei actuale,
implementarea unui asemenea predictor PPM complet ar putea fi prohibit.
Bazat pe clasificarea propus, Sazeides [Saz97] introduce dou
caracteristici importante n nelegerea comportamentului fiecrui tip de
predictor anterior prezentat. Prima, este perioada de nvare (Learning Time
- LT), care reprezint numrul de valori din secvena de intrare, generate
naintea primei predicii corecte. A 2-a este dat de gradul de nvare sau
acurateea prediciei (Learning Degree - LD), care reprezint procentajul de
predicii corecte generate dup perioada de nvare a predictorului. Pentru
secvenele constante gradul de nvare devine 100% dup un timp de
nvare unitar pentru predictoarele computaionale i respectiv dup un
timp de nvare egal cu ordinul predictorului PPM (O) n cazul folosirii
celui din urm. O secven incremental este prezis cu acuratee de 100%
doar de ctre un predictor incremental (cu pas constant) n timp ce
secvenele non-incrementale fr repetiie periodic nu pot fi predicionate
de nici una din structurile de predicie anterior prezentate. Practic orice
secven non-incrementale fr repetiie i generabil printr-un algoritm
determinist, poate fi exploatat printr-un predictor particular care s o poat
prediciona satisfctor. Provocarea cercettorilor const n acest caz n
construirea unui predictor general care s predicioneze cu succes clase ct
mai largi din categoria acestor secvene de instruciuni. O propunere
enunat doar i nu rezolvat n [Vin02] se refer la implementarea unui
predictor semantic care s utilizeze informaii relative la structurile
programelor HLL (High Level Languages) procesate. n acest scop,
compilatorul ar trebui s descopere i s transmit predictorului, prin
intermediul codului obiect generat, aceste informaii de semantic
structural a aplicaiei HLL. Prin predictoarele actuale, aceast informaie
semantic se pierde complet n momentul prediciei. O secven
incremental cu repetiie periodic este prezis cu o acuratee de (T-1)/T
(unde T reprezint perioada unei secvene de valori cu repetiie) dup
acelai timp de nvare ca i n cazul unei secvene incrementale fr
repetiie (LT=2). Un predictor PPM obine o acuratee de 100% dup un
64 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
timp de nvare egal cu T+O. O secven de valori non-incremental dar
periodic nu este predicionat corect dect de ctre predictorul PPM
complet. Acurateea de 100% este dobndit tot dup perioada de nvare
mai mare dect n cazul predictoarelor incrementale (LD=T+O).
n figura 2.18 se prezint schema bloc a unui predictor contextual de
valori de tip PPM. Selecia att a intrrii corespondente din tabela de
predicie ct i a contextului se face cu adrea instruciunii n faza de aducere
a acesteia. Fiecare intrare din tabela de predicie VHT are asociat cte un
numrtor saturat (Num). Acesta este incrementat atunci cnd predicia este
corect, respectiv decrementat atunci cnd predicia este incorect. n
cmpurile V
1
, V
2
, , V
4
se memoreaz ultimele patru valori pentru fiecare
instruciune din tabela VHT. Dac automatul se afl n starea predictibil, pe
baza secvenei de valori memorate se genereaz predicia, valoarea prezis
fiind aceea care a urmat cu cea mai mare frecven contextului. Blocul PPM
reine contextul o istorie comprimat prin intermediul unei funcii de
dispersie, a ultimelor valori generate de ctre respectiva instruciune, i
eventual i alte informaii considerate relevante i determin care valoare s-a
repetat de cele mai multe ori dup pattern-ul format din ultimele cele mai
recente patru valori (V
1
, V
2
, V
3,
V
4
), n istoria de valori avute la dispoziie.
O implementare simplificat i fezabil tehnologic a predictorului
contextual de tip PPM o constituie predictorul adaptiv pe dou niveluri.


Figura 2.18 Schema generic a unui predictor contextual de tip PPM
Limitri fundamentale ale paradigmei ILP. Soluii. 65

Predictoare adaptive pe 2 niveluri

n [Wang97] se propune, prin analogie cu predictoarele de branch-uri
de tip Two Level Adaptive, un predictor de valori adaptiv pe dou niveluri.
n esen, o astfel de schem va memora pentru fiecare instruciune, ultimele
4 valori produse. Un mecanism de selecie va determina alegerea uneia
dintre aceste valori ca fiind valoarea prezis. n figura 2.19, se prezint
principiul unei astfel de scheme de predicie a valorilor.


Figura 2.19 Schema bloc a unui predictor de valori pe 2 niveluri
Cmpul Valori Date memoreaz ultimele 4 valori produse de ctre
respectiva instruciune. Aceste 4 valori sunt codificate binar {00, 01, 10,
11}. Ct timp o instruciune produce o valoare aparinnd mulimii Valori
Date, una dintre aceste valori va fi (eventual) selectat spre a fi prezis.
Dac o instan a instruciunii produce o valoare nou, aceasta se introduce
n tabela VHT n detrimentul, datei cel mai de demult nepredicionate. Acest
fapt se stabilete cu ajutorul informaiei din cmpul LRU (Least Recently
Used) care teoretic poate conine cte un contor LRU pentru fiecare dintre
cele 4 date memorate. Cmpul VHP (Value History Pattern) din tabela
VHT, memoreaz un pattern binar pe 2p bii care semnific ultimele p
rezultate generate de ctre instruciunea respectiv. Dac vreuna din
ultimele p instane genereaz o alt valoare dect una din cele 4 memorate,
66 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
respectiva valoare va fi nlocuit n context cu cea mai recent anterior
generat valoare din irul celor 4, ntruct predictoarele contextuale
predicioneaz corect o anumit valoare, doar dac aceasta a urmat acelai
context cel puin o dat. Se reamintete c un rezultat al unei instruciuni
este codificat binar pe 2 bii. Acest cmp VHP adreseaz al doilea nivel de
memorie (PHT Pattern History Table). O linie PHT conine 4
numrtoare (C
0
, C
1
, C
2
, C
3
) saturate independente. Circuitul MAX din
figur lucreaz astfel: dac MAX (C
0
, C
1
, C
2
, C
3
) = C
K
i dac C
K
>= A,
unde A este o valoare de prag prestabilit, atunci circuitul MAX genereaz
la iesire codificarea binar a lui K, pe doi bii. Dac ns C
K
< A, atunci nu
se face nici o predicie considerndu-se c valoarea C
K
asociat pattern-ului
VHP respectiv nu a aprut suficient de frecvent. Dac valoarea asociat unui
numrtor C
K
din linia PHT selectat este produs de ctre instruciunea n
curs, atunci numrtorul C
K
este incrementat (+3) iar celelalte 3
numrtoare din linia respectiv sunt decrementate (-1). Se poate observa
astfel c, prin codificarea binar a ultimelor 4 valori produse, indexul VHP
reprezint un context comprimat al CPU.
Informaia VHP reprezint astfel un mod ingenios de dispersie a
cmpului valorilor de date (hashing), n scopul compresiei acestora i deci, a
reducerii capacitii tabelei PHT. Evident c exist posibilitatea unor
interferene nedorite n tabela PHT. O soluie interesant de reducere a
proceselor de interferen cu mari beneficii asupra acurateii prediciei
valorilor este dat n [Des02] unde se propune utilizarea a nc unei funcii
de dispersie, independent de prima (hash2). Referitor la setul de
numrtoare C
0
C
3
, acestea reprezint practic un grad de ncredere asociat
prediciei. Dac acest grad este sub o anumit valoare prestabilit, se
renun la predicie, cu beneficii asupra performanei globale (n cazul unei
predicii greite e necesar refacerea contextului procesorului i reluarea
unei secvene de instruciuni, ceea ce induce penaliti). Firete, exist o
multitudine de posibiliti de calcul al gradului de ncredere asociat
prediciei (tag-uri, numrtoare saturate, recunoatere de pattern-uri
folosind numrtoare nesaturate procese Markov) [Des02].
n acest moment se nelege de ce schema predictorului adaptiv pe
dou niveluri (vezi figura 2.19) poate reprezenta o implementare
simplificat i fezabil tehnologic a predictorului contextual de tip PPM
(figura 2.18). n fond, fiecrei instruciuni memorate n VHT i se asociaz
un context reprezentnd practic secvena ultimelor p valori produse de ctre
aceasta (pattern-ul VHP). n cadrul acestui context se calculeaz prin
intermediul numrtoarelor C
0
C
3
, valoarea cea mai frecvent generat de
ctre respectiva instruciune n istoria ultimelor sale p instane. Dac aceast
Limitri fundamentale ale paradigmei ILP. Soluii. 67
valoare a aprut suficient de frecvent, ea este predicionat ca fiind valoarea
urmtoare.
2.2.2.4. PREDICTOARE HIBRIDE
Una dintre potenialele dificulti n exploatarea predictibilitii
valorilor, o constituie alegerea tipului potrivit de predictor pentru o anumit
instruciune. Cercetrile arat n mod clar c un singur tip de predictor
(computaional, contextual etc.) nu d n general rezultatele cele mai bune.
Este evident c anumite tipuri de secvene de valori generate prin program
sunt prezise mai bine de un anumit predictor, iar altele, de ctre un alt tip de
predictor particular. Din acest motiv a aprut fireasc ideea prediciei
hibride, adic dou sau mai multe predictoare de valori s conlucreze n
mod dinamic n procesul de predicie. Spre exemplificare, n [Wang97] se
prezint un interesant predictor hibrid compus dintr-un predictor pe 2
niveluri i respectiv un predictor incremental (vezi figura 2.20).


Figura 2.20 Schema bloc a unui predictor hibrid (2 level, incremental)
68 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Ideea de baz este simpl: dac predictorul pe 2 niveluri genereaz o
predicie, aceasta este cea generat de ctre predictorul hibrid, n caz
contrar, se selecteaz valoarea generat de ctre predictorul incremental
(dac acesta genereaz vreuna). Spre exemplu, msurat pe benchmark-ul
Eqntott din seria SPEC92, un predictor incremental a obinut o acuratee
medie de cca. 63%, un predictor pe 2 niveluri cu valoarea de prag A=6 a
obinut cca. 67% iar predictorul hibrid corespunztor a obinut o acuratee
de cca. 81%, observndu-se astfel foarte clar avantajul schemei hibride
[Wang97]. Totui, o politic mai rafinat bazat pe gradul de ncredere cel
mai mare, corespunztor predictoarelor componente, ar fi de dorit n locul
acestei prioritizri simpliste, neadaptive. n acest sens, n cadrul cercetrilor
proprii privitoare la predicia valorilor centrat pe regitrii procesorului, pe
lng implementarea unui predictor hibrid cu selecie bazat pe prioritizare
static au fost propuse trei scheme de metapredicie, dou statice (non-
adaptive) bazate pe confidene i una dinamic (adaptiv), n care selecia
predictorului folosit se face printr-o reea neural de tip
MultiLayerPerceptron (vezi subcapitolul 6.2).
Zhao [Zha00] propune o schem de clasificare static cu ajutorul
compilatorului care grupeaz toate instruciunile unui program n cteva
clase, fiecreia fiindu-i asociat un tip de predictibilitate a valorii (pattern).
Acest pattern de predictibilitate este codificat n corpul instruciunii pentru a
identifica tipul de predictor care se potrivete cel mai bine pentru predicia
valorilor care sunt probabil a fi produse de fiecare instruciune n timpul
execuiei sale. Rezultatele simulrilor arat c prin aceast abordare se poate
reduce substanial numrul de porturi de citire/scriere ale predictorului
pentru un anumit nivel de performan. O alt concluzie ce se desprinde
vizeaz legtura dintre vecintatea valorii i structurile de la nivelul
programului surs pentru o mai bun exploatare a vecintii prin predicia
valorilor. Pe de alt parte, la implementarea predictorului de valori ntr-un
procesor superscalar trebuie inut cont i de urmtorul aspect: ntruct mai
multe instruciuni doresc s acceseze simultan predictorul n fiecare ciclu
acesta trebuie s fie multiport (s permit canale largi de citiri i scrieri).
Msurtori efectuate pe benchmark-urile SPEC95 (programe de
numere ntregi) arat c un predictor de valori simplu [Zha00] trebuie s
suporte n medie 5 accese per ciclu pentru un procesor cu factorul
superscalar de 8, crescnd la 7 accese per ciclu pentru un procesor care
lanseaz 16 instruciuni simultan n execuie (vezi tabelul 2.2. Dac
predictorul de valori nu poate suporta lrgimea de band cerut, predicia
valorilor nu poate fi aplicat tuturor instruciunilor din instruction
window, i atunci nu toate posibilele dependene RAW pot fi nlturate, cu
Limitri fundamentale ale paradigmei ILP. Soluii. 69
repercusiuni negative asupra ratei de procesare. Mai mult, intrrile
predictorului nu vor fi actualizate cu noile valori generate la timp pentru
urmtoarea cerere de predicie, determinnd o cretere corespunztoare a
ratei de miss a prediciei.


Tabelul 2.2. Numrul mediu de cereri per ciclu adresate unui predictor de valori
simplu ntr-un procesor superscalar
O abordare menit s rezolve necesarul de lrgime de band n cadrul
tehnicii de predicia valorilor const n creterea numrului de porturi de
citire/scriere aferente unui predictor de valori, cu repercusiuni negative ns
asupra complexitii de proiectare, densitii de cablare, practic a costului de
implementare. O alt soluie propus de cercettori [Lee99] se bazeaz pe
un predictor de valori decuplat (hibrid) menit s clasifice dinamic
instruciunile i s le aloce unui tip de predictor predefinit (uzual) din cadrul
mai multor predictoare existente. Un dezavantaj al acestei scheme este c
necesit un trace cache modificat pentru a pstra informaia de clasificare
aferent fiecrei instruciuni, i mai mult se consum un timp suplimentar
necesar clasificrii instruciunilor. De asemenea, datorit modificrilor n
comportamentul de predictibilitate al unor instruciuni n timpul execuiei
programului, aceste instruciuni migreaz ntre predictorarele componente
(De ex: un predictor hibrid alctuit dintr-un predictor incremental i unul
adaptiv pe dou niveluri, pentru o aceeai instruciune la un moment se va
prediciona cu ajutorul predictorului incremental, iar ulterior se va genera
valoarea produs de instruciune cu ajutorul celuilalt predictor). Aceste
modificri frecvente vor introduce mai multe stri tranzitorii n cadrul
predictoarelor, scznd eficiena metodei.
Dou tehnici de predicie, extrem de recente [Tho04, Seng04]
susinute la workshop-ul dedicat prediciei valorilor din Boston, octombrie
2004, introduc n premier conceptul de predictor neural la nivelul prediciei
valorilor. Datorit complexitii structurilor propuse n prima lucrare
[Tho04] i ntruct cea de-a doua cercetare predicia valorilor prin regitri
folosind perceptroane (pe scurt perceptronul RVP) [Seng04] se bazeaz pe
structuri hardware existente (set de regitrii generali ai procesorului) i
presupune doar o simpl inovaie arhitectural (introducerea unei tabele de
perceptroane cu algoritmi de predicie i nvare propui de Jimenez
70 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
[Jim02] n cazul instruciunilor de salt), asupra lucrrii lui Seng se va insista
n subcapitolul 2.2.2.6, unde se va pune accentul mai mult pe ctigul de
performan introdus de perceptronul RVP ntr-o microarhitectur
speculativ.
Predictorul Perceptron (cel mai simplu model de predictor neural) s-a
dovedit la nivelul salturilor condiionate, nu numai extrem de eficient din
punct de vedere al acurateii prediciei ci i fezabil de implementat hardware
[Jim02a, Sez04, Tar04]. Avantajul principal al acestuia l constituie
creterea liniar a costului de implementare funcie de istoria memorat i
nu exponenial ca n cazul predictoarelor corelate pe dou niveluri, ceea ce
permite perceptronului utilizarea unei istorii foarte mari n procesul de
predicie pentru observarea corelaiilor ct mai ndeprtate dintre saltul
curent supus prediciei i cele anterioare. Funcia de baz a perceptronului
este de clasificare liniar separabil. Argumentele funciei sunt n bii de
istorie, utilizai pentru simplificarea calculelor n scopul fezabilitii
hardware ca valori bipolare (-1 i +1). Fiecare intrare este ponderat i
reprezint gradul de corelaie al fiecrei intrri cu ieirea. Pe lng cele n
ponderi mai exist o pondere (termen liber) care reprezint tendina
(influena) intrinsec a ieirii independent de intrri.
n [Tho04] sunt prezentate dou structuri (complexe) de predicie
bazate pe perceptron: Last-2 Value i respectiv un predictor incremental
(vezi figurile 2.21 respectiv 2.23). Structura predictorului de valori Last-2
Value, asemntoare cu cea a predictorului de valori pe dou niveluri
anterior prezentat [Wang97], se bazeaz pe un prim nivel cu ultimele valori
generate (VHT value history table) i un al doilea nivel o tabel de
perceptroane, ambele de capacitate 4096 intrri. Pentru reducerea gradului
de interferen, tabela VHT este implementat 4-way asociativ, i este
adresat cu PC-ul instruciunii. Pentru procesul de predicie a valorilor,
fiecare instruciune reine cele mai recente dou valori generate, evacuabile
dup principiul LRU (cel mai puin recent folosit). De asemenea, VHT
cuprinde i un pattern al comportrilor anterioare (vhp). Tabela de
perceptroane aloc cte un perceptron pentru fiecare instruciune (dei era
sufficient probabil, n opinia autorului, un singur perceptron i o tabel de
ponderi), indexat cu o funcie de dispersie XOR aplicat pattern-ului de
istorie vhp i celor mai puini semnificativi 12 bii ai PC-ului instruciunii.

Limitri fundamentale ale paradigmei ILP. Soluii. 71

Figura 2.21 Predictor de tipul Last-2 Value cu perceptron
Vectorul vhp reine istoria codificat a valorilor (0, 1), unde 0 arat c
la momentul respectiv s-a generat val[0], iar 1 semnific generarea valorii
val[1] din cmpul DataValues (vezi figura 2.21). Pattern-ul de istorie vhp
servete ca intrare a perceptronului. Algoritmul de predicie implementat de
perceptron (vezi n continuare secvena de instrucuni n pseudocod apropiat
de limbajul C) se bazeaz pe nsumarea ponderilor aferente biilor corelai
cu val[1] i scderea ponderilor aferente biilor corelai cu val[0]. n funcie
de ieirea obinut, dac y>=0 este prezis val[1], altfel val[0]. Aceasta este
naintat instruciunilor dependente, doar dac ieirea obinut depete un
anumit prag impus (threshold).

y=w[0]
for i=1 to histlen // histlen dimensiunea
pattern-ului vhp
if(vhp[i]==1)
y += w[i]
else // if(vhp[i] == 0)
y+ = -w[i]
end if
end for
(y>=0) ? prediction = 1 : prediction = 0

Jimenez a artat n [Jim02] c un parametru important n proiectarea
perceptronului l reprezint lungimea istoriei. Pentru o dimensiune dat a
acesteia (fie h), s-a observat c cel mai bun prag folosit n decizia binar
72 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
este dat de formula =1.93h+14. Ponderile perceptronului sunt ntregi cu
semn reprezentate pe log
2
+1 bii. n implementarea din [Tho04] istoria
folosit n simulare este h=32, =75 i ponderile sunt reprezentate de ntregi
cu semn pe 8 bii.
nvarea (actualizarea) perceptronului este efectuat n cazurile n
care predicia este greit respectiv corect dar ieirea se afl sub
respectivul prag. Se disting, de asemenea, dou subcazuri n funcie de
apartenea sau nu la cmpul DataValues din structura VHT a valorii
generate de ctre instruciunea curent. Astfel, n situaia unei predicii
corecte dar ieirea sub prag, dac rezultatul instruciunii se afl printre cele
dou stocate n structur (val[0] i val[1]), atunci algoritmul de nvare
(vezi n continuare secvena de instrucuni n pseudocod apropiat de
limbajul C) presupune incrementarea ponderilor pentru care bitul de istorie
este n corelaie pozitiv cu valoarea generat i decrementarea ponderilor n
cazul unei corelaii negative. De asemenea, i pattern-ul de istorie vhp este
actualizat.

If (Resolved_Output == val[0])
w[0]--;
Else if (Resolved_Output == val[1])
w[0]++;
End if
For i = 1 to histlen
If (vhp[i] == 0 && Resolved_Output == val[0])
w[i]++;
If (vhp[i] ==1 && Resolved_Output == val[1])
w[i]++;
If (vhp[i] == 0 && Resolved_Output == val[1])
w[i]--;
If (vhp[i] == 1 && Resolved_Output == val[0])
w[i]--;
End if
End for
vhp <<= 1; vhp |= resolved_index; histlen++;

n cazul n care predicia este greit, dar valoarea generat este una
din cele dou stocate n VHT (se prezice una din cele dou valori iar
instruciunea genereaz de fapt cealalt valoare) ponderile sunt incrementate
/ decrementate cu urmtorul factor: Change = Lrate(T-Y)vhp[i] [Min88]
unde Lrate reprezint rata de nvare, egal cu 2 n [Tho04] iar T i Y, cu
valori bipolare (-1, 1) reprezint ieirea dorit i respectiv cea obinut.
Valorile lui vhp sunt considerate bipolare pentru determinarea factorului
Change.
Limitri fundamentale ale paradigmei ILP. Soluii. 73
n cazul unei predicii greite cauzate de un miss n cache-ul de valori
(valoarea generat nu se se afl ntre cele deja stocate) sunt resetate toate
ponderile i steri toti biii invalizi din vhp (cei corelai cu valoarea care
tocmai se evacueaz). Ponderea termenului liber este resetat doar dac
tendina ei (corelaia) este spre valoarea care se evacueaz. n continuare
este descris algoritmul de actualizare pentru acest din urm caz.

If (LRU == 0 && w[0] < 0) || (LRU ==1 && w[0] > 0)
w[0] = 0;
Else if (LRU == 0 && w[0] >= 0)
w[0]--;
Else if (LRU ==1 && w[0] < 0)
w[0]++;
End if

For i = 1 to histlen
w[i] = 0
End for

vhp_temp = vhp; hist_temp = histlen; vhp = 0;
histlen = 0
For i = 1 to hist_temp
If (vhp_temp[i] != LRU)
vhp <<= 1
vhp | = vhp_temp[i]
histlen++
End if
End for
vhp <<=1; vhp | = LRU; histlen++

Dac structurile de predicie incrementale de tip 2-delta curente
reineau doar o valoare i ultimii doi pai (incrementul), i tranzitau ntr-o
stare stabil (predictibil) doar dac cei doi pai coincideau (vezi figura
2.16), predictorul incremental cu preceptron reine ultima valoare generat
i cei mai receni 2 pai (nu neaprat identici), iar tranziia automatului de
clasificare n starea predictibil se face doar dac pasul selectat este mai
mare dect pragul perceptronului (vezi figura 2.22).

74 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 2.22 Automatul de stare asociat predictorului incremental cu perceptron
Structura predictorului incremental cu perceptron, asemntoare cu
cea a predictorului Last-2 Value cu perceptron, este compus dintr-o tabel
de prim nivel (Stride History Table) i o tabel de perceptroane pe al doilea
nivel, ambele de 4096 intrri (vezi figura 2.23).


Figura 2.23 Predictor incremental cu perceptron
SHT, indexat tot cu adresa instruciunii reine ultima valoare
generat, cei mai receni 2 pai rezultai i un pattern asociat acestor pai
(shp) care reflect corelaia pasului care va fi prezis cu unul din cei doi pai
Limitri fundamentale ale paradigmei ILP. Soluii. 75
memorai. Perceptronul practic va prezice incrementul care va fi adunat la
valoarea stocat n SHT.
Pentru generarea rezultatelor i exploatarea eficient a schemelor de
predicie implementate Thomas [Tho04] a introdus o structur hibrid,
avnd drept componente cele dou predictoare anterior descrise (Last-2
Value Perceptron i incremental cu perceptron), cu selecie bazat pe
numrtoare saturate. Aceasta a fost comparat cu un predictor hibrid
[Wang97] compus dintr-unul incremental de tip 2-delta i unul pe dou
niveluri, dovedit pn atunci optim din punct de vedere al acurateii
prediciei. Complexitatea cutrii n tabela de ponderi i stabilirii prediciei
i respectiv antrenarea perceptronului sunt compensate de o acuratee de
predicie superioar care implic mai puine penalizri i mai puine
instruciuni care sunt retrimise spre execuie. Simulri realizate pe
SPEC2000 au artat c acurateea prediciei perceptronului variaz ntre
93.47% i 93.55% (oarecum asimptotic), pentru bugete hardware situate
ntre 240KB i respective 930KB. Acurateea prediciei generat de un
predictor hibrid clasic [Wang97], n condiii echivalente de cost hardware
variaz ntre 87.73% i 88.41%. Ctigul n performana global de
procesare este nesemnificativ ns (IPC=1.006 pentru predictorul perceptron
respectiv IPC=0.998 pentru predictorul hibrid bazat pe numrtoare
saturate) [Tho04].
n ciuda rezultatelor promitoare, operaiile implicate de predicia i
actualizarea perceptronului (timpul de overhead) fac nc nefezabil
hardware soluia propus, dar deschid calea ideilor de crossfertilizare a
arhitecturii calculatoarelor cu inteligena artificial i n domeniul prediciei
valorilor. Dintre limitrile propunerii din [Tho04] se menioneaz:
implementarea prediciei valorilor doar la nivelul instruciunilor Load;
baza de selecie (valorile care sunt propuse spre predicie) este compus
din doar dou valori (datorit mecanismului de clasificare binar al
perceptronului), cu implicaie direct asupra generalizrii ideii. Aceasta
nu poate fi realizat printr-un simplu perceptron care mparte spaiul
strilor posibile n dou.
Rezult c printre inteniile de viitor ale cercettorilor trebuie ncercat
depirea acestor limitri i extinderea ideii i la alte tipuri de resurse. Se
poate avea n vedere i pipeline-izarea operaiilor de predicie / nvare
similar ca n predicia salturilor [Jim02a] n scopul reducerii timpului de
overhead.


76 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
2.2.2.5. EXPLOATAREA CORELAIEI GLOBALE PRIN SCHEME DE
PREDICIE COMPUTAIONALE
Oarecum ntr-o manier similar cu predicia salturilor, exploatarea
localitii din irurile de valori produse de instruciuni prin predicia
valorilor se poate face innd cont de o istorie fie local sau global a
respectivelor valori. Schemele de predicie existente, computaionale i
bazate pe context [Saz99], exploateaz o istorie local secven de valori
produse de ctre o aceeai instruciune (cea creia i se predicioneaz
rezultatul). Recent a fost propus o schem nou, predictorul gDiff
[Zhou03], destinat s exploateze localitatea computaional extras dintr-o
istorie global de valori, produse de ctre toate instruciunile dinamice
conform ordinii lor de execuie. Aplicabilitatea predictorului gDiff se
regsete n instruciunile care concur la calculul adreselor de
date/instruciuni urmat de citirea valorilor din memorie din cadrul
programelor de uz general. Predictorul bazat pe instruciunea anterioar
(PI), propus n [Nak99] pentru a exploata corelaia dintre dou instruciuni
nvecinate din secvena dinamic de instruciuni, poate fi considerat ca un
predictor bazat pe context, global, de ordinul nti.
Dei rezultatele simulrilor au evideniat o acuratee de predicie a
schemei bazate pe istoria global superioar schemelor locale - contextuale
i incrementale [Zhou03], o problem ce trebuie rezolvat i care limiteaz
performana o reprezint ntrzierea cu care este furnizat o anumit valoare
(adres) necesar unei instruciuni dependente aflat n ateptare care se
dorete a fi predicionat. Se ntmpl n cazul procesoarelor superscalare cu
execuie Out of Order i cu structuri pipeline complexe ca valorile corelate
(dup care se ateapt) s fie indisponibile n momentul prediciei (distana
cauzat de dependen este prea mic). O soluie de a reduce aceast
ntrziere (value delay) ntr-o arhitectur pipeline const n folosirea
speculativ a valorilor imediat dup determinarea lor n faza de execuie,
fr a se mai atepta nscrierea lor n setul de regitri generali. n ciuda
acestui avantaj, secvena global de valori este generat out of order i
variaz n execuie datorit acceselor cu miss n cache respectiv prediciilor
greite ale instruciunilor de salt, diminundu-se astfel avantajul introdus de
gradul ridicat de localitate al respectivelor valori.
Dei pentru exploatarea localitii globale a valorii prin scheme de
predicie computaionale iniial s-a propus o formul analitic n care
valoarea de prezis a unei instruciuni reprezint o medie ponderat
(combinaie liniar) a celor N valori produse de anterioarele N instane
dinamice ale respectivei instruciuni (vezi figura 2.24), datorit
complexitii de natur matematic a problemei i implicit hardware,
Limitri fundamentale ale paradigmei ILP. Soluii. 77
concentrarea s-a axat pe cazurile speciale dar de uz general. Un astfel de
caz, des ntlnit n aplicaii, este ilustrat n figura 2.25.


Figura 2.24. Exploatarea localitii globale a valorii prin scheme de predicie
computaionale - expresie analitic

x
N
= x
N-k
+ D (2),
unde: D reprezint pasul de incrementare iar
x
N
suma dintre valoarea anterior
calculat n istoria global de instruciuni
(x
N-k
) i pasul de incrementare.
Figura 2.25. Caz generic de localitate global incremental desprins din
programele de calcul
Sunt cunoscute dou cazuri care pun n valoare localitatea
incremental global: primul reprezint o succesiune de apeluri implicite
sau explicite de instruciuni dependente RAW (nu neaprat adiacente) vezi
figura 2.26, iar al doilea se refer la structurile de date dinamice (cu
legturi) n care cmpurile componente sunt alocate n aceeai ordine n care
sunt referite (secvenial).


Figura 2.26. Secven de instruciuni cu localitate global incremental
78 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
n figura 2.26 instruciunea Define este dificil de predicionat ns
ajut la predicionarea cu succes a instruciunilor (viitoare) subsecvente
Use, altfel dificil de predicionat folosind doar istoria local a
respectivelor instruciuni.
Predictorul global de valori gDiff se bazeaz n principal pe dou
structuri hardware (vezi figura 2.27): tabela de predicie (PT) respectiv lista
global de valori (GVQ) [Zhou03]. Cea de-a doua GVQ (global value
queue) este implementat sub forma unei structuri de date de tip coad
(FIFO) care reine valorile produse de secvena dinamic de instruciuni n
vederea exploatrii localitii globale a valorii. nscrierea rezultatelor
instruciunilor n GVQ se face in-order imediat ce procesarea acestora s-a
ncheiat.
Tabela de predicie, indexat cu PC-ul instruciunii de predicionat
reine pentru fiecare locaie n parte (instruciune static): distana selectat
(dintre instruciunile dependente x
N
i x
N-K
) i diferenele (incrementul
posibil) dintre rezultatele instruciunii creia i se prezice valoarea i
rezultatele celor n instruciuni dinamice imediat anterioare i care tocmai
i-au ncheiat execuia (fie x
N
-x
N-i
, cu i1,,n).


Figura 2.27. Structura predictorului gDiff de ordinul n
Aa cum se poate observa din figura 2.28, se disting dou faze n
funcionarea predictorului gDiff: predicia valorii respectiv actualizarea
structurii de predicie. La finele fazei fetch instruciune cu PC-ul
instruciunii de predicionat este adresat tabela de predicie. Cmpul
distance al locaiei accesate (fie distance=k) va selecta prin intermediul
celor dou multiplexoare valoarea stocat la indexul k n lista global de
valori (GVQ) respectiv incrementul corespunztor din tabela de predicie
PT. Suma celor dou informaii selectate constituie rezultatul prezis al
instruciunii n cauz. Dei potenial realizabil n doi cicli de procesare
Limitri fundamentale ale paradigmei ILP. Soluii. 79
predicia poate fi mascat n prima ei parte prin procesarea n paralel a
nivelului de decodificare / dispatch.
Faza de actualizare debuteaz de ndat ce execuia instruciunii
(productoare de valori) s-a ncheiat. Cu ajutorul rezultatului acesteia sunt
calculate diferenele dintre valoarea real i cele n valori existente n lista
global, operaie efectuat n paralel. Apoi cele n diferene calculate (pentru
un predictor global de ordinul n) sunt comparate cu diferenele deja stocate
n intrarea corespondent (indicat de PC) din tabela de predicie. Dac s-a
gsit egalitate pentru una din valorile din GVQ atunci distana (indexul
corespunztor) este stocat n cmpul distance aferent intrrii
corespondente din PT. Dac ns n urma celor n comparaii nici una din
cele n diferene calculate nu coincide cu cele stocate n PT, diferenele
calculate sunt memorate n tabela de predicie, dar distana rmne cea
anterioar.


Figura 2.28. Integrarea predictorului gDiff n structura pipeline a unui procesor
Dup cum se va vedea i n exemplul urmtor, preluat din [Zhou03],
un dezavantaj al schemei de predicie gDiff l constituie timpul de nvare
care este de 2 predicii dinamice de valori (practic abia la a treia iteraie a
secvenei dinamice de instruciuni dependente se va putea face o predicie).
Perioada de nvare numrul de valori din secvena de intrare generate
naintea primei predicii corecte coincide cu cea a predictorului
incremental local [Saz99].
Spre exemplificare se consider secvena dinamic de instruciuni
generat de bucla de program urmtoare i bazat n principal pe cele dou
instruciuni statice dependente.

...
a: load r1, r2, #20
... loop
b: add r3, r1, #4
...

80 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Se presupune c valorile produse de instruciunea a sunt (1, 8, 3, 2, ...)
iar instruciunea b genereaz secvena de valori (5, 12, 7, 6, ...). De
asemenea, se presupune c ntre instruciunile a i b mai exist alte dou
instruciuni productoare de valori dar care nu altereaz valoarea registrului
r1 (cel care cauzeaz dependena ntre a i b) i nici nu au vreo corelaie cu
secvena de valori produs de instruciunea a.
Figura 2.29 ilustreaz cum predictorul gDiff va nva gradual s
predicioneze rezultatele instruciunii b pornind de la valorile produse de
instruciunea a.


Figura 2.29. Funcionarea predictorului gDiff ntr-o secven dinamic de
instruciuni
La finele execuiei instruciunii b sunt calculate diferenele dintre 5
(valoarea furnizat de instruciunea b) i valorile din coada global de valori
GVQ. Diferenele astfel calculate sunt comparate cu diferenele anterior
stocate n tabela de predicie la adresa indicat de PC. Se presupune c
valoarea iniial a diferenelor din tabela PT este 0 (vezi figura 2.29a).
ntruct nici una din comparaii nu este cu succes diferenele calculate sunt
stocate n tabela de predicie prin suprascrierea celor existente. La a doua
iteraie a buclei cnd instruciunea b se ncheie i produce valoarea 12
(figura 2.29b) sunt calculate noile diferene care de aceast dat vor
determina o potrivire cu diferenele stocate pe indexul 2 n PT. Astfel,
indexul rezultat va fi stocat n cmpul distance din linia corespondent din
Limitri fundamentale ale paradigmei ILP. Soluii. 81
PT necesar pentru predicia urmtoarelor apariii ale respectivei instruciuni.
Ulterior (figura 2.29c), cnd instruciunea b se va afla n faza dispatch,
predictorul gDiff poate genera o valoare, aceasta fiind suma dintre pasul de
incrementare stocat pe indexul specificat de distance (diff2 n acest
exemplu) i valoarea din GVQ de pe poziia indicat de cmpul distance.
Valoarea 3 din GVQ nsumat cu valoarea 4 din lista diferenelor memorate
va determina n acest caz rezultatul corect produs de instruciunea b.
2.2.2.6. CONSIDERAII PRIVIND PERFORMANA GLOBAL A
MICROARHITECTURILOR SPECULATIVE
nainte de a exprima consideraiile privind performana global a
microarhitecturilor cu execuie speculativ trebuie remarcate cteva aspecte
privitoare la instrumentele care fac posibil cuantizarea i exploatarea
acesteia. Din nefericire, paradigma actual de cercetare n domeniul
arhitecturii calculatoarelor este prea specializat, prea limitat.
Instrumentele de cercetare corespondente sunt destul de mbtrnite. De
asemenea, interfaa hardware-software nu poate fi neleas n
profunzime, sau formalizat ntr-o manier real calitativ din mai multe
motive:
Principala abordare a arhitecturilor de calcul se bazeaz mai degrab pe
benchmarking i simulare dect pe modele matematice, iar rezultatele
cantitative obinute reprezint doar efecte i nu cauze reale ale
fenomenelor procesate.
Teoria matur bazat pe logic este nlocuit printr-o mulime de metode
euristice, empirisme, principii i reguli de natur statistic (vezi regula
90/10).
innd cont de caracteristicile procesului de evaluare al arhitecturilor
moderne de procesare, n continuare vor fi prezentate att din punct de
vedere cantitativ ct i calitativ rezultate statistice bazate pe simulri
laborioase ale cercetrilor, urmate de descrierea unui model analitic care,
dei nu poate nlocui tehnica de benchmarking, genereaz concluzii n
concordan cu aceasta.
O prim cercetare care demonstreaz mbuntirea performanei unei
micoarhitecturi standard, echivalent PowerPC 620, prin nglobarea unui
predictor de valori, de tip Last Value, aparine lui Lipasti [Lip96b].
Simulri realizate pe benchmark-urile SPEC92 au artat un speed-up mediu
de 5 procente n favoarea microarhitecturii speculative. Considernd un
model architectural infinit (resurse hardware nelimitate) dar nu ideal
(fiind limitat de acurateea de predicie diferit de 100% i de lrgimea de
82 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
band a mecanismului de fetch un singur branch realizat per ciclu de tact),
Lipasti raporteaz un ctig de performan de 30% prin implementarea unui
predictor de valori de tip Last Value.
Impactul introdus de predicia valorilor asupra performanei
procesoarelor este cu att mai mare cu ct factorul superscalar al arhitecturii
este mai mare (ntr-o fereastr de instruciuni mai mare este posibil s
apar mai multe dependene RAW care pot fi nlturate prin predicia
valorilor instruciunilor). Folosind un predictor incremental de valori i
realiznd simulri pe benchmark-urile SPEC95 n [Gab98] se determin
cteva cauze ale limitrilor ctigului de performan obinut de ctre o
microarhitectur speculativ. Potenialul prediciei valorilor este cel mai
bine valorificat, cnd procesorul dispune de un mecanism de aducere a
instruciunilor de band larg. Pentru o rat de fetch de 4 instruciuni per
ciclu de tact, speed-up-ul obinut prin predicia valorilor este sub 4%, n
timp ce extinznd rata de aducere a instruciunilor la 8, 16, 32 i 40 (valori
nerealiste fr Trace Cache), ctigul mediu de performan variaz ntre
8% i 80%.
Numrul salturilor predicionate simultan are o influen direct asupra
ctigului de performan realizat prin predicia valorilor. Astfel,
presupunnd un predictor perfect de salturi, prin predicia unui singur
branch per ciclu de tact, ctigul prin predicia valorilor este insignifiant
(3%), n timp ce, prin predicia simultan a 4 salturi per ciclu de tact, se
obine un ctig mediu de performan de 50%. Repetnd experimentul, dar
implementnd un predictor real de tip PAp (vezi subcapitolul 5.1.1) cu 2048
intrri, 2-way asociativ i un registru de istorie global pe 4 bii, cu o
acuratee de predicie de 86%; ctigul de performan prin predicia
valorilor este mai moderat, de doar 20%.
Un ultim experiment referitor la aceeai surs [Gab98], const n
implementarea unei memorii trace cache, mapate direct de capacitate 64
intrri, care poate reine pn la 32 de instruciuni sau pn la 6 basic-
blocuri. Prin asocierea trace cache-ului cu predictorul PAp anterior, ctigul
de performan introdus de predictorul incremental este de doar 10%, spre
deosebire de 40%, ct s-ar fi obinut dac n locul predictorului de salturi
PAp s-ar fi folosit predictorul ideal.
n [Cal99] se dezvolt tehnici interesante de reducere a presiunii
asupra tabelelor de predicie prin filtrarea instruciunilor care vor accesa
aceste tabele. n esen, autorii demonstreaz pe baza unor simulri
laborioase, faptul c dac se selecteaz spre a fi predicionate instruciunile
aparinnd cii critice a programului, performana global va crete n mod
semnificativ. n practic, determinarea pe durata procesrii a acestor
instruciuni mari consumatoare de timp necesit utilizarea unor informaii
Limitri fundamentale ale paradigmei ILP. Soluii. 83
tip profilings precum i ajutorul compilatorului. Din acest motiv, autorii
selecteaz instruciunile predictibile ntr-un mod mai pragmatic i mai facil
de implementat. Astfel se vor selecta acele instruciuni aflate n curs de
procesare n diferite faze i care aparin lanului cel mai lung de dependene
RAW. Pentru tabele de 1024 de intrri se raporteaz o cretere medie a
performanei fa de o main superscalar clasic de cca. 11% prin
utilizarea unor asemenea tehnici de predicie selectiv a instruciunilor.
Tullsen i Seng [Tull99] au propus o metod intitulat predicia
valorilor prin regitri(pe scurt predictorul RVP) care identific
instruciunile care produc valori, deja aflate n setul de regitri generali.
Autorii au constatat c 75% din timp, valorile ncrcate din memorie fie se
afl n setul de regitrii generali, fie au existat recent. Prin aceast tehnic se
ncearc exploatarea reutilizrii valorii regitrilor (o form de localitate).
Astfel, rezultatul unei instruciuni este prezis ca fiind chiar valoarea stocat
deja n actualul registru destinaie. Predictorul RVP, indexat cu cei mai
puin semnificativi bii ai adresei instruciunii, este reprezentat printr-o
tabel de numrtoare saturate pe 3 bii, incrementate ori de cte ori o
instruciune produce o aceeai valoare ca cea existent deja n registrul su
destinaie. Contorul este resetat n momentul n care rezultatul produs de
instruciune difer de cel aflat n registrul destinaie. Pragul impus
(threshold) este 6, astfel nct o instruciune este predicionat doar dac
numrtorul depete respectivul prag. Pe lng ctigul de performan
raportat de 11% folosind benchmark-urile SPECint95 i respectiv 13%
folosind testele SPECfp95, prin aceast tehnic este eliminat necesitatea
unor structuri hardware de predicie reducndu-se costul de implementare.
Suportul compilatorului este folosit pentru a crete oportunitile oferite de
aceast tehnic de predicie. Cu toate c regitrii procesorului joac un rol
important n procesul de predicie, tehnica propus de Tullsen este centrat
pe instruciuni, numrtoarele saturate folosite n implementare fiind
asociate mai degrab instruciunilor dect regitrilor. n subcapitolul 6.2 s-a
propus o tehnic original alternativ de predicia valorilor, centrat pe
contextul procesorului, care prezice noua valoare a unui registru bazat pe
valorile anterioare stocate n respectivul registru (contribuie original).
n [Seng04] este propus o inovaie arhitectural introducerea unei
tabele de perceptroane (Perceptronul RVP), avnd ca scop eficientizarea
procesului de predicie introdus de Tullsen (RVP) prin folosirea
informaiilor de redundan aferente ultimelor N instruciuni executate.
Perceptronul RVP, schem global de predicie, este indexat cu cei mai
puin semnificativi bii ai PC-ului instruciunii. Intrarea n perceptronul
accesat sunt biii registrului de istorie global comportamentul ultimelor N
instruciuni executate: redundante (+1) sau neredundante (-1). n
84 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
implementarea propus, Seng nu folosete ponderea termen liber (bias)
prefernd utilizarea unui bit suplimentar de istorie. De fiecare dat cnd se
execut o instruciune, perceptronul prezice redundana sau neredundana
respectivei instruciuni. Predicia efectuat se compar cu rezultatul real al
instruciunii, perceptronul primind printr-o reacie invers, pozitiv sau
negativ, informaia de actualizare a ponderilor sale. Algoritmul de predicie
(suma ponderat a intrrilor comparat cu un prag ), precum i stabilirea
pragului optim, a numrului de bii pe care sunt reprezentate ponderile sunt
conform propunerilor lui Jimenez, utilizat n predicia salturilor condiionate
[Jim02].
Algoritmul de nvare al perceptronului selectat se bazeaz pe tabelul
urmtor (vezi tabelul 2.3 i este aplicat n situaia unei predicii greite sau
dac ieirea perceptronului este sub pragul .

A fost instruciunea corespunztoare
bitului i din registrul de istorie global,
redundant ?
Este instruciunea
redundant ?
Da Nu
Da w[i]++ w[i]--
Nu w[i]-- w[i]++
Tabelul 2.3 Algoritmul de nvare n cazul Perceptronului RVP
n implementarea realizat de Seng, avnd ca baz o microarhitectur
speculativ cu factor superscalar de 8 instruciuni per ciclu, pot fi supuse
prediciei toate instruciunile care au ca destinaie un registru ntreg sau
flotant (load, aritmetice ntregi sau flotante). Istoria maxim considerat
este de 60 de bii iar ponderile sunt numere ntregi cu semn reprezentate pe
cel mult 7 bii. Simulrile realizate arat necesitatea suportrii de ctre setul
de regitri generali, simultan a unei rate de citire de 2.28 accese per ciclu.
De asemenea, se observ c schema de predicie neural are un
comportament contradictoriu. Dei n medie acurateea prediciei este
superioar celei obinute cu predictorul RVP clasic [Tull99] exist
benchmark-uri pentru care structura clasic se comport mai bine. O
explicaie ar putea fi faptul c predictorul RVP tinde s detecteze
predictibilitatea local n timpul execuiei individuale a fiecrei instruciuni
pe cnd perceptorul RVP se bazeaz pe comportamentul global al
instruciunilor anterioare.
Rezultatele simulrilor pe benchmark-urile SPEC2000 conduc la
concluzia c cu ct crete dimensiunea istoriei memorate cu att se
mbuntete performana, cu toate c, aceasta devine asimptotic de la o
Limitri fundamentale ale paradigmei ILP. Soluii. 85
anumit dimensiune a istoriei pentru unele benchmark-uri mcf, iar pentru
altele, creterea continu i pentru istorii mai mari de 60 de bii mgrid.
Pentru o microarhitectur speculativ care ncorporeaz un Perceptron RVP
de 8192 intrri ctigul de performan global de procesare introdus este de
8.1%, ajungndu-se n cazuri particulare i la 45.2% [Seng04]. Practic 80%
din speed-up-ul realizat cu o istorie de 60 bii poate fi atins cu o istorie
restrns de numai 16 bii. Procentajul instruciunilor redundante
predicionate corect din totalul instruciunilor redundante, crete de la 85.6%
pentru o istorie egal cu 4 la 87.8% pentru o istorie de 32 de bii. Acurateea
prediciei crete de la 94.2% pentru o istorie de 4 bii pn la 97.7% pentru o
istorie de 16 bii ajungnd la 98.6% pentru maximul de istorie considerat
(60).
n vederea ndeplinirii dezideratului de fezabilitate hardware i a
creterii acurateii prediciei, printre inteniile de viitor ale cercettorilor, pe
lng optimizrile legate de timpul de overhead, trebuie ncercat limitarea
procesului de predicie (i reinerea comportamentului redundant) la doar
cteva tipuri de instruciuni (load / mult / div). De asemenea, se poate studia
influena istoriei comportamentului salturilor (HRg), pe lng, sau n locul,
informaiilor de redundan a valorilor. Soluia presupune economisirea de
spaiu hardware deoarece aceast istorie (HRg) aferent instruciunilor de
ramificaie este deja pastrat n procesor [Seng04].
Pe lng consideraiile privind performana global a
microarhitecturilor speculative rezultate n urma simulrilor laborioase a
unor benchmark-uri reprezentative (SPEC95, SPEC2000), n continuare,
preluat din [Vin02], este prezentat o abordare analitic care evideniaz
potenialul tehnicii de predicie a valorilor de a crete paralelismul la nivelul
instruciunilor.
Iniial n [Gab98a] se propune un model analitic elaborat n vederea
determinrii creterii de vitez aduse de o arhitectur cu predicie a valorilor
fa de una superscalar clasic. Dei modelul conine cteva greeli i
omisiuni, eliminate n [Vin02], el este n principiu corect i merit s fie
analizat. Se consider o main abstract cu o infinitate de regitri generali
i uniti de execuie. De asemenea, se consider c probabilitatea ca o
anumit instruciune s se execute speculativ i deci s fie corect
predicionat, este p, fiind egal cu acurateea medie de predicie a valorilor
instruciunilor. Pentru simplificare, o instruciune predicionat corect se
execut n mod instantaneu, n caz contrar ea executndu-se n timpul T.
Modelul ia n considerare calea critic a programului i consider, pentru
simplitate, c ntregul program se afl memorat n resursele interne ale
procesorului (deci un instruction window infinit). De remarcat faptul c,
avnd n vedere c modelul are resurse infinite i deci este posibil o
86 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
redenumire perfect a resurselor dependente WAR i WAW, instruciunile
din afara cii critice se vor procesa n paralel cu cele aparinnd acesteia. O
reprezentare grafic simplificat aferent procesrii instruciunilor pe
modelul propus este dat n figura 2.30.

Figura 2.30 Model speculativ de procesare a instruciunilor
Semantica figurii 2.30 este urmtoarea: dac instruciunea I
k
este
predicionat corect (p) atunci execuia ei este practic instantanee, altfel (1-
p) aceasta se execut n timpul T. Aadar, orice arc are asignate dou
componente: o probabilitate de execuie speculativ i respectiv un timp de
execuie a instruciunii (nespeculative).
Timpul total de execuie al programului este:

1
) (

+ =
n
T T n ET , (2.1)
unde T
n-1
reprezint timpul de execuie al celor (n-1) instruciuni
urmtoare instruciunii I
1
, deci timpul aferent instruciunilor I
1
, I
2
, , I
n
. Se
poate scrie:

Prob(T
n-1
= kT)=C (1-p)
k
p
n-1-k
,
k
n 1
k {0,1,2,,n-1} (2.2)

Firete c este ndeplinit i relaia de normalizare:

=

= =
1
0
1
1 ) ( Pr
n
k
n
kT T ob (2.3)

Rezult c timpul total de execuie este:

=


+ = = + =
1
1
1
1
) 1 (
1 1
) 1 ( ) ( Pr ) (
n
k
n
k
k n k k
n n
p p kC T T kT T ob k T T n ET
(2.4)

Pe baza identitii ce rezult din chiar definiia combinrilor i anume:

Limitri fundamentale ale paradigmei ILP. Soluii. 87
! )! (
!
k k n
n
C
k
n

= (2.5)

se arat imediat c este ndeplinit egalitatea:

1
2 1
) 1 (


=
k
n
k
n
C n kC (2.5)

Lund n considerare aceast ultim identitate i innd cont de ultima
expresie a lui ET(n), putem scrie succesiv egalitile:

) 1 )( 1 ( )) 1 ( )( 1 )( 1 (
) 1 ( ) 1 )( 1 ( ) 1 ( ) 1 (
2
1
1
1
1 1
2
1
1
1
1
2 1
p n T p p p n T
p p C p n T p p C n T T
n
k n
n
k
k k
n
k n
n
k
k k
n n
= + =
= = =


(2.6)

n concluzie, timpul total de execuie este:

) 1 )( 1 ( ) ( p n T T n ET + = (2.7)

Rezult c accelerarea S(n) fa de un procesor echivalent, dar fr
predictor de valori, este:

) 1 )( 1 ( 1 ) (
) (
p n
n
n ET
nT
n S
+
= = (2.8)

innd cont de faptul c numrul de instruciuni dinamice executate
este practic infinit, accelerarea este:

p
n S S
n

= =

1
1
) ( lim ) ( (2.9)

Avnd n vedere multiplele simplificri operate, n realitate
accelerarea este mai mic dect ) ( S obinut, dar i aa rezultatul este unul
important i deosebit de sugestiv.
Se poate deduce o expresie analitic a creterii de performan i n
cazul, mai realist, n care se consider o fereastr finit de instruciuni.
Notnd cu w (w>1) capacitatea acestei ferestre de instruciuni, probabilitatea
de a prediciona corect k instruciuni consecutive este:
88 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

=

= =

w k p
w k p p
k L ob
w
k
,
1 1 , ) 1 (
) ( Pr
1
1
(2.10)

S-a notat cu L o variabil aleatoare care semnific numrul de
instruciuni evacuate din fereastra de instruciuni n fiecare ciclu. Numrul
de instruciuni evacuate n fiecare ciclu L este dat de instruciunile din lanul
de instruciuni dependente RAW, situate pn la prima instruciune
predicionat greit. Se noteaz E(L) o medie ponderat a instruciunilor
evacuate n fiecare stare a modelului.
innd cont de faptul c: (2.10)

=
= =
w
k
k L p
1
1 ) (
E(L) = 1P(L=1) + 2P(L=2) + ... + (w-1)P(L=w-1) + wP(L=w)

=
= =
w
k
k L p k L E
1
) ( ) ( (2.11)

1
1
1
1
1
1
1 1
1
1
) 1 ( ) 1 ( ) ( ) ( ) (

=
+

= + = = + = =

w
w
k
k
w
k
w k
w
k
p w p k p p w p p k w L p w k L p k L E

ntruct:
( )
( )( ) ( )
( )
( )
2
1
2
1
'
'
1
1
1
'
1
1
1
1
'
1
1
1
1
1 1
1 1
1
p
p p p w p p w
p
p p p p w
p
p p
p
p
p p p p k
w w w
w w w w
k
w w
k
k
w
k
k k

+ +
=
=

+
=

= =


=

=



Rezult c,
p
p
p p
p
p
p w p w w p p w
p w
p
w p p w
L E
w w
w w w w
w
w w

+ +
= +

+
=

1 1
1
1
1
1
) 1 ( 1

) 1 (
) 1 ( 1
) (
1 1
1
1
(2.12)

Valoarea obinut astfel este chiar accelerarea real, ntruct execuia
cii critice pe procesorul convenional este redus la 1 instr./ciclu. Speed-
up-ul obinut de o arhitectur speculativ cu o fereastr de w instruciuni
Limitri fundamentale ale paradigmei ILP. Soluii. 89
este dat de accelerarea ideal (obinut pentru o fereastr infinit) din care
se scade un termen dependent de lungimea ferestrei.
Ca i contribuie proprie, n subcapitolul 6.1.2 se propune dezvoltarea
unui model teoretico-practic de evaluare a performanei arhitecturilor
pipeline cu execuii multiple, bazat pe implementarea schemelor de predicia
valorilor. Practic se urmrete determinarea ctigului de performan
obinut (speed-up) de ctre o microarhitectur speculativ care nglobeaz
tehnica de predicie a valorilor instruciunilor de tip Load, datorit latenei
ridicate de execuie a acestora, n condiiile accesului la memoria principal.
2.2.3. PROBLEME DE IMPLEMENTARE A PREDICIEI
VALORILOR N ARHITECTURI CU MICROFIRE
MULTIPLE DE PROCESARE
Paralelismul speculativ la nivel de fir de execuie (coarse grain) a fost
recent propus ca o surs alternativ de paralelism (celui de tip fine grain la
nivel de instruciune) care poate spori performanele aplicaiilor acolo unde
sunt greu de gsit instruciuni independente. O abordare inedit care
integreaz predicia valorilor n arhitecturile de tip multithread este propus
de Marcuelo [Mar99]. Ideea de baz const n execuia concurent a unor
thread-uri speculative din cadrul programului, determinate pe timpul rulrii
acestuia cu ajutorul predictorului de branch-uri. Firele sunt executate
speculativ deoarece prezint, n general, att dependene de date ct i de
control fa de cele anterioare, fire independente fiind greu de gsit n
aplicaii non-numerice. Pentru execuia thread-urilor speculative mpreun
cu cele nespeculative, este necesar ca procesorul s ofere contexte hardware
multiple precum i mecanisme pentru a nainta sau a prezice valori produse
de un fir i folosite de altul. Fiecare thread va avea propria sa fereastr de
instruciuni. Exist diferene ntre microarhitecturile care exploateaz
paralelismul speculativ la nivel de fir de execuie, n funcie de modul n
care programele sunt mprite n fire: de ctre compilator sau prin tehnici
hardware o problem realmente esenial. Spre exemplu, n cazul unei
bucle de program, thread-urile speculative ar putea fi constituite din chiar
iteraiile buclei respective (strategie numit loop-iteration [Mar00]). n
literatura de specialitate [Mar00] sunt propuse mai multe strategii de
determinare efectiv a firelor de execuie: loop-continuation (crearea unui
thread speculativ din instruciunile aflate imediat dup branch-ul static care
determin re-execuia buclei) i respectiv subroutine continuation
(generarea unui fir speculativ ncepnd cu prima instruciune static aflat
90 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
dup cea de apel a subrutinei). O alt soluie, mai complex ns, de care tot
compilatorul este responsabil, se bazeaz pe euristici menite s minimizeze
dependenele dintre firele de execuie active. O rezolvare simpl a inter-
dependenelor existente ntre thread-urile componente unor programe non-
numerice, caracterizate prin grade limitate de paralelism, ar consta n
serializarea dependenelor de date. Predicia valorilor ar putea comprima
lanurile de instruciuni dependente, mbuntind semnificativ performana
acestor arhitecturi multifir. Cercetri laborioase au artat c o asemenea
arhitectur hibrid a implicat o cretere de performan de 40% fa de o
arhitectur superscalar monofir i respectiv de 9% fa de o arhitectur
superscalar monofir avnd nglobat un predictor hibrid de valori [Vin02].
Implementarea prediciei valorilor n procesoarele care suport
multithreading sau n sisteme multiprocesor determin apariia unor
probleme de corectitudine (coeren a sistemului ierarhic de memorie i
pstrarea unui mecanism precis de tratare a ntreruperilor i excepiilor).
Studiile cercettorilor [Lip01] au reliefat c n sistemele cu paralelism la
nivelul thread-urilor simpla predicie a unei valori urmat de verificarea
ulterioar (valoarea prezis este egal cu valoarea calculat, rezultat n
urma execuiei) nu este ntotdeauna suficient.
ntr-un sistem monoprocesor, monofir corectitudinea se traduce prin
ordinea de execuie a instruciunilor. n sistemele cu paralelism la nivelul
firelor de execuie, corectitudinea este definit prin consistena modelului de
memorie (interfaa hardware-software care definete ordinea legal de
execuie a instruciunilor cu referire la memorie load / store). Un model de
memorie consistent trebuie s rspund la urmtoarele ntrebri:
Q1: "Dac un fir scrie n dou locaii diferite de memorie n ce ordine
vor vedea alte fire sau dispozitive ale sistemului aceste scrieri ?"
Q2: "Vor observa toate firele din sistem cele dou scrieri n aceeai
ordine ?"
ntruct predicia valorilor acioneaz asupra consistenei modelului de
memorie prin permiterea instruciunilor dependente de date s fie reordonate
(predicia rezultatului unei instruciuni load urmat de un store i apoi de re-
execuia load-ului ca urmare a prediciei greite), trebuie verificat ca prin
implementarea acestei tehnici n sistemele cu paralelism la nivelul thread-
urilor s nu fie nclcat modelul consistent de memorie. Spre deosebire de
procesoarele monofir, n sistemele cu paralelism la nivelul thread-urilor,
care implementeaz tehnica de predicia valorilor este posibil ca valoarea s
fie predicionat greit n momentul prediciei dar n momentul verificrii s
fie cea corect, ntruct un alt fir (procesor, dispozitiv periferic) a modificat
valoarea n intervalul dintre predicie i verificare.
Limitri fundamentale ale paradigmei ILP. Soluii. 91
Lamport [Lam79] a formalizat noiunea de model consistent de
memorie prin definirea unui sistem consistent secvenial (SC) n condiiile:
(1) dac rezultatul execuiei oricrei instruciuni este acelai ca i cum
operaiile tuturor procesoarelor (firelor) au fost executate ntr-o anumit
ordine secvenial i (2) operaiile fiecrui proces (fir) individual apar n
aceast secven n ordinea stabilit prin program dup compilare. SC este
cel mai restrictiv model de consisten a memoriei care a fost implementat
comercial n sisteme cu procesor MIPS R10000 i HP PA-8000.
Cnd se aplic tehnica de predicie a valorii unei instruciuni,
procesorul prezice rezultatul respectivei instruciuni, i continu speculativ
execuia instruciunilor din cadrul aceluiai thread (incluzndu-le i pe cele
dependente). Din motive de simplitate, n unele implementri [Lip01] se
ateapt verificarea oricrei predicii de valori efectuate, nainte de execuia
vreunei instruciuni store ntlnite pe perioada rulrii speculative a
instruciunilor din fir. n momentul ncheierii execuiei instruciunii al crei
rezultat a fost predicionat, posibil dup mai muli cicli datorit acceselor cu
miss n cache sau altor ntrzieri, procesorul compar valoarea prezis cu
cea real rezultat. n caz de egalitate, predicia a fost cu succes, s-a ctigat
timp prin execuia speculativ a instruciunilor, altfel se vor relua
instruciunile thread-ului folosind un mecanism de recovery similar celui
utilizat n cazul prediciei greite a branch-urilor.
Exist cteva modaliti de implementare corect a prediciei valorilor
ntr-un sistem consistent secvenial. Detecia bazat pe adres i respectiv
detecia bazat pe valoare prentmpin nclcarea ordinii de execuie a
operaiilor cauzate de predicia valorilor, ns adaug complexitate i crete
costul de implementare. n prima variant un procesor trebuie s detecteze
cnd un alt thread, procesor sau dispozitiv periferic scrie la o adres care a
fost citit speculativ din cache de ctre o instruciune nefinalizat nc (care
nu a efectuat faza commit / writeback). n momentul observrii unei violri a
ordinii operaiilor load/store procesorul reia execuia thread-ului speculativ
de la o stare consistent cunoscut. Procesorul MIPS R10000 pune n
practic aceast abordare prin suplimentarea cozii load/store pentru: (1) a
reine adresele care au fost citite (ncrcate) speculativ pn la retragerea
(executarea fazei commit/writeback) load-urilor i (2) pentru a compara
toate aceste adrese cu adresele scrise de ctre alte procesoare (thread-uri).
Aceste scrieri externe sunt observate prin sosirea unor mesaje de invalidare
a acestor adrese n cadrul unui protocol de coeren. Pentru implementarea
prediciei valorilor n procesoarele multithread viitoare trebuie pstrat cte
o tabel pentru fiecare thread cu adresele load-urilor executate speculativ i
verificate toate scrierile (store) efectuate de alte fire, aferente oricrui
procesor, n respectiva tabel. Schema ns, este extrem de conservativ n
92 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
sensul c determin uneori evacuri din tabel i declaneaz mecanismul de
refacere a corectitudinii chiar i n cazul unor scrieri silenioase (acele
instruciuni care scriu n memorie o aceeai valoare ca i precedenta, deci
care nu modific starea sistemului) [Lep00]. Rezultatele simulrilor pe
benchmark-urile SPEC95 au artat c ntre 34% i 68% din instruciunile
Store sunt silenioase, fapt ce poate fi exploatat practic, prin anularea
execuiei acestor instruciuni, cu beneficii asupra performanei sistemului de
calcul [Lep00].
Detecia bazat pe valoare presupune execuia speculativ a load-
urilor i a celorlalte instruciuni dependente din thread, urmate de reexecuia
instruciunii load n momentul n care operanzii si devin nespeculativi
(cunoscui). Aceast abordare nltur din conservatorismul schemei
anterioare ns, prin reexecuia instruciunilor load conduce la creterea
concurenei asupra porturilor cache-ului de date. O abordare recent n
sprijinul deteciei bazat pe valoare a consistenei memoriei se refer la
verificarea dinamic folosind o arhitectur decuplat (nucleu separat de
procesor dotat cu cache de date propriu) care efectueaz verificrile n
paralel cu execuia procesorului.
n extinderea conceptului de predicie a valorilor instruciunilor n
arhitecturi cu microfire multiple de procesare se afl i predicia la nivel de
funcie [Kavi03]. Astfel, ar putea exista un thread care folosete rezultatul
prezis al funciei sporind gradul de paralelism al aplicaiei i un alt thread
care s calculeze funcia i n cazul unei predicii greite s refac operaiile
/ contextul necesare (procesul de recovery).
Foarte succint, n cadrul acestui capitol, concluzia ar fi c, dintre
constrngerile care limiteaz paralelismul la nivelul instruciunilor n
procesoarele superscalare, singura fundamental, i care nu poate fi
eliminat prin metode hard-soft de tipul: multiplicri de resurse, predicii de
salturi, mecanisme de redenumire a regitrilor etc. o constituie
dependenele reale de date. ncepnd cu anul 1996, dou tehnici au fost
dezvoltate pentru reducerea efectului negativ introdus de dependenele de
date de tip read after write: reutilizarea dinamic a instruciunilor i
predicia valorilor. Este posibil ca n viitor s se evolueze spre tehnici
automate de reutilizare a codului executat dinamic att n hardware ct i n
software, combinndu-se puterea de reutilizare prin transmiterea
informaiilor de semantic structural de la nivel high mecanismelor
hardware de la nivel low. De asemenea, se poate spune c predicia, o
problem tiinific de mare interes (n domenii din cele mai diverse:
seismologie, meteorologie, astronomie etc.), care n cazul general necesit
folosirea unor instrumente matematice foarte puternice precum procesele
Markov ori seriile de timp [Vin02], va migra i n cadrul viitoarelor
Limitri fundamentale ale paradigmei ILP. Soluii. 93
generaii de microprocesoare avansate. Pentru aceasta, este necesar ca
arhitecii de microprocesoare s acorde o mai mare atenie problemei
generale a prediciei, aa cum apare ea n tiina actual. n fond, valorile
generate de instruciuni pot fi asimilate cu nite serii de timp discrete. De
multe ori, n cazul contextual, aceste iruri de valori generate prin programe
pot fi asimilate cu procesele Markov care reprezint o succesiune de stri,
trecerea de la una la alta efectundu-se cu o probabilitate condiionat
proprie procesului, funcie de strile anterioare. Problema predictibilitii
este strns legat de cea a staionaritii seriilor de timp respective. O serie
este staionar dac media i dispersia sunt finite i constante n timp iar
funcia de autocorelaie depinde numai de valoarea intervalului pe care s-a
calculat [Pop00]. Studiul seriilor de timp nu poate fi dect benefic n scopul
construirii unor predictoare ct mai eficiente, favoriznd execuia super-
speculativ a instruciunilor i n consecin, viteze de procesare tot mai
mari.
3. METODOLOGIA DE SIMULARE
3.1. BENCHMARK-URI UTILIZATE N SIMULARE.
CARACTERISTICI.
3.1.1. BENCHMARK-URILE SPEC95.
SPEC (Standard Performance and Evaluation Corporation) au fost
dezvoltate de SPECs Open Systems Group (OSG), care nglobeaz peste
30 de productori de calculatoare, integratori de sisteme, autori si
consultani din ntreaga lume. Benchmark-urile reprezint seturi de aplicaii
dezvoltate pentru evaluarea performanelor calculatorului i pot fi folosite
pe diverse versiuni de UNIX, Linux i Microsoft (dezvoltate de Microsoft).
Caracteristicile benchmark-urilor SPEC95 precum i intrrile lor
aferente sunt descrise n tabelul urmtor:

Benchmark-urile SPEC 95
Benchmark
Intrare
folosit
Caracteristici
Applu Applu.in Rezolv sisteme de matrici prin metode de pivotare
Apsi Apsi.in Calculeaz statistici asupra temperaturilor i gradelor de
poluare
Cc1 1stmt.i Compileaz surse pre-procesate n cod optimizat pt.
procesorul SPARC
Compress95 Bigtest.in Comprim un fiier text utiliznd algoritmul adaptiv Limpel-
Ziv
Fpppp Natoms.in Determin derivate multi-electron.
Go 9stone21.in Joc de Go avnd nglobate metode strategice rafinate de IA
Hydro2d Hydro2d.in Calculul jeturilor galactice utiliznd ecuaiile hidrodinamice
ale lui Navier - Stokes
Ijpeg Vigo.ppm Comprimare prin algoritmi JPEG a unor fiiere tip imagine
Perl Scrabbl.pl Manipulri de texte i numere (anagrame, factorizri de
numere prime)
Wave5 Wave5.in Rezolv ecuaiile lui Maxwell..
Metodologia de simulare 95
Su2cor Su2cor.in Calculul masei unor particule elementare utiliznd teoria
Quark-Gluon
Swim Swim.in Rezolv ecuaiile lichidelor subiri utiliznd ecuaii cu
diferene finite (singurul bench n simpl precizie)
Tomcatv Tomcatv.in Rezolv probleme de geometrie computaional
Li *.lsp Interpretor de Lisp
Turb3d Turb3d.in Simuleaz turbulena ntr-un zon cubic.
Vortex Vortex.lit Construiete i manipuleaz trei baze de date relaionale.
Mgrid Mgrid.in Determin potenialul unui cmp electromagnetic.
Tabelul 3.1. Caracteristicile benchmak-urilor SPEC'95
3.1.2. BENCHMARK-URILE SPEC2000.
SPEC CPU2000 este a 4-a versiune major a seturilor de benchmark-
uri SPEC CPU, care, n 1989 a devenit primul standard acceptat la scar
larg pentru compararea performanelor la calcul intensiv pe o varietate de
arhitecturi.
Tehnologia sistemelor de calcul se dezvolt aa de repede, nct
trebuie s oferim noi pachete de benchmark-uri, pentru a asigura un mediu
de testare adecvat. SPEC CPU95 a fost un mare succes, dar este timpul s
facem trecerea la benchmark-uri standardizate, care reflect mbuntirile
tehnologice aferente microprocesoarelor, noi compilatoare, aplicaii
multimedia i transmisii de semnal audio/video/GSM, care s-a fcut n
ultimii 5 ani; aceste benchmark-uri formeaz SPEC 2000.(Kaivalya M.
Dixit, preedinte SPEC)
SPEC CPU2000 cuprinde 2 seturi de benchmark-uri: CINT2000
pentru msurarea performanelor n cazul calculului intensiv cu numere
ntregi i CFP2000 pentru performanele n cazul calculului intensiv n
virgul flotant. Cele 2 seturi msoar performanele procesorului,
arhitecturii memoriei i compilatorului unui calculator. mbuntirile aduse
seturilor noi includ timp mai mare de execuie i probleme mai ample pentru
benchmark-uri, o varietate mai mare a aplicaiilor, o uurin mai mare de
utilizare i platforme standard de dezvoltare care vor permite SPEC s
produc versiuni adiionale pentru alte sisteme.
Setul CINT2000 cuprinde 12 benchmark-uri bazate pe aplicaii, scrise
n limbajele C i C++, iar CFP2000 cuprinde 14 benchmark-uri scrise n
FORTRAN (77 i 90) sau C care realizeaz operaii n virgul mobil.
n ultima decad, substaniale mbuntiri au avut loc n tehnologia
compilatoarelor pentru extragerea i valorificarea paralelismului la nivelul
instruciunilor (ILP). Majoritatea cercetrilor n acest domeniu s-au bazat pe
96 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
calculul de uz general, mai exact pe suita de benchmarkuri SPEC dezvoltate
pentru asistarea n evaluarea comercial i marketing-ul variantelor desktop
a sistemelor de calcul. n timp ce aceste aplicaii au constituit un bun mijloc
pentru direcionarea cercetrii existente, ele nu cuprind toate elementele
eseniale ale aplicaiilor multimedia i de comunicaie.
Simulri efectuate folosind simulatorul sim-outorder [Bur97] cu
parametrii implicii (vezi subcapitolul 3.2.6), din cadrul setului de
instrumente SimpleScalar 3.0, au evideniat cteva caracteristici prin care
benchmark-urile SPEC95 difer de cele SPEC2000 [Pos00]. Rata global
de procesare, msurat n instruciuni per ciclu de tact (IPC), este mai mic
n cazul benchmark-urilor SPEC2000. Numrul mediu de instruciuni
dinamice per salt variaz ntre 4 i 6 n cazul benchmark-urilor SPEC95 i
respectiv ntre 4 i 8 n cazul testelor SPEC2000. Rata de miss n cache-ul
de instruciuni (ICache) de capacitate 16Ko, este foarte mic n cazul
benchmark-urilor mai recente, exceptnd testul vortex. Una din explicaii o
poate reprezenta dimensiunea foarte mic (sub 2500 linii) a codurilor surs
aferente unor programe de test (vezi art, equaqe, mcf). Rata de miss n
ICache pe trei dintre benchmark-urile SPEC95 (compress, ijpeg i li) este,
de asemenea, foarte redus, ns pe celelalte programe, aceasta este mult
mai mare dect n cazul benchmark-urilor SPEC2000. La cache-urile de
date rata de miss este mult mai mic pe testele SPEC95 (valori ntre 25%)
comparativ cu cea rezultat pe SPEC2000 (valori ntre 440%). O rat de
miss ridicat se poate datora i optimizrilor realizate la nivelul
compilatorului, care permit folosirea mai eficient a regitrilor procesorului
prin eliminarea anumitor operaii load / store mai simple i pstrarea doar a
celor eseniale pentru algoritm. Spre exemplu, compilarea benchmark-ului
art cu opiunea de optimizare O2 provoac o cretere a ratei de miss n
cache-ul de date de la 15% (art compilat fr opiuni de optimizare O0) la
40% [Pos00]. O alt deosebire ntre cele dou seturi de benchmark-uri se
refer la fereastra dinamic de instruciuni (register update unit). Aceasta
este mult prea ocupat n cazul benchmark-urilor SPEC2000 i necesit un
numr mai mare de intrri (>16) pentru a evita diminuarea performanei
globale de procesare.
Pornind de la aceste diferene se poate observa c cele dou suite de
benchmark-uri SPEC95 i SPEC2000 se completeaz reciproc n ceea ce
privete o serie de caracteristici, motiv pentru care n studiile arhitecturale
efectuate este bine s fie testate ambele suite. Un pas n aceast direcie a
fost fcut i de ctre autorul acestei lucrri n [Vin05].
Din pcate, rezultatele generate pe SPEC2000, nu pot fi dect n
extrem de mic msur comparabile cu cele obinute pe benchmark-urile
Metodologia de simulare 97
SPEC95. Unele teste au rmas din cele vechi, dar dimensiunea acestora
este mult mai mare. Dintre aplicaiile pentru numere ntregi, noi introduse,
fac parte utilitarele de compresie fr pierderi: gzip i bzip2 care vin s
nlocuiasc vechiul benchmark SPEC95 compress. Alte aplicaii vizeaz
proiectarea optim a circuitelor integrate (plasarea componentelor i
autorutarea acestora) vpr, un interpretor modificat de Perl perl2mbk, un
joc de ah crafty, i o prim aplicaie obiectual (C++) ce trateaz o
problem de grafic eon. O parte din noile programe de test nu numai c
solicit resurse hardware substaniale fa de predecesoarele SPEC95, dar
implic inclusiv un numr de trei compilatoare pentru execuia cu succes a
benchmark-urilor SPEC2000 (gcc, g++ i f2c necesar surselor scrise n
Fortran 77 sau 90). Condiiile de simulare presupun utilizarea unui
harddisk de capacitate minim de 1GByte i o memorie RAM de minim
256MByte. Din punct de vedere al frecvenei minime de procesare, trebuie
specificat c unui procesor Sun Ultra10 la 300MHz i sunt necesare dou
zile ntregi pentru execuia complet a benchmark-urilor SPEC2000, iar
procesoarele moderne (PentiumIV 2.4GHz) necesit ntre cteva ore i o
noapte ntreag, n funcie de parametrii de simulare i benchmark-ul
utilizat.
Ca i concluzie se poate spune c noua suit de benchmark-uri
ncearc s reflecte ct mai fidel tendina aplicaiilor i sistemelor viitoare
de calcul, care fac uz de memorii de capacitate ct mai mare i ruleaz un
timp ndelungat fr ntrerupere. n continuare s-a trecut la descrierea
individual a programelor de test SPEC2000.
Cele 12 bechmark-uri din setul CINT2000, prezentate n tabelul 3.2,
sunt scrise n C, cu excepia lui 252.eon care este scris n C++.

Benchmark
Limbajul n care
a fost scris
Numar maxim de instruciuni
dinamice executate
164.gzip C 84.367.396.419
175.vpr C 84.068.782.517
176.gcc C 46.917.715.262
181.mcf C 61.867.464.461
186.crafty C 191.882.992.138
197.parser C 546.749.947.290
252.eon C++ 80.614.082.986
254.gap C 269.035.813.916
255.vortex C 118.972.498.011
256.bzip2 C 143.565.170.182
300.twolf C 346.485.090.453
Tabelul 3.2. Numrul maxim de instruciuni aferent benchmak-urilor SPEC2000
(de ordinul sutelor de miliarde)
98 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
161.gzip
Comprim / decomprim un set de fiiere avnd capacitatea cumulat
de 28 MBytes utiliznd algoritmul de compresie fr pierderi, adaptiv
Lempel-Ziv (LZ77). Toate operaiile se realizeaz la nivelul memoriei
nemaifiind necesar accesul la discul magnetic. Fiierele folosite ca intrare
sunt: un fiier imagine (TIFF) de dimensiune mare, un fiier log al unui
webserver, un program binar, date aleatoare i un fiier surs de tip tar.

175.vpr
Exemplu de program folosit n proiectarea optim de circuite
integrate. Implementeaz automat un circuit n FPGA. Benchmark-ul
rezolv probleme de alegere, poziionare i conectare a unitilor de circuit
pentru un anumit algoritm. Intrrile benchmark-ului cuprind un fiier netlist
al unui circuit, o descriere a arhitecturii FPGA n care circuitul este
implementat, precum i informaii de poziionare ale fiecrui element din
netlist.

176.gcc
Compilator i optimizator de C bazat pe compilatorul gcc versiunea
2.7.2.2., dedicat procesorului Motorola 88100. Simularea acestui benchmark
presupune compilarea unor fiiere de intrare folosind multe din opiunile de
optimizare activate. Pentru simulare linia de comanda este linia tipica
folosita la compilare sub Linux:
176.gcc fisier_intrare.i o detinatie
Sunt disponibile 5 intrri, toate fiind cod preprocesat C (.i), cu o capacitate
total de 3.7MBytes:
integrate.i, expr.i provin din sursele compilatorului gcc.
166.i, 200.i, scilab.i au fost create prin concatenarea surselor
FORTRAN ale unor benchmark-uri, apoi
folosind translatorul f2c s-a produs codul C,
care n final a fost preprocesat.

197.parser
Reprezint un program de verificare sintactic a unui text scris n
limba englez (un set de fraze de capacitate 770KBytes). Dicionarul
acestuia este format din aproximativ 60.000 de cuvinte. Programul este
robust i este capabil s treac peste poriuni de propoziii pe care nu le
inelege. La intrare este furnizat un singur fiier care conine o serie de
propoziii. Pe lng acesta pentru rulare programul mai are nevoie de
dicionar. Acesta este compus din fiierul 2.1.dict i directorul words.
Metodologia de simulare 99
Pentru simulare linia de comanda este:
197.parser dictionar batch fisier_intrare

181.mcf
Aplicaie care urmrete optimizarea problemelor de transport ntlnite
la marile companii de transport n comun, i anume: minimizarea costurilor,
crearea unor calendare orare incluznd durata sosirii vehiculelor, devieri de
trasee.

186.crafty
Joc de ah. nlocuiete practic aplicaia go, de Inteligen Artificial,
din setul SPEC95. Datorit structurii aplicaiei, departe de a fi una liniar,
poate fi utilizat cu succes n testarea structurilor de predicie implementate
n procesoarele moderne. Rezolv 5 partide pornind de la configuraii
diferite ale tablei de ah, cu cutri de adncime variabil n arborele de
posibile mutri necesare gsirii celei optime.

252.eon
Reprezint un program orientat obiect care determin conturul /
imaginea unor obiecte n format 3D. Pentru rezolvarea problemei sunt
folosii 3 algortmi diferii.

253.perlbmk
Reprezint o versiune prescurtat a limbajului Perl versiunea
5.005_03, care rezolv printre altele probleme de genul: conversia din
format email n format HTML, gsirea numerelor perfecte, generarea
secvenelor de numere aleatoare.

245.gap
Constituie un program de calcul analitic n sfera algebrei discrete.
Testul include cteva probleme de combinatoric, permutri, grupuri, etc.

255.vortex
Evideniaz modul de operare al unei baze de date obiectuale. Se
lucreaz cu trei tabele de date relaionale. Aplicaia a fost modificat fa de
predecesoarea din suita SPEC95 pentru a reduce influena operaiilor cu
memoria extern, majoritatea acestora desfurndu-se la nivelul memoriei
principale. Benchmark-ul este rulat de trei ori diferit, de fiecare dat sunt
realizate jonciuni cu tabele diferite i sunt adugate, terse sau modificate
nregistrri ale acestei jonciuni.

100 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
256.bzip2
Utilitar de compresie similar cu gzip doar c folosete la intrare o
imagine, un fiier surs i unul executabil, iar volumul total de date este
aproape 20MBytes.

300.twolf
Program de proiectare a circuitelor integrate. Determin plasamentul i
conexiunile globale dintre grupurile de tranzistoare care constituie
microcipul.
Dup cum poate fi observat suita de teste nu este monoton, acoperind
o diversitate de aplicaii, selectate cu atenie de corporaia SPEC i agreate
de marii productori de componente i sisteme de calcul: AMD, HP,
Compaq (actualmente HP) i Intel.
n continuare sunt descrise benchmark-urile SPEC CFP2000,
implementate n 3 limbaje de programare C, Fortran 77 i Fortran 90;
trebuie specificat c n principal se opereaz cu numere reale n dubl
precizie. Numrul total de instruciuni dinamice executate n fiecare
benchmark este tot de ordinul sutelor de miliarde.

Benchmark
Limbajul
n care a
fost scris
Caracteristici
168.wupwise Fortran 77
Rezolv una din cele mai importante ecuaii din teoria
fizicii cuantice referitoare la puternica interaciune ntre
componentele particulelor elementare (electroni).
171.swim Fortran 77 Problem de meteorologie folosit ca test standard
pentru supercomputere. Rezolv ecuaiile lichidelor
subiri utiliznd ecuaii cu diferene finite.
172.mgrid Fortran 77 Determin potenialul unui cmp electromagnetic. Este
utilizat ca test standard pentru supercomputere.
173.applu Fortran 77 Rezolv probleme de fizica i dinamica fluidelor.
177.mesa C Bibliotec grafic de tipul 3D.
178.galgel Fortran 90 Calcul numeric al parametrilor debitului lichidelor ntr-
un spaiu nchis.
179.art C Un model de reea neural folosit pentru recunoaterea
obiectelor.
183.equake C Simuleaz propagarea undelor seismice elastice n vi
largi i eterogene folosind metoda elementului finit.
187.facerec Fortran 90 Procesare de imagini. Realizeaz implementarea unui
sistem de recunoatere a feei.
188.ammp C Calcule chimice. Modeleaz un sistem bogat de
molecule asociate cu cele biologice.
Metodologia de simulare 101
189.lucas Fortran 90 Rezolv probleme de teoria numerelor.
191.fma3d Fortran 90 Utilizeaz metoda elementului finit n simularea
rspunsului dinamic tranzient i inelastic al unor corpuri
solide tridimensionale la sarcini brute sau impulsiv
aplicate.
200.sixtrack Fortran 90 Soluioneaz probleme de fizic nuclear. Modeleaz un
accelerator de particule i verific stabilitatea pe termen
lung a razelor ntr-o gaur dinamic.
301.apsi Fortran 77 Calculeaz statistici asupra temperaturilor i gradelor de
poluare. Este un benchmark utilizat n predicia vremii.
Tabelul 3.3. Caracteristicile benchmak-urilor SPEC CFP2000
Dup cum se poate observa i suita SPEC CFP2000 este extrem de
variat, cu toate c unele benchmark-uri sunt puternic specializate. Sunt
rezolvate o serie de probleme de fizic, chimie, matematic, meteorologie,
procesare de imagini, inteligen artificial.
3.1.3. ALTE BENCHMARK-URI: SPEC JVM98,
MEDIABENCH.
Odat cu dezvoltarea i creterea n popularitate a Internetului
(posibilitatea rezolvrii a unei diverse game de probleme prin intermediul
su), necesitatea unui limbaj de programare portabil devine tot mai acut.
Caracteristici cum ar fi independena de platform pentru portabilitate, un
model orientat obiect, suport pentru multithreading, suport pentru programe
distribuite i automatic garbage collection fac din Java un limbaj de
programare foarte folosit n rndul dezvoltatorilor de programe. Preul pltit
de flexibilitatea Java se reflect n performana sczut (vitez redus de
procesare) datorat gradului mare de abstractizare hardware pe care l ofer.
Pentru portabilitate, codul surs Java este tradus n arhitectura neutr
bytecode, care poate fi executat pe orice platform care suport o
implementare a mainii virtuale Java (JVM). Majoritatea implementrilor
JVM execut bytecodul Java fie prin interpretare, fie prin compilare Just-in-
Time (JIT). Deoarece att interpretarea, ct i compilarea JIT necesit
traducerea runtime a bytecodului, ambele conduc la o execuie nceat a
aplicaiilor. Este evident c performanele cresc atunci cnd sursele Java
sunt compilate direct n cod main, dar cu preul diminurii portabilitii. O
alt alternativ pentru executarea programelor Java este un procesor Java
care implementeaz maina virtual Java hardware.
102 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Benchmark-urile SPEC JVM98 o suit de aplicaii pentru numere
ntregi, au fost propuse pentru o mai bun nelegere a gtuirilor de
performan existente n mainile virtuale Java i determinarea posibilelor
optimizri. n continuare este realizat o scurt descriere a fiecrui program
de test din suit:

202_check
Este un benchmark utilizat pentru verificarea validitii mainii
virtuale Java. Nu furnizeaz ns la ieire informaii privind metricile de
performan ale sistemului. Realizeaz o serie de teste simple privitoare la
operaiile aritmetico-logice, de deplasare, rotire:
verific condiiile de ncadrare n domeniul de definiie (erori de
tipul out of range, n cazul tablourilor de date).
creeaz superclase i verific violrile de acces la unele cmpuri.
Este un test foarte rapid comparativ cu celelate benchmark-uri.

222_mtrt
Reprezint o modificare a benchmark-ului 205_raytrace, un desenator
de contur care realizeaz portretul unui dinozaur. Se bazeaz pe un driver
multithread, n care fiecare fir de execuie preia o scen dintr-un fiier de
intrare.

202_jess
Este un sistem expert scris n ntregime n JAVA. Intenia testului Jess
(Java Expert Shell System) este de a oferi apleturilor Java capabilitatea de a
raiona de sine stttor prin aplicarea continu a unui set de reguli.
Benchmark-ul rezolv un set de puzzle-uri.

201_compress
Reprezint corespondentul benckmark-ului 129.compress din suita
SPEC'95 i folosete o metod modificat a algoritmului Lempel-ZIV.

209_db
Realizeaz mai multe operaii cu baze de date. Citete un fiier de 1
MBytes cu nregistrri i un alt fiier de 19 KBytes care conine un ir de
operaii (adugare, tergere, cutare, sortare) ce urmeaz a fi aplicate
nregistrrilor respective.



Metodologia de simulare 103
222_mpegaudio
Benchmark-ul decomprim fiiere definite prin standardul ISO MPEG
Layer-3. Prin tehnica de codare MP3 se realizeaz compresia semnalelor
digitale audio pn la un factor de 12, fr a pierde din calitatea sunetului
perceput de urechea uman. Fiierul de intrare pentru decompresie are o
dimensiune de 4MBytes.

228_jack
Reprezint un parser Java bazat pe compilatorul realizat la Purdue
University (PCCTS Purdue Compiler Construction ToolSet), practic o
versiune anterioar a copilatorului actual JavaCC. Testul de intrare al
benchmark-ului l reprezint fiierul jack.jack care conine instruciuni
pentru generarea benchmark-ului jack. Practic parser-ul se autogenereaz de
mai multe ori (puternic recursiv).

213_javac
Este compilatorul Java pentru kit-ul de dezvoltare JDK 1.0.2.
n [Bow98] sunt introduse trei metrici pentru evaluarea benchmark-
urilor SPEC JVM98. Prima o reprezint frecvena fiecrui tip de
instruciune, a doua o constituie adncimea stivei necesar n execuia
fiecrei instruciuni, iar cea de-a treia metric calculeaz procentajul
salturilor taken pe tipuri de instruciuni de salt condiionat. O concluzie cert
dup analiza benchmark-urilor SPEC JVM98 este c accesele de citire a
memoriei (load) i operaiile aritmetico-logice sunt executate cu o frecven
mult mai mare dect scrierile n memorie (store). Practic maina virtual
Java petrece majoritatea timpului citind operanzii din stiv (main bazat
pe stiv). Lucrurile sunt oarecum normale dac se ine cont de faptul c
toate metodele n limbajul Java sunt virtuale, i dup cum se poate vedea n
capitolul 4, legarea dinamic realizat prin polimorfism se traduce prin
accesarea tabelei de metode virtuale folosind o secven de trei instruciuni
load dependente urmate de un apel indirect de funcie. n ce privete
adncimea stivei rezultatele exprim o concluzie interesant: coninutul
stivei poate fi stocat n 98% din timp folosind patru regitri ai procesorului,
evitndu-se astfel accesele la memorie mari consunatoare de timp.
Benchmark-urile care nu se supun acestei concluzii sunt cele puternic
recursive 228_jack i 201_copress. Din punct de vedere al instruciunilor
de salt condiionat, simulrile cercetrilor [Bow98] au artat c, cel puin
jumtate din ele au o puternic tendin de polarizare (taken sau notaken).
104 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
n ultima decad, substaniale mbuntiri au avut loc n tehnologia
compilatoarelor pentru extragerea i valorificarea paralelismului la nivelul
instruciunilor (ILP). Majoritatea cercetrilor n acest domeniu s-au bazat pe
calculul de uz general, mai exact pe suita de benchmarkuri SPEC dezvoltate
pentru asistarea n evaluarea comercial i marketing-ul variantelor desktop
a sistemelor de calcul. n timp ce aceste aplicaii au constituit un bun mijloc
pentru direcionarea cercetrii existente, ele nu cuprind toate elementele
eseniale ale aplicaiilor multimedia i de comunicaie.
n acelai timp, o mulime de arhitecturi de microprocesor au aprut
avnd structuri VLIW i SIMD care se potrivesc perfect necesitilor
compilatoarelor moderne. Majoritatea acestor procesoare sunt destinate
suportului aplicaiilor dedicate (embeded applications) cum sunt cele
multimedia sau comunicaii, mai degrab dect pentru sisteme de uz
general. Din nefericire, exist un decalaj ntre comunitatea
compilatoritilor i dezvoltatorii de aplicaii dedicate. MediaBench
constituie o suit de benchmarkuri, instrumente software pentru evaluarea i
sintetizarea sistemelor multimedia si de comunicaii, dedicate umplerii
acestui gap [Lee97]. Majoritatea acestor aplicaii implic optimizri
manuale a rutinelor scrise n limbaje de asamblare, n special pentru cele
care cuprind bucle imbricate. Ideea de baz n implementarea acestor
optimizri o constituie identificarea codului din afara buclelor, a
dependenelor de date, a buclelor vectorizabile i aplicarea tehnicilor de
trace scheduling sau software pipelining.
Principalele scopuri urmrite de MediaBench sunt:
reprezint cu acuratee o (baz de lucru) workload - o baz de
simulare a noilor sisteme multimedia i de comunicaie (un instrument
soft de evaluare a sistemelor).
se focalizeaz pe aplicaii portabile scrise in limbaje de nivel nalt
ntruct arhitecturile de procesoare i dezvoltatorii de software
migreaz nspre respectiva direcie.
stabilirea cu precizie a avantajelor MediaBench comparativ cu
alternativele existente (SPEC-int, SoftFloat).
Noile clase de arhitecturi de procesoare destinate suportului
aplicaiilor multimedia combin o parte din caracteristicile procesoarelor de
semnal (DSP devices) - posibilitatea de a executa concurent mai multe
operaii, cu caracteristicile procesoarelor de uz general care constituie good
targets pentru compilatoare (numr mare de seturi de regitri generali,
suport pentru execuia condiionata i speculativ).
MediaBench 1.0 reprezint o suit de 19 aplicaii complete,
disponibile pe Internet oricrui utilizator, scrise n limbaje de nivel nalt i
compilate de ctre multiple compilatoare independente pentru arhitecturi de
Metodologia de simulare 105
procesare diferite. Plaja de aplicaii cuprinde procesare de imagini,
compresii de sunet i imagine, comunicaii, procesare de semnal.
Componentele MediaBench sunt:
JPEG: JPEG este o metod de compresie standardizat pentru imagini
color sau n scal de gri. Compresia se realizeaz cu pierderi ntruct
imaginea rezultat (dup comprimare) nu este chiar identic cu cea
iniial. Dou aplicaii diferite sunt derivate din codul surs al JPEG:
cjpeg care realizeaz compresia i djpeg care realizeaz decompresia.
De reinut c benchmark-ul JPEG este comun (identic ca i cod surs)
att suitei MediaBench ct i SPECInt95.
MPEG: MPEG2 reprezint standardul actual predominant pentru
transmisii video digitale de nalt calitate. Nucleul de calcul l constituie
o transformat cosinus pentru codare (mpeg2enc) respectiv transformata
invers pentru decodare (mpeg2dec).
GSM: Se bazeaz pe standardul european GSM 06.10 pentru transcodare
la rat maxim a vorbirii (sunetelor - speech), prI-ETS 300 036, care
folosete semnalul rezidual de excitaie pentru codificarea prediciei pe
termen lung la 13kbit/s.
PGP: PGP este folosit la realizarea semnturilor electronice. Se bazeaz
pe criptarea mesajelor cu ajutorul funciilor de dispersie.
Ghostscript: Reprezint un interpretor de limbaj PostScript.
Mesa: Constituie o librrie grafic 3-D, similar cu OpenGL.
RASTA: Reprezint un program pentru recunoaterea vorbirii care
suport urmtoarele tehnici: PLP, RASTA i Jah-RASTA. Tehnicile
trateaz simultan zgomotul suplimentar i distorsiunea spectral prin
filtrarea traiectoriilor temporale a unor spectre de band critice
transformate neliniar.
ADPCM: Reprezint una din cele mai simple i mai vechi forme de
codificare audio i se bazeaz pe modulaia adaptiv a semnalului audio.
Una din problemele care se pun este dac programele de test
MediaBench sunt cantitativ diferite de SPECInt pentru un numr de
caracteristici de performan pe care arhitecii le consider importante. n
urma unei analize statistice comparative a rezultatelor simulrilor efectuate
pe cele dou suite de benchmark-uri: MediaBench i SPECInt, exist o
diferen semnificativ n ce privete patru parametri de performan, n
favoarea primei suite. SPECInt necesit aproape cu 300% mai mult
lrgime de band dect MediaBench. Doar programul de test pegwitdec
surclaseaz media benchmark-urilor SPECInt. Acest trafic poate fi o
consecin direct a unor rate de hit relativ sczute la cache-ul de
instruciuni i apare n cazul procesoarelor dedicate caracterizate de busuri
limitate i capacitate redus a memoriei. Ceilali parametri care exprim o
106 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
performan superioar n cazul benchmark-urilor Media sunt: rata de
procesare (instruciuni/ciclu), rata de hit n cache-ul de instruciuni i
rata de hit pentru citirile din cache-ul de date (%).
Se tie c unul din cele mai stringente scopuri urmrite de proiectanii
de sisteme dedicate este de a reduce costul, n mare parte realizat prin
reducerea dimensiunii modulelor componente. Dac arhitecii de procesoare
ar dori s realizeze cipuri (uniti centrale) pentru sisteme de comunicaii i
multimedia pe baza rezultatelor simulrilor efectuate pe benchmark-urile
SPECInt, atunci cache-ul de instruciuni ar fi cu 18% mai mare dect dac s-
ar urma indicaiile de proiectare generate de simulrile pe MediaBench. n
ceea ce privete acurateea prediciei i influena numrului de uniti
aritmetico-logice asupra ratei de procesare, rezultatele simulrilor
obinute sunt aproximativ identice, indiferent de benchmark-urile utilizate.
3.2. DEZVOLTAREA DE SIMULATOARE SUB MEDIUL
SIMPLESCALAR UTILIZND BENCHMARK-
URILE SPEC.
Istoria procesoarelor contrapune dou paradigme pentru creterea
performanei, bazate pe software i respectiv pe hardware. n procesul de
proiectare al procesoarelor, aferent generaiilor viitoare, accentul principal
nu se mai pune pe implementarea hardware, ci pe proiectarea arhitecturii n
strns legtur cu aplicaiile poteniale. Se pornete de la o arhitectur de
baz (generic), puternic parametrizat, care este modificat i mbuntit
dinamic, prin simulri laborioase pe benchmark-uri reprezentative.
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
ineficient. Simulatorul dedicat unei arhitecturi de calcul constituie un
instrument software (aplicaie/program) utilizat n exploatarea / cercetarea /
i mbuntirea performanelor unei microarhitecturi. De obicei
funcionarea microarhitecturii se simuleaz la nivel de ciclu main
permind vizualizarea tuturor resurselor hardware la finele fiecrui ciclu.
Metodologia de simulare poate fi de dou tipuri:



Metodologia de simulare 107
Execution driven simulation
= caracterizat de cunoaterea n fiecare moment (ciclu "pipe") a
coninutului resurselor arhitecturale (regitri, locaii de memorie,
uniti funcionale).
= Simularea se face foarte detaliat, la nivel de ciclu de execuie al
procesorului.
= Outputs: - coninutul resurselor, gradul de ncrcare al acestora, rate
de procesare, de hit etc.
fiiere trace care conin toate instruciunile main ale
programelor de test n ordinea n care se execut.
Trace driven simulation
= analizeaz secvenial toate instruciunile din trace-urile generate de
simulatorul bazat pe execution driven, cu scopul de a determina
instana optimal a arhitecturii - procesorul ce urmeaz a fi
implementat n hardware. TDS se preteaz la simularea cache-urilor
de date i instruciuni, mecanismelor de memorie virtual etc., datorit
faptului c ofer pattern-uri reale de adrese, n urma execuiei unor
programe reprezentative.
3.2.1. CE ESTE "SIMPLESCALAR TOOL SET" ?
Reprezint o colecie de instrumente software, pus la dispoziia
cercettorilor n arhitecturi moderne de calcul, i cuprinde: compilatoare,
asambloare, link-editoare, simulatoare i instrumente de vizualizare a unei
arhitecturi (super)scalare simple, generice (Exemple: arhitecturi PISA,
Alpha AXP, ARM). Arhitectura Alpha AXP este un procesor RISC
dezvoltat de firma DEC (fost COMPAQ, actualmente HP), iar arhitectura
SimpleScalar PISA (Portable ISA) se va detalia mai trziu (vezi
subcapitolul 3.4). Setul mai cuprinde un depanator la nivel de cod surs al
benchmark-ului simulat (DLite!) i un generator de trace-uri la nivel de pipe
a instruciunilor (aferent doar celui mai detaliat simulator). Setul de
instrumente "SimpleScalar" este distribuit gratuit (poate fi gsit i descrcat
pe site-ul web "http://www.cs.wisc.edu/~mscalar/simplescalar.html") i
ofer posibilitatea simulrii de tip execution driven, ct mai detaliate i de
nalt performan a celor mai moderne microprocesoare. Programele
simulate reprezint parte integrant a setului de instrumente i sunt
programe de test precompilate (format cod obiect) pentru arhitecturile PISA
i Alpha, i o parte din benchmark-urile SPEC'95. Cei interesai pot dispune
108 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
de compilatorul GNU GCC (precum i de utilitarele aferente), care permite
fiecrui cercettor s compileze/asambleze/linkediteze propriile programe
de test scrise pentru arhitectura SimpleScalar. Setul de instrumente
"SimpleScalar" i modulele de portare a compilatorului GNU pe diverse
platforme a fost scris de Todd Austin - ncepnd cu anul 1994 pe cnd era
cercettor la universitatea din Wisconsin-Madison, actualmente fiind
membru al echipei de cercettori n paralelism la nivelul instruciunilor al
firmei Intel Corporation. "SimpleScalar" este susinut n continuare de Doug
Burger (autorul, n cea mai mare parte, a documentaiei) i de Todd Austin.
Compilatorul GNU i instrumentele software adiionale (biblioteci,
translatoare din Fortran n C) a fost scris de "Free Software Foundation".
3.2.2. AVANTAJELE UTILIZRII "SIMPLESCALAR TOOL
SET".
= Distribuirea gratuit, inclusiv a surselor C a tuturor modulelor
componente. Printre adresele de web utile se numr:
ftp://ftp.cs.wisc.edu/sohi/Code/Simplescalar/simplesim.tar
http://www.cs.wisc.edu/~mscalar/simplescalar.html
La prima adres menionat pot fi gsite pe lng sursele simulatoarelor
i urmtoarele fiiere n format arhiv, fiecare cuprinznd anumite
elemente (necesare sau opionale) ale setului:
Simplesim.tar.gz - cuprinde sursele simulatoarelor procesorului
virtual SimpleScalar, scripturi i macrodefiniii ale setului de
instruciuni, sursele C i cod obiect (obinute dup
compilare/asamblare/linkeditare) a unor mici programe de test (nu
SPEC). Este necesar pentru instalarea setului de instrumente i
include o documentaie exaustiv asupra setului SimpleScalar
(hack_guide.pdf sau hack_guide.ps).
Simpleutils.tar.gz - conine sursele unor utilitare GNU (versiunea
2.5.2) portate pe arhitectura SimpleScalar. Nu sunt necesare pentru
execuia simulatoarelor dar sunt necesare la asamblarea i link-
editarea propriilor benchmark-uri scrise pentru arhitectura
SimpleScalar.
Simpletools.tar.gz - conine sursele i bibliotecile compilatorului
GNU (gcc 2.6.3, glibc 1.0.9 i translatorul din Fortran n C f2c)
necesare compilrii benchmark-urilor proprii pentru arhitectura
Metodologia de simulare 109
SimpleScalar (codul rezultat este format mnemonic de asamblare).
Nu sunt necesare pentru execuia simulatoarelor.
Simplebench.big.tar.gz - cuprinde o serie de benchmark-uri
SPEC'95, n cod obiect, compilate pentru arhitectura SimpleScalar
rulnd pe o staie cu ordinea octeilor big endian.
Simplebench.little.tar.gz - cuprinde aceleai benchmark-uri
SPEC'95, n cod obiect, compilate pentru arhitectura SimpleScalar
rulnd pe o staie cu ordinea octeilor little endian.
Ordinea octeilor reprezint o convenie de numerotare de ctre
procesor a octeilor din interiorul unui cuvnt de 32 de bii astfel nct
octetul cu numrul cel mai mic este fie cel mai din stnga fie cel mai
din dreapta. Procesoarele MIPS pot opera fie cu ordinea octeilor:
big-endian
Byte #
0 1 2 3
sau
little-endian
Byte #
3 2 1 0

= Flexibilitatea sporit (plaja larg de valori a parametrilor simulatoarelor
precum i mulimea de simulatoare de arhitecturi dezvoltate, ncepnd cu
unul funcional foarte rapid dar extrem de simplu, cu execuie in order -
sim-fast - i pn la unul extrem de detaliat, cu execuie out of order i
speculativ, dotat cu un sistem ierarhizat de memorii multinivel i un
predictor avansat "state of the art" aferent instruciunilor de salt- sim-
outorder).
= Portabilitatea: simulatoarele ruleaz pe majoritatea platformelor UNIX
pe 32 i 64 de bii i chiar pe platform WinNT (sursele sunt compilate
sub MS Visual C++), cu condiia ca uneltele software GNU s fie
instalate pe calculatorul gazd. Pentru modificarea/compilarea/link-
editarea simulatoarelor/benchmark-urilor proprii poate fi folosit
emulatorul Cygwin. Majoritatea utilizatorilor i dezvoltatorilor setului
SimpleScalar lucreaz pe sisteme de operare Linux pe maini x86.
= Extensibilitatea: pachetul SimpleScalar Tool Set cuprinde toate sursele
permind dezvoltarea ulterioar a setului - mbuntirea, ataarea de noi
module (Exemple: simulator pentru predicia valoriilor centrat pe diverse
resurse, reutilizarea dinamic a instruciunilor, trace cache); este bine
documentat. Setul de instruciuni proiectat suport eventuale adnotri
(cmp suplimentar) - modificri post-compilare - n fiierele asamblare,
fr a fi necesar o recompilare a codului main, foarte util n
introducerea informaiilor de profil aferente fiecrei instruciuni i
necesar n implementarea diverselor arhitecturi sau tehnici novatoare de
110 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
procesare (vezi predictorul hibrid cu selecie bazat pe aritate din
subcapitolul 5.3.3.1).
3.2.3. DEZVANTAJE N UTILIZAREA SETULUI DE
INSTRUMENTE "SIMPLESCALAR".
O Suport doar seturile de instruciuni ale anumitor arhitecturi:
Simplescalar PISA i Alpha AXP, ARM7ISA (nu i pentru Intel IA-64,
etc).
O Deocamdat SimpleScalar simuleaz doar medii uniprocesor; n
funcie de benchmark-ul simulat (i numrul de instruciuni) simularea
poate dura foarte mult (vezi 3.1.2 privitor la simularea benchmark-urilor
SPEC2000).
O Simularea instruciunilor se realizeaz la nivel de utilizator (nu este
simulat execuia instruciunilor n interiorul sistemului de operare).
Protocolul de tratare a apelurilor sistem (ntreruperi) este urmtorul:
Decodificarea apelului sistem.
Copierea argumentelor (dac exist) n memoria simulatorului (sim-
*).
Executarea apelului sistem de ctre sistemul de operare (rutina de
tratare a ntreruperii).
Copierea rezultatelor dac exist n memoria programului simulat
(benchmark-ul SPEC).

Figura 3.1. Protocolul de tratare a apelurilor sistem
Modulul syscall.c implementeaz un subset de apeluri sistem specifice
Unix. Pentru adugarea oricrui nou apel sistem sau pentru portarea
SimpleScalar pe un sistem de operare nou, este necesar
implementarea software a rutinei de tratare n modulul syscall.[hc].


Metodologia de simulare 111
3.2.4. UTILITARE GNU.
GNU reprezint abrevierea expresiei "GNU's Not Unix". Proiectul
GNU a startat n anul 1984 cu scopul de a dezvolta un sistem de operare
asemntor UNIX-ului dar care s fie distribuit gratuit oricrui individ care
dorete s-l utilizeze sau s-l dezvolte n continuare. Sistemul de operare
GNU nu reprezint o colecie de instrumente software proprii (specifice
doar) GNU, ci cuprinde i alte programe existente ca "free software".
Nucleul sistemului de operare este LINUX. Editorul de text folosit este
TeX, realizat de Donald Knuth. Interfaa bazat pe ferestre este identic cu
cea a sistemului XWindows, realizat de Bob Scheifler. Componentele
eseniale ale unui sistem de operare: compilatorul (gcc), asamblorul (gas) i
link-editorul (gld) sunt proprii GNU. Pentru ca sistemul de operare s fie
complet sunt necesare pe lng instrumente de programare i un interpretor
PostScript, biblioteci de C etc.
Chiar dac nu exist nici un avantaj tehnic al GNU asupra Unix, exist
totui un avantaj social, permind utilizatorilor s coopereze la utilizarea i
dezvoltarea continu a sistemului de operare i unul etic prin respectarea
libertii individului. Creterea n fiabilitate i vitez a unor componente
(programe) GNU fa de cele similare Unix s-a obinut prin tratarea diferit
a fiierelor. Astfel, fiierele de dimensiuni foarte mari sunt ncrcate n
ntregime n memoria principal, fr a mai avea probleme din punct de
vedere al interfeelor de intrare/ieire la citirea (parcurgerea) secvenial a
coninutului.
GNOME (GNU Network Object Model Environment) reprezint
varianta desktop a proiectului GNU. nceput de Miguel de Icaza n 1997 i
continuat cu sprijinul companiei Red Hat Software, GNOME stabilete o
serie de faciliti la nivel desktop, dar folosind programe software exclusiv
disponibile gratuit. Prezint avantaje tehnice precum suportul unei varieti
de limbaje (nu doar C++).
Dintre utilitarele GNU amintim cteva i rolul ndeplinit de fiecare din
ele:
ld - link-editor GNU.
as - asamblorul portabil GNU.
ar - utilitar folosit la crearea, modificarea i extragerea din arhive.
objcopy - copiaz i translateaz fiiere obiect.
objdump - afieaz informaii din fiiere obiect.
size - listeaz dimensiunea unei seciuni a unui fiier obiect sau fiier
arhiv.
windres - compilator pentru fiiere de resurse Windows.

112 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
gprof - afieaz informaii de profil.
Majoritatea acestor programe utilizeaz BFD ("Binary File
Descriptor" - biblioteca binar a descriptorilor de fiiere), pentru a realiza o
manipulare a fiierelor "low-level". Utilitarele GNU pot fi portate pe
majoritatea variantelor de UNIX precum i pe sistemele Windows avnd
procesoare Intel.
3.2.5. INSTALAREA SETULUI DE INSTRUMENTE
"SIMPLESCALAR".
Pentru nceput se prezint paii efectuai n instalarea setului de
instrumente SimpleScalar 3.0 [Bur97] pornind de la arhiva simplesim-
3.0b.tar.gz disponibil la adresa
http://www.cs.wisc.edu/~mscalar/simplescalar.html i de la kit-ul de
instalare Cygwin (aferent emulatorului de Linux pe sistemul de operare
WinNT). Paii descrii n continuare sunt valabili pe sistemele de operare
Windows NT 4.0, Windows 2000 Profesional i Windows XP.
Se descarc de la adresa amintit anterior fiierul arhiv n format
tar.gz "simplesim-3.0b.tar.gz". Se extrage din acesta coninutul su:
directorul SIMPLESIM-3.0/*.* cu fiierele componente, dintre care
i directorul target-pisa. Fiierele acestui director (care descriu
funcionarea unei arhitecturi pisa) sunt copiate n directorul
printe(SIMPLESIM-3.0).
Se instaleaz emulatorul de linux CYGWIN. Dup instalarea corecta
se execut dublu-click pe iconia aplicaiei CYGWIN (sau Start ->
Programs -> Cygnus Solutions -> Cygwin Bash Shell) i se intr n
prompter-ul de linux. n acest moment (la primul acces dup instalare)
se genereaz automat un director home i un subdirector cu numele
user-ului de pe staia respectiv (fie Administrator) n directorul
CYGWIN. n directorul home/Administrator se copiaz
SIMPLESIM-3.0 cu tot coninutul su.
Revenind n CYGWIN se tasteaz comanda $cd SIMPLESIM-3.0 i
se ajunge n directorul tocmai copiat. Se tasteaz n continuare
succesiunea de comenzi:
$make config-pisa
i
$make
Prima comand determin instalarea componentelor (n vederea
compilrii instrumentelor setului pentru arhitectura pisa). Execuia

Metodologia de simulare 113
comenzii make poate genera o eroare la compilare deoarece tipul
returnat de funcia myrand() din fiierul misc.c care apeleaz la rndul
ei funcia random() difer de cel returnat de funcia standard definit
n stdlib.h (din Cygwin\usr\include). Eroarea se corecteaz
modificnd tipul funciei random() n misc.c (din long n int).
Execuia din nou a comenzii make se va ncheia cu mesajul "My
work is done here" ceea ce demonstreaz compilarea / asamblarea
/ link-editarea cu succes a simulatoarelor setului SimpleScalar 3.0.
nainte de simularea propriu-zis (lansarea n execuie a unuia din
fiierele sim-*.exe) trebuie copiat fiierul cygwin1.dll din
Cygwin\bin n directorul Cygwin\home\Administrator\Simplesim-
3.0. n acelai director se vor copia i benchmark-urile SPEC
(executabilele i intrrile corespunztoare). n caz contrar n momentul
simulrii trebuie specificat calea spre programele de test folosite n
simulare.
Pentru rularea unui program de test (se consider directorul curent ca
fiind cel ce conine simulatorul - executabilul) se tasteaz secvena:
din prompter de DOS sau fereastra RUN din Windows:
<Nume_simulator> <Cale_benchmark> [opiuni]
din linux (sau Cygwin):
(sim_path/sim-bin bmark_path/benchmar_bin input_set_path/input_set >
output_file) > err_out_file

Exemplu:
./sim-bpred redir:sim apsi_simout.res redir:prog apsi_progout.res max:inst
5000000 apsi.ss < apsi.in
Observaii:
1. n loc de sim-bpred poate fi pus orice simulator.
2. Benchmark-ul apsi.ss poate fi nlocuit cu oricare altul din suita SPEC dar
cu intrarea aferent (input_set_path/input_set). Benchmark-urile
SPEC2000 presupun o linie de comand mai complex, o exemplificare
n acest sens fiind fcut ulterior pe parcursul acestui capitol.
Opiunile sunt specifice fiecrui simulator i opionale. n subcapitolul
3.2.6. se vor detalia separat la fiecare din simulatoare. Exist totui un
numr de 6 opiuni disponibile tuturor simulatoarelor care permit afiarea
mesajelor ajuttoare n funcionarea simulatorului, determin startarea
afiorului de mesaje specifice depanatorului, starteaz execuia interactiv n
mediul depanare, foreaz ncheierea execuiei programului, citete i

114 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
ncarc / scrie parametrii simulatorului dintr-un / ntr-un fiier de
configurare.
3.2.6. SIMULATOARELE SETULUI DE INSTRUMENTE
"SIMPLESCALAR 3.0".

Figura 3.2. Studiu comparativ asupra simulatoarelor setului SimpleScalar

1. Simulatorul funcional (sim-fast) - este cel mai rapid, elementar i puin
detaliat simulator. Simuleaz execuia secvenial a instruciunilor, nu
presupune un sistem ierarhic de memorie, nu verific dependenele dintre
instruciuni. O versiune similar a acestui simulator este sim-safe care
ndeplinete sarcinile simulatorului sim-fast, iar suplimentar verific
alinierea corect a cuvintelor (instruciuni/date) i drepturile de acces
pentru fiecare referin la memorie. Nici unul din cele dou simulatoare
nu accept parametrii suplimentari n linia de comand. Ambele versiuni
sunt foarte simple (codul surs avnd mai puin de 300 de linii)
constituindu-se ntr-un excelent punct de start pentru nelegerea
funcionrii interne a simulatorului.

2. Simulatorul de cache-uri (sim-cache) - reprezint un simulator
funcional ideal pentru simularea rapid a arhitecturilor care utilizeaz un
sistem ierarhic de memorie, considerndu-se suplimentar c timpul de
acces la cache nu este relevant n ce privete performana obinut. Pe
lng parametrii generali amintii mai sus, sim-cache accept argumente
n linia de comand referitoare la: dimensiunea primului, respectiv celui

Metodologia de simulare 115
de-al doilea nivel de cache de instruciuni/date, dimensiunea buffer-ului
de translatare a adreselor datelor/instruciunilor. Exist opiuni care
permit golirea cache-urilor n cazul apelurilor sistem sau care determin
remaparea instruciunilor pe 64 de bii la instruciuni echivalente pe 32 de
bii. Parametrii de configurare a cache-ului trebuie s cuprind: numele
cache-ului, care trebuie s fie unic, numrul de seturi din cache,
dimensiunea blocului (pentru bufferele TLB - dimensiunea paginii),
asociativitatea cache-ului (putere a lui 2) i politica de nlocuire a
blocurilor din cache (l | f | r), unde l = LRU, f = FIFO, r = random.
Dimensiunea cache-ului se obine ca produs ntre numrul de seturi,
gradul de asociativitate i dimensiunea n octei a fiecrui bloc. Pentru a
avea un nivel de cache unificat n ierarhie (arhitectur Princeton), "se
pointeaz" la cache-ul de instruciuni cu numele cache-ului de date, pe
nivelul corespunztor.

Exemplu:
1) sim-cache redir:sim applu_simout.res max:inst 5000000 cache:il1
il1:128:64:1:l applu.ss<applu.in
2) sim-cache redir:sim applu_simout.res max:inst 5000000 cache:il2 dl2
applu.ss<applu.in (cache unificat pe nivelul 2)

3. Simulatorul de cache-uri cheetah (sim-cheetah) - permite generarea
rezultatelor simulrii pentru configuraii de cache multiple, printr-o
singur simulare. Nucleul Cheetah simuleaz eficient cache-uri complet
asociative, precum i o politic de nlocuire (uneori) optim (algoritmul
MIN al lui Belady - blocul cel mai trziu referit n viitor va fi selectat
spre nlocuire). Politica se dovedete optim pentru fluxuri de instruciuni
(fiiere) read-only. Pentru cache-urile cu modalitate de scriere write-back
algoritmul de nlocuire nu este ntotdeauna optim (de exemplu poate fi
mult mai costisitor s se nlocuiasc blocul cel mai trziu referit n viitor
dac blocul trebuie scris n memoria principal ("murdar"), fa de un
bloc "curat" referit n viitor puin mai devreme dect blocul "murdar"
anterior). Nucleul Cheetah a fost conceput ca o bibliotec de sine
stttoare, rezident n directorul libcheetah/. Sim-cheetah accept
urmtorii parametri n linia de comand, suplimentari celor generali,
disponibili tuturor simulatoarelor din setul SimpleScalar:

Opiune Comanda realizat
-refs [inst | data | unified] Specific tipul fluxului (date/instruciuni) analizat.
-C [fa | sa | dm] Tipul cacheului: complet asociat, set asociativ, mapat
direct.
-R [lru | opt] Politica de nlocuire a blocurilor conflictuale din cache.

116 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
-a <sets> log
2
din limita inferioar a numrului de seturi simulate
simultan.
-b <sets> log
2
din limita superioar a numrului de seturi.
-n <assoc> Asociativitatea maxim de analizat.
-in <interval> Intervalul, exprimat n dimensiunea cache-ului, la care
se afieaz rezultate, n cazul n care cache-ul este
complet asociativ.
-M <size> Dimensiunea maxim a cache-ului care este supus
ateniei.
-C <size> Dimensiunea maxim a cache-ului mapat direct care
este analizat.
Tabelul 3.4. Opiuni specifice sim-cheetah
Ambele simulatoare sunt ideale pentru studiul "high level" al cache-
urilor, fr a ine cont de timpul de acces la cache (doar rata de miss fiind
analizat). Pentru a msura ns efectul organizrii cache-ului asupra
timpului de execuie al programelor de calcul trebuie utilizat simulatorul
sim-outorder, mult mai complex, la nivel de execuie.

4. Predictorul de salturi (sim-bpred) genereaz informaii statistice
privitoare la acurateea de predicie, numrul i caracteristici ale
instruciunilor de salt din programele de aplicaie. Predicia salturilor este
specificat prin alegerea flag-ului bpred urmat de unul din urmtoarele
6 argumente:
nottaken saltul va fi prezis ntotdeauna not taken;
taken saltul va fi prezis ntotdeauna taken;
perfect predictorul va fi perfect din punct de vedere a acurateii de
predicie;
bimod predictor bimodal, folosind un BTB (branch target buffer)
avnd automate de predicie pe 2 bii;
2lev predictor adaptiv pe 2 niveluri;
comb predictor combinat (bimodal i adaptiv pe 2 niveluri);

n funcie de tipul predictorului argumentele specifice sunt prezentate mai
jos:
-bpred:bimod <size> stabilete dimensiunea tabelei predictorului
bimodal la <size> intrri.
-bpred:2lev <11size><12size><hist_size><xor> precizeaz un
predictor adaptiv pe dou niveluri. Modelul de organizare este descris n
figura 3.3.

Metodologia de simulare 117
O <l1size> - specific numrul de intrri n tabela aflat pe primul nivel
al predictorului (Exemplu: N=1 implic un registru de istorie global,
specific predictoarelor GAg sau GAp).
O <l2size> - reprezint numrul de intrri n tabela aflat pe cel de-al
doilea nivel al predictorului.
O <hist_size> - identific numrul de bii de istorie (global) utilizai n
procesul de predicie.
O <xor> - permite folosirea funciei de dispersie xor (dintre adresa de
salt i istoria salturilor) pentru determinarea indexului de adresare n
tabela de predicie aflat pe nivelul al doilea (selectarea automatului
de predicie corespunztor).


Figura 3.3. Structur de predictor adaptiv pe 2 niveluri
Tabelul 3.5 prezint parametrii corespunztori unor scheme de predicie
moderne. Valorile implicite pentru cei patru parametrii anterior amintii sunt
1 (<l1size>), 1024 (<l2size>), 8(<hist_size>) i 0 (<xor>), respectiv.

PREDICTOR
L1_size
Hist_size L2_size Xor
GAg 1 W 2
W
0
GAp 1 W >2
W
0
PAg N W 2
W
0
PAp N W 2
N+W
0
Gshare 1 W 2
W
1
Tabelul 3.5 Scheme moderne de predicie corelate pe dou niveluri

118 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

-bpred:btb <sets> <assoc> configureaz un predictor de tip BTB
avnd <sets> seturi i gradul de asociativitate <assoc>. Valorile implicite
sunt 512 seturi i asociativitate 4-way.
-bpred:spec_update <stage> permite actualizarea speculativ a
schemelor de predicie n fazele de decodificare sau de scriere rezultat n
setul de regitrii generali (<stage>=[ID/WB]). Prin nesetarea acestui
parametru actualizarea predictorului se face nespeculativ n faza Commit
(retragerea regitrilor din bufferul de reordonare).

Exemplu:
1) sim-bpred redir:sim applu_simout.res max:inst 5000000 bpred 2lev
bpred:2lev 1 1024 10 0 applu.ss < applu.in
2) sim-bpred redir:sim applu_simout.res max:inst 5000000 bpred bimod
bpred:btb 512 4 applu.ss < applu.in

5. Simulatorul de informaii de profil (sim-profile) - genereaz detaliat
informaii despre adrese i clase de instruciuni, simboluri (adrese de
date/instruciuni), accese la memorie, instruciuni de salt.

Opiune Comanda realizat
-iclass Tipul claselor de instruciuni (ALU, Branch, etc).
-iprof Tipul instruciunilor (bnez, addi etc).
-brprof Tipul clasei instruciunilor de salt (salturi directe/indirecte, apeluri de
subrutin, salturi condiionate).
-amprof Tipul modului de adresare (direct/indirect/indexat).
-segprof Zona de date accesat (static, dinamic).
-tsymprof Informaii privind execuia (funcii utilizate, depanarea n interiorul
acestora).
-dsymprof Informaii privind zona de date.
-taddrprof Informaii privind execuia la o anumit adres.
-all Seteaz pe True toate opiunile.
Tabelul 3.6. Opiuni specifice sim-profile
Generarea unor statistici a informaiilor de profil se poate realiza prin
comanda:
sim-profile -pcstat sim_num_insn test-math >&! test-math.out
Trei dintre simulatoarele setului simplescalar (sim-profile, sim-cache
i sim-outorder) suport exprimarea statistic a informaiilor de profil
(descrierea detaliat n cadrul unui segment de text) aferent diferitelor
variabile contor de numere ntregi (numrul de instruciuni din program,
numrul de referine la memorie, numrul miss-urilor pe primul nivel al
cache-ului de instruciuni, acurateea prediciei instruciunilor de salt).

Metodologia de simulare 119

Exemplu:
-pcstat sim_num_insn - caracteristici ale execuiei: numrul
instruciunilor executate.
-pcstat sim_num_refs - profilul referinelor la memorie(numrul
instruciunilor load/store).
-pcstat il1.misses - profilul acceselor cu miss n primul nivel al
cache-ului de instruciuni.
-pcstat bpred_bimod.misses - profilul prediciei instruciunilor de salt.

6. Simulatorul superspeculativ de complexitate ridicat out of order
(sim-outorder)


Figura 3.4. Structura pipeline a simulatorului Out of Order
Sim-outorder suport expediere i execuie "out of order" bazat pe
unitatea RUU (register update unit). Schema RUU utilizeaz un buffer de
reordonare necesar n redenumirea automat a regitrilor i reinerea
rezultatelor pentru instruciunile aflate n ateptare. n fiecare ciclu, bufferul
de reordonare retrage instruciunile ncheiate n ordinea iniial a
programului i le depune i n setul de regitri generali.
Sistemul de memorie cuprinde i un buffer aferent instruciunilor
Load/Store (coad FIFO). Valorile de memorat sunt plasate n coad dac
instruciunea Store este speculativ. Instruciunile Load sunt expediate spre
unitile de execuie cu referire la memorie doar cnd adresele tuturor
instruciunilor Store anterioare sunt cunoscute (evitarea aliasurilor).
Instruciunile Load pot fi satisfcute fie prin execuie propriu-zis fie printr-
un mecanism de bypassing realizat hardware, prelund valoarea de nscris a
unei instruciuni Store direct din coada de ateptare, n cazul unei potriviri
de adres. Instruciunile Load executate speculativ pot genera accese cu
miss n cache, dar "miss-urile" speculative n TLB blocheaz structura
pipeline pn la cunoaterea condiiei de salt.

120 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Nucleul de execuie al simulatorului este structurat astfel:
ruu_init();
for ( ; ; ) {
ruu_commit();
ruu_writeback();
lsq_refresh();
ruu_issue();
ruu_dispatch();
ruu_fetch();
}
unde fiecare rutin descrie o faz de procesare a instruciunii.
Bucla de program este executat odat pentru fiecare ciclu main (A
nu se nelege perioad de tact). La ncheierea fiecrui program - cu apelul
sistem exit() - simulatorul execut un apel longjmp() la funcia principal
main() pentru generarea informaiilor statistice. Latenele tuturor unitilor
funcionale se regsesc n structura fu_config[] din modulul sim-outorder.c.
Faza fetch instruciune a structurii pipeline este implementat de
ctre funcia ruu_fetch(). Unitatea de fetch modeleaz lrgimea de band a
fluxului de instruciuni i primete ca parametri de intrare urmtoarele: PC-
ul instruciunii curente (adresa de la care se va face procesul de fetch),
starea predictorului i eventuale predicii greite rezultate din unitatea de
execuie a instruciunilor de salt. n fiecare ciclu procesor, sunt citite i
aduse instruciuni dintr-o singur linie a cache-ului de instruciuni (un acces
cu miss blocheaz eventualele urmtoare citiri, pn la rezolvarea
respectivului miss). Instruciunile citite sunt depuse ntr-un buffer de
prefetch, n ateptare, de unde vor fi expediate spre decodificare i execuie.
De asemenea, se calculeaz cu ajutorul predictorului noua linie din cache-ul
de instruciuni de unde va avea loc urmtorul proces de fetch.
Implementarea software a nivelului pipeline de decodificare i
clasificare/expediere a instruciunilor spre unitile funcionale de execuie
se face n rutina ruu_dispatch(). Pe lng decodificare are loc i
redenumirea regitrilor n vederea eliminrii dependenelor WAR i WAW.
Funcia folosete instruciunile din bufferul de prefetch ca pointeri spre
unitatea RUU activ i spre unitatea (tabloul) de redenumire. Odat per ciclu
procesor, sunt preluate din bufferul de prefetch un numr de instruciuni (cel
mult numrul maxim de instruciuni ce pot fi executate simultan) i depuse
ntr-o coad cu instruciuni ce vor fi reorganizate de ctre scheduler. n
aceast faz de procesare sunt efectuate prediciile instruciunilor de salt. La
apariia unei predicii greite, simulatorul folosete speculativ buffere de
stare, care sunt tratate printr-o politic copy on write. Rutina ruu_dispatch()
introduce i conecteaz instruciuni la unitatea RUU i la coada de

Metodologia de simulare 121
instruciuni Load/Store; deoarece separ operaiile aferente instruciunilor
cu referire la memorie n dou (adunare/scdere pentru calcul efectiv de
adres i accesul efectiv la memorie).
Nivelul issue al structurii pipeline, de rutare efectiv (ataarea fiecrei
instruciuni la cte o unitate funcional de execuie) este implementat
software prin procedurile ruu_issue() i lsq_refresh(). Rutinele pstreaz de
asemenea dependenele de date la resurse (regitrii sau locaii de memorie).
n fiecare ciclu procesor, rutinele de scheduling localizeaz instruciunile
pentru care regitrii surs sunt disponibili. Asignarea instruciunilor Load
disponibile din punct de vedere al regitrilor de intrare este stagnat dac
exist o instruciune Store anterioar n coada Load/Store cu adresa efectiv
necunoscut (nerezolvat). Dac adresa instruciunii Store este chiar adresa
de la care instruciunea Load, aflat n ateptare, urmeaz s citeasc atunci
valoarea de memorat este naintat spre utilizare acesteia. Altfel,
instruciunea Load trebuie executat normal.
Faza de execuie a structurii pipeline este tratat, deasemenea, n
rutina ruu_issue(). n fiecare ciclu main, rutina extrage ct mai multe
(maxim -issue:width) instruciuni disponibile (i independente) pentru
execuie din coada cu instruciuni reorganizate. Dac unitile funcionale de
execuie sunt disponibile se starteaz execuia instruciunilor (fiecrei uniti
funcionale libere i se asociaz (dac exist) o instruciune de acelai tip cu
unitatea). n final, rutina organizeaz evenimentele de scriere a rezultatelor
(resursele folosite - regitrii, memorie) n funcie de latena unitilor
funcionale (se va ine cont de operaiile de acces la cache-ul de
date/memorie) ntr-o coad de prioriti. Accesele cu miss la buferul de date
TLB ntrzie execuia operaiilor cu memoria pn n faza Commit a
structurii pipeline i li se aloc n mod curent o laten fix. Latenele tuturor
unitilor funcionale se regsesc n structura fu_config[] din modulul sim-
outorder.c.
Scrierea efectiv a rezultatelor se realizeaz n faza writeback,
implementat software n rutina ruu_writeback(). n fiecare ciclu main,
rutina scaneaz coada de evenimente aferente instruciunilor care au ncheiat
faza de execuie. La gsirea unei instruciuni n aceast coad, se parcurge
lanul dependenelor de date aferent instruciunii respective pentru a marca
instruciunile dependente aflate n ateptare. Dac o instruciune dependent
se afl n ateptare pentru execuie, rutina o marcheaz ca fiind gata de
execuie. n aceast faz se cunoate cu exactitate dac saltul a fost corect
predicionat sau nu. Dac a avut loc o predicie greit, starea procesorului
este reluat de la ultimul punct de verificare, eliminnd (efectul) ultimele
instruciuni executate eronat.

122 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Procedura ruu_commit() trateaz instruciunile din faza writeback care
sunt gata s actualizeze corect (in-order) structurile hardware folosite
(buffer reordonare, set de regitri, coada de instruciuni load/store, unitatea
RUU). De asemenea, se actualizeaz i cache-ul de date (sau memoria) i
sunt tratate accesele cu miss n bufferul de date TLB.
Datorit complexitii sale sim-outorder ruleaz cu un ordin de
mrime mai lent dect sim-fast. Parametrii din linia de comand se pot
clasifica n funcie de modulul component (nucleul de execuie, interfaa
procesor-cache, ierarhia de memorie, predictorul de salturi). Parametrii
specifici nucleului de execuie al procesorului stabilesc numrul de
instruciuni care sunt extrase simultan din cache/decodificate/transmise spre
unitile funcionale de execuie, modul de procesare (in/out order),
capacitile diferitelor buffere (coada Load/Store, unitatea RUU, unitile
funcionale ALU pentru ntregi/flotante).
Parametrii specifici nucleului de execuie al procesorului:
O -fetch:ifqsize <size> - seteaz numrul de instruciuni ce vor fi extrase
simultan din cache / memorie principal. Trebuie s fie o putere a lui
2. Implicit are valoarea 4.
O -fetch:mplat <cycles> - seteaz latena unei predicii eronate a unei
instruciuni de salt (procesul de "recovery"). Implicit are valoarea 3.
O -decode:width <insts> - seteaz numrul de instruciuni ce vor fi
simultan decodificate. Trebuie s fie o putere a lui 2. Implicit are
valoarea 4.
O -issue:width <insts> - seteaz numrul maxim de instruciuni ce vor fi
simultan decodificate ntr-un ciclu. Trebuie s fie o putere a lui 2.
Implicit are valoarea 4.
O -issue:inorder foreaz simulatorul s lucreze in-order. Implicit ia
valoarea "false".
O -issue:wrongpath permite expedierea spre execuie a instruciunilor
dup o speculaie greit. Implicit are valoarea true.
O -ruu:size <insts> - capacitatea unitii RUU (n instruciuni). Implicit
ia valoarea 16.
O -lsq:size <insts> - capacitatea bufferului Load/Store (n instruciuni).
Implicit ia valoarea 8.
O -res:ialu <num> - specific numrul unitilor ALU de numere
ntregi. Implicit ia valoarea 4.
O -res:imult <num> - specific numrul unitilor de nmulire/mprire
ntregi. Implicit ia valoarea 1.
O -res:memports <num> - specific numrul porturilor cache-ului de pe
nivelul L1. Implicit ia valoarea 2.

Metodologia de simulare 123
O -res:fpalu <num> - specific numrul unitilor ALU n virgul
mobil. Implicit ia valoarea 4.
O -res:fpmult <num> - specific numrul unitilor de
nmulire/mprire n virgul mobil. Implicit ia valoarea 1.

Parametrii ce caracterizeaz interfaa procesor - sistemul ierarhizat de
memorie sunt constituii din toi parametrii cache-ului inclusiv formatul
acestora, utilizai n sim-cache i folosii de ctre sim-outorder cu
urmtoarele completri: specific latena de hit n primul nivel al cache-ului
de date, specific dimensiunea n octei a magistralei de memorie, reprezint
latena pentru deservirea unui miss n tabela TLB.
Parametrii suplimentari (gsii doar la sim-outorder nu i la sim-cache)
ce caracterizeaz interfaa procesor - sistemul ierarhizat de memorie:
O -cache:dl1lat <cycles> - specific latena de hit n primul nivel al
cache-ului de date. Implicit ia valoarea 1. Exist opiunea
corespondent i pentru cache-ul de instruciuni (pentru ambele nivele
il1, il2).
O -mem:width <bytes> - specific dimensiunea n octei a magistralei
de memorie.
O -tlb:lat <cycles> - reprezint latena pentru deservirea unui miss n
tabela TLB.
Parametrii specifici predictorului de salt:
La fel ca simulatorul de cache-uri care constituie att parte integrant
a simulatorului out of order ct i simulatorul de sine stttor, predictorul de
salturi poate rula i individual, stabilind aceleai informaii statistice:
acurateea de predicie, nunrul de instruciuni de salt, numrul de interfee
n tabelele de predicie, numrul de accese cu hit n tabele, etc. Pot fi
simulate o serie de predictoare, pornind de la tabela BTB la scheme de
predicie adaptiv corelate pe 2 niveluri: GAg, GAp, PAg, PAp.
Dac simulatoarele sim-fast, sim-safe, sim-cache/cheetah i sim-bpred
sunt simulatoare funcionale care urmresc influena diverilor parametri
arhitecturali asupra acurateii prediciei, ratei de hit n cache, etc, sim-
outorder este singurul simulator component al setului SimpleScalar 3.0 care
implementeaz timing (asociaz cte o laten de execuie pentru fiecare tip
de instruciune), modeleaz un procesor superscalar bazat pe o execuie
speculativ i permite determinarea ratei globale de procesare. Sim-
outorder este cel mai performant dintre simulatoarele setului SimpleScalar
3.0, dar i cel mai lent din punct de vedere al simulrii. Pentru exploatarea
ctigului de performan introdus de orice tehnic (predicia valorilor pe

124 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
diverse resurse, reutilizare dinamic a instruciunilor), simulatorul
superspeculativ i cu execuie out-of-order este singurul care poate fi
considerat ca baz de plecare pentru acest experiment.
3.2.7. COMPILAREA I EXECUIA PROGRAMELOR C I
C++ SUB LINUX. INSTALAREA I COMPILAREA
BENCHMARK-URILOR SPEC2000 PENTRU ARHITECTURA
SIMPLESCALAR PISA.
Creterea n performan i complexitate a microprocesoarelor
moderne datorate tehnicilor avansate gen pipelining, execuie out-of-order ,
predicie i execuie speculativ, presupune un efort suplimentar de
proiectare i verificare pentru dezvoltarea i implementarea de produse
viabile. Pentru depirea acestor probleme, proiectanii de microarhitecturi
au explorat diverse modaliti de transfer de funcionalitate la nivelul
compilatorului. ncepnd cu procesoarele RISC VLIW i continund cu cele
EPIC versiunile 1 i 2 de procesoare Intel Itanium, compilatorul a jucat un
rol important n simplificarea arhitecturii la nivel hardware meninnd
totodat tendinele curente de cretere a performanei [Sias04]. n acest
paragraf sunt prezentate etapele principale care trebuie parcurse pentru
compilarea i execuia propriilor programe de test scrise n C (sau C++) sub
sistemul de operare Linux folosind utilitarele GNU.


Figura 3.5. Interaciunea instrumentelor n cadrul setului SimpleScalar
f2c
SimpleScalar
GCC, XGCC
SimpleScalar
GAS
SimpleScalar
GLD
Surse FORTRAN
benchmark
Surse C
benchmark
SS libF77.a
SS libc.a
SS libm.a
Compilator C
Surse simulator
(ex. sim-fast.c)
Simulator
Cod asamblare
Cod obiect
Rezultate
Cod obiect
(SPEC95,

SPEC2000)
Executabile
SimpleSim

Metodologia de simulare 125
Etapele parcurse pornind de la sursa HLL (High Level Languages) a
programelor de test i pn la simularea de tip execution driven sunt
evideniate n figura anterioar (figura 3.5).
Sursele FORTRAN ale programelor de test proprii sunt convertite n
C folosind translatorul f2c. Att benchmark-urile C, C++ ct i cele
convertite din FORTRAN sunt compilate cu ajutorul compilatorului GNU
gcc (dedicat arhitecturii SimpleScalar) rezultnd cod n format de asamblare
pentru respectiva arhitectur. Codul rezultat este trecut prin asamblorul
SimpleScalar as care genereaz un format foarte asemntor cu codul obiect
dar nu identic (cuprinde simboluri + cod obiect; nu este generat codul obiect
pentru funciile de bibliotec i directivele de asamblare). Formatul final de
cod obiect se obine cu ajutorul utilitarului SimpleScalar ld care link-
editeaz codul rezultat la pasul anterior (pseudo-obiect) cu bibliotecile
proprii arhitecturii SimpleScalar (SS libc.a, SS libm.a, SS libF77.a). Codul
obiect se constituie ca parametru de intrare pentru simulatoarele arhitecturii
SimpleScalar. Setul de instrumente SimpleScalar pune la dispoziie i cteva
din benchmark-urile SPEC'95 n acelai format cod obiect (precompilate
pentru arhitectura SimpleScalar). Dac nu se dispune de simulatorul dorit n
format executabil, ci doar de sursa C a acestuia, atunci acesta trebuie
compilat cu compilatorul disponibil pe staia gazd (orice compilator de
ANSI C). Simularea se face foarte detaliat, la nivel de ciclu de execuie al
procesorului, rezultatele generate fiind coninutul resurselor, gradul de
ncrcare al acestora, rate de procesare, de hit, acuratei de predicie,
informaii de profil, etc.
n continuare sunt prezentai pe scurt paii care trebuie urmai pentru
recompilarea instrumentelor SimpleScalar 3.0. n vederea obinerii codului
obiect pentru arhitectura SimpleScalar, pornind de la benchmark-uri proprii
scrise n limbajul C i avnd ca platform sistemul de operare Linux Red
Hat 7.3 cu procesor Intel Celeron (i686). Trebuie specificat c s-a ncercat
recompilarea instrumentelor i pe alte versiuni de Linux (Red Hat 7.0,
Mandrake) ns nu ntotdeauna s-a reuit. Mai mult, cu ajutorul noilor
instrumente se poate genera cod obiect doar pentru fiiere surs .C nu i
.C++. Din programele obiectuale se pot obine totui fiiere n limbaj de
asamblare MIPS, utile n analiza numrului de salturi statice directe /
indirecte cauzate de motenire, polimorfism. Dei poate prea simplu i
intuitiv de urmat, geneza pailor ce vor fi prezentai este rodul a numeroase
ore de munc i implementri (corectri) repetate.
1. Pentru instalarea instrumentelor SimpleSim3.0 sunt necesare fiierele:
U simplesim-3.0b.tar.gz;
U simpletools-2.0.tar.gz;

126 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
U simpleutils-2.0d.tar.gz;
2. Fiierele de mai sus se dezarhiveaz ntr-un singur director, care nu
trebuie s conin spaii n nume (presupunem c acest director se
numete KIT i se afl n rdcin). Dezarhivarea se poate face folosind
utilitarele GNU: gunzip urmat de tar. Succesiunea comenzilor este
urmtoarea:
U gunzip simplesim-3.0b.tar
U gunzip simpletools-2.0.tar
U gunzip simpleutils-2.0d.tar
n urma acestor trei pai se obin trei arhive .tar din care se extrage
coninutul cu ajutorul comenzii:
U tar -xvf filename.tar, unde prin filename se nelege oricare din
numele de fiier anterioare: simplesim-3.0b, simpletools-2.0 sau
simpleutils-2.0d.
n cadrul directorului /KIT se vor obine astfel urmtoarele
subdirectoare:
U binutils-2.5.2 (conine utilitare GNU la nivel de cod C care
urmeaz a fi compilat pentru diverse arhitecturi n cazul nostru
SimpleScalar 3.0)
U simplesim-3.0 (conine codul surs C al simulatoarelor
procesorului virtual SimpleScalar, scripturi i macrodefiniii ale
setului de instruciuni, sursele C i cod obiect (obinute dup
compilare/asamblare/link-editare) a unor mici programe de test (nu
SPEC). Este necesar pentru instalarea setului de instrumente i
include o documentaie exhaustiv asupra setului SimpleScalar.
U glibc-1.09. conine sursele bibliotecilor GNU, portate pentru
arhitectura SimpleScalar.
U gcc-2.6.3. reine sursele C ale compilatorului GNU, care pot fi
compilate spre orice tip de arhitectur i386, SunSpark,
SimpleScalar (n cazul nostru se dorete
compilarea/asamblarea/link-editarea propriilor benchmark-uri spre
arhitectura SimpleScalar).
U f2c-1994.09.27 conine sursele translatorului din Fortran n C,
realizat n 1994 de ctre cercettorii din laboratoarele AT&T Bell.
U sslittle-na-sstrix, ssbig-na-sstrix directoarele int spre care vor
porta cross-compilatorul, utilitarele GNU compilate (codul obiect
rezultat), i bibliotecile de funcii C dedicate architecturii
SimpleScalar. (Directorul ales va fi n funcie de ordinea octeilor

Metodologia de simulare 127
de pe staia gazd n cazul nostru ordinea este little-endian
[Flor03]).
3. Instalare binutils-2.5.2
U Se trece n subdirectorul binutils-2.5.2 cu ajutorul comenzi cd
binutils-2.5.2
U ./configure --host=i386-*-linux --target=sslittle-na-sstrix --with-
gnu-as --with-gnu-ld (eventual i --prefix=/KIT)
U make
U make install
4. Instalare simplesim-3.0
U Se trece n subdirectorul simplesim-3.0 i se tasteaz comenzile:
U make config-pisa
U make
5. Instalare gcc-2.6.3.
U Se trece n subdirectorul gcc-2.6.3. cu ajutorul comenzi cd gcc-2.6.3.
U ./configure --host=i386-*-linux --target=sslittle-na-sstrix --with-
gnu-as --with-gnu-ld (eventual i --prefix=/KIT)
U Fie (R) urmtoarea comand: make LANGUAGES=c c++
CFLAGS=-O3 CC=gcc. Se tasteaz R i se repet aceast
comand dup fiecare corectare a erorilor eventual aprute.
O O prim eroare care apare este la linia 194 din fiierul cccp.c
(conflict de tip). Linia respectiv poate fi nlocuit cu extern const
char *const sys_errlist[]; sau poate fi pur i simplu comentat. Se
tasteaz comanda R.
O A doua eroare care apare este la linia 57 din sdbout.c. Aceasta va
fi nlocuit cu #include gsyms.h sau #include <gsyms.h>. Se
tasteaz comanda R.
O Urmtoarea eroare care apare este la linia 17 din fiierul bc-
typedef.def. Eroarea poate fi eliminat fie nlocuind linia
respectiv cu DEFTYPECODE(SFcode, SF, SFmode,
double); fie se corecteaz n linia 13 din bytetypes.h (float devine
double). Se repet comanda make LANGUAGES=c c++
CFLAGS=-O3 CC=gcc.
O O nou eroare apare la linia 172 din fiierul gcc.c (un nou conflict
de tip). Pentru buna desfurare a procesului de instalare aceast

128 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
linie va fi nlocuit cu extern const char *const sys_errlist[]; sau
va fi comentat. Se reia comanda R.
O Urmtoarea eroare care apare se refer la linia 90 din fiierul
/cp/g++.c. Pentru nlturarea erorii se comenteaz linia respectiv.
Se tasteaz comanda R.
O n cazul n care apar erori n fiierul collect2.c (conflict de tip) se
comenteaz cele dou linii care au provocat erorile (liniile 47 i
217). Se tasteaz comanda make LANGUAGES=c c++
CFLAGS=-O3 CC=gcc.
n acest moment, singurele erori care au rmas sunt de bibliotec
(de ex: stdio.h no such file or directory). Eliminarea acestora se
realizeaz prin suprascrierea directorului include din directorul
gcc-2.6.3 cu subdirectorul include aflat n directorul sslittle-na-
sstrix. Coninutul directorului sslittle-na-sstrix/include, mai puin
fiierul assert.h este copiat i n directorul /usr/local/sslittle-na-
sstrix/include. De asemenea, fiierele libc.a i crt0.o din /sslittle-
na-sstrix/lib se vor copia att n directorul gcc-2.6.3 ct i n
/usr/local/sslittle-na-sstrix/lib. Se tasteaz pentru ultima dat
comanda make LANGUAGES=c c++ CFLAGS=-O3
CC=gcc. n acest moment nu mai apar erori de compilare.
U make install
Dup ncheierea cu succes a celor 5 etape (complexe) n directorul
gcc-2.6.3 va fi creat fiierul xgcc noul compilator cu ajutorul crora se va
determina codul asamblare / obiect pentru arhitectura virtual SimpleScalar.
Comenzile cu ajutorul crora obinem codul asamblare aferent
programelor de test sunt:
U pentru sursa de program C:
./xgcc nume_fisier.c S
U pentru programele obiectuale CPP:
./cc1plus nume_fisier.cpp s
Codul obiect pentru arhitectura SimpleScalar se obine cu
ajutorul comenzilor:
U pentru ambele tipuri de programe (att C ct i C++):
./xgcc nume_fisier_sursa.c o nume_fisier_destinatie.ss
Se reamintete c opiunea de compilare S realizeaz preprocesarea
i compilarea codului surs, iar opiunea s genereaz doar codul asamblare
fr faza de preprocesare. De asemenea, n cazul n care fiierele surs c i

Metodologia de simulare 129
cpp nu exist n directorul gcc-2.6.3 atunci se va tasta odat cu numele i
calea spre acest fiier.
n acest moment se vor copia fiierele executabile SimpleScalar (.ss)
n directorul simplesim-3.0 i pot fi folosite ca programe de test pentru
oricare dintre simulatoarele setului SimpleScalar 3.0. De exemplu, pentru
msurarea localitii i a numrului de salturi indirecte din benchmark-ul
back_.ss folosind simulatorul sim-jindir.exe se va tasta comanda:
./sim-jindir redir:sim simout.res back_.ss
n continuare sunt prezentate nc cteva opiuni de compilare utile.
Pentru compilarea programelor se recomand specificarea opiunilor -Wall
pentru afiarea tuturor avertismentelor generate de compilator. Prin opiunea
-c este evitat link-editarea iar -g invoc opiunea de depanare,
impunnd compilatorului generarea unei tabele de simboluri.
Sunt generate doar codurile pseudo-obiect ale tuturor fiierelor surs. Link-
editarea se poate realiza ulterior cu comanda:
./xgcc file1.o file2.o ...... -o nume_fis_executabil
Folosind opiunea -llibrary se realizeaz link-editarea bibliotecilor
standard sau utilizator specificate prin library. Pentru utilizarea funciilor
matematice trebuie ca fiierul surs .c s cuprind directiva de preprocesare
#include <math.h> i legarea s fie fcut explicit cu comanda:
./xgcc calc.c -o calc -lm
Opiunea -Ldirectory adaug directorul specificat la lista de
directoare care conin librrii de funcii n format obiect. Link-editorul caut
ntotdeauna dup librriile standard sau sistem n subdirectorul /lib sau
/usr/lib. Exemplul urmtor poate fi nlocuit cu uurin cu librriile
specifice arhitecturii SimpleScalar:
./xgcc prog.c -L/home/myname/mylibs mylib.a
Opiunea -Ipathname adaug calea de directoare n care se vor cuta
bibliotecile specificate cu directiva #include. Este obligatoriu s nu nceap
cu /. Implicit preprocesorul caut dup fiierele definite cu #include n
directorul curent (cel care conine codul surs al aplicaiei), apoi n
directorul din calea specificat cu directiva -Ipathname i n final n
directorul /usr/include. Astfel, includerea unei biblioteci utilizator aflat n
calea de directoare /home/myname/myheaders se face prin comanda:
./xgcc prog.c -I/home/myname/myheaders

130 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Obs: Fiierele de bibliotec (header) aferente librriilor sistem se gsesc n
directorul /usr/include i nu sunt afectate de ctre opiunea -I. Includerea
acestora se face ntr-o manier uor diferit de cazul bibliotecilor utilizator.

n continuare sunt prezentai paii pentru instalarea benchmark-
urilor SPEC2000 sub sistemul de operare LINUX.
I1. Se creeaz un director pe discul destinaie /pisa/kit-spec2000. Trebuie
s existe cel puin 1GByte spaiu liber pe discul destinaie.
I2. Se monteaz CD-ul cu sursele SPEC2000
$mount /dev/cdrom /mnt/cdrom
I3. De notat c trebuie s existe privilegii de root pentru a monta CD-ul.
I4. Se trece n directorul unde a fost montat CD-ul
$cd /mnt/cdrom
I5. Se executa scriptul de instalare
$./install.sh
Cnd suntei ntrebat, se va introduce directorul destinaie (/pisa/kit-
spec2000).
I6. Dup terminarea instalrii se va afia mesajul urmtor:
Everything looks ok, source the shrc file
and have at it!
I7. Se schimb directorul curent n /pisa/kit-spec2000 i se execut scriptul
shrc:
$cd /pisa/kit-spec2000
$. ./shrc <- adic punct spaiu punct slash.
I8. Efectul comenzilor anterioare este de a seta variabilele i calea spre
benchmark-urile SPEC2000.
n acest moment benchmark-urile SPEC2000 sunt instalate.
Compilarea benchmark-urilor pentru arhitectura PISA presupune urmarea
pailor:
C1. Se schimb directorul curent n /pisa/kit-spec2000/config i se face o
copie a fiierului Tru64_Unix:
$cd /pisa/kit-spec2000/config
$cp Tru64_Unix.cfg pisa.cfg

Metodologia de simulare 131
C2. Se trece la editarea fiierului de configurri pisa cu ajutorul unui editor.
n acest caz s-a folosit pico:
$pico pisa.cfg
C3. n fiierul pisa.cfg se vor modifica urmtoarele:
tune = base
ext = ss
CC = /pisa/gcc-2.6.3/xgcc -v
CXX = /pisa/gcc-2.6.3/xgcc -v
FC = kf90 -v
OPTIMIZE =
COPTIMIZE =
CXXOPTIMIZE = -O2
FOPTIMIZE = -O5
ONESTEP = yes
PASS1_CFLAGS = -funroll-loops
#PASS2_CFLAGS = -prof_use_feedback -prof_dir /tmp/prof
C4. Se editeaz fiierul /pisa/kit-spec2000/benchspec/Makefile.defaults.
La linia 69 se terge lm.
C5. n acest moment se poate trece la compilarea benchmark-urilor
SPEC2000 pentru arhitectura PISA. Comanda universal pentru
realizarea acestui lucru este:
$runspec --config=pisa --action=build benchmark
unde benchmark reprezint programul de test care se dorete a fi
compilat (ex: parser, gzip, bzip2, etc).
Dup compilare benchmark-ul poate fi gsit n directorul:
/pisa/kit-spec2000/benchspec/cint2000/benchmark/exe/.
Prin metoda de mai sus vor putea fi compilate pentru arhitectura
SimpleScalar urmtoarele benchmark-uri:
1) 164.gzip
2) 175.vpr
3) 176.gcc
4) 181.mcf
5) 186.crafty
6) 197.parser
7) 255.vortex
8) 256.bzip2
9) 300.twolf
10) 254.gap

132 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Benchmark-ul 253.perlbmk necesit urmtorii pai suplimentari
pentru obinerea codului executabil. Pentru nceput trebuie corectate
urmtoarele erori:
pp_sys.c:58: sys/select.h: No such file or directory
Se comenteaz linia 58 din pp_sys.c aflat n directorul:
/pisa/kit-spec2000/benchspec/CINT2000/253.perlbmk/src
Se execut comanda:
$runspec --config=pisa --action=build perlbmk
3.2.8. FOLOSIREA DEBUGGER-ULUI GNU.
n acest subcapitol sunt prezentate etapele principale care trebuie
parcurse pentru depanarea programelor scrise n C (sau C++) sub sistemul
de operare Linux folosind utilitarele GNU.
Puine programe funcioneaz perfect la prima rulare. Mai devreme
sau mai trziu va trebui s depanm un program care funcioneaz conform
ateptrilor. Dei exist unele medii de programare care au unele faciliti de
depanare, exist soluii foarte bune i fr a recurge la acestea. Cea mai
simpl i mai folosit metod de depanare este modificarea programului
pentru a afia unele informaii eseniale n anumite puncte critice. Astfel,
citind ieirea programului se va putea analiza evoluia sa. Dublat de puin
experien, aceast abordare se dovedete foarte eficient. Standardul ANSI
C prevede dou faciliti care ajut la depanare. Funcia abort() ncheie
execuia programului i genereaz un fiier core. Se poate apela la aceast
funcie de cte ori se depisteaz un caz imposibil. Astfel, cnd se ntmpl
un eveniment neprevzut, programul se va opri i se va putea examina starea
memoriei n acel moment, putnd constata unde s-a greit n raionament.
Cellalt element de ajutor n depanare este funcia assert(). Aceasta primete
un parametru, de obicei o condiie care este cu siguran adevrat. Dac
condiia nu este ndeplinit se comport asemntor cu abort().
O abordare comod o reprezint folosirea depanatorului GNU gdb,
vizual sau n mod text, depinde de versiunea de Linux sau Cygwin
(emulator de Linux n Windows) utilizat, pentru examinarea cursului

Metodologia de simulare 133
execuiei programului i a evoluiei variabilelor pentru cazuri de grade
diferite de complexitate. Astfel,
O Fiierele obiect trebuie terse dac acestea exist (n cazul n care au fost
compilate anterior pentru sursele respective).
O Sursele trebuie compilate cu opiunile de depanare: -g O
gcc c g O nume_fis1.c nume_fis2.c
O Asigurai-v c a avut loc o compilare cu succes (dac s-au creat fiierele
obiect).
dir nume_fis*.o
O Se va reface executabilul prin comanda make (trebuie verificat ca fiierul
makefile s existe i este cel dorit de dumneavoastr). Pentru surse
obinuite (nu module care extind setul de instrumente SimpleScalar) se
poate ncerca i comanda:
gcc nume_fis1.o nume_fis2.o ...... -o nume_fis_executabil
Altfel, pentru surse SimpleScalar (fiind necesare i alte module
componente setului, precompilate sau biblioteci arhivate) se va tasta din
prompter cygwin (directorul curent fiind simplesim-3.0) sau mediu de
comand Linux:
$ gcc -o sim-vpred `./sysprobe -flags` -DEBUG -O0 -g -Wall sim-
vpred.o vpred.o main.o syscall.o memory.o regs.o loader.o endian.o
dlite.o symbol.o eval.o options.o stats.o eio.o range.o misc.o
machine.o libexo/libexo.a `./sysprobe -libs`-lm
n ambele cazuri este generat cod main specific arhitecturii pentru care
a fost scris i compilat codul surs al gcc (n acest caz Intel x86).
O Se ruleaz programul gdb.
gdb sau
gdb nume_program_executabil sau
n orice moment se poate tasta gdb help pentru afiarea comenzilor.
Alegerea programului (executabil) se face prin comanda file, dac nu
s-a specificat la iniializarea gdb-ului.
file nume_program_executabil
Setarea argumentelor programului (dac este nevoie) se face prin
comanda set args.
set args redir:sim applu.res max:inst 5000000 contextual 1 applu.ss <
applu.in

134 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Not: Pot exista unele probleme dac nu se las spaiu ntre applu.ss i
<respectiv ntre <i applu.in.

Pentru a verifica dac s-au introdus corect argumentele se poate apela
comanda show args.
Setarea punctelor de ntrerupere (breakpoints) se face prin comanda
break.
U break (fr parametrii) seteaz ntreruperea pe urmtoarea
instruciune ce va fi executat i are efect doar dac n prealabil s-a
dat comanda run.
U break function stabilete un punct de ntrerupere pe prima
instruciune din funcie.
U break +/- offset - seteaz un breakpoint la un numr de instruciuni
(offset) nainte sau dup linia curent
U break nr_linie stabilete o ntrerupere pe linia nr_linie
U break nume_fiier:nr_linie - seteaz un breakpoint la linia nr_linie
din fiierul nume_fiier.
U break if cond determin oprirea la punctul de ntrerupere
stabilit doar dac evaluarea condiiei este diferit de 0. n locul
punctelor de suspensie () se poate pune orice argument mai sus
amintit.
U Comanda tbreak args are aceleai argumente ca i break, cu
deosebirea c breakpoint-ul este ters dup prima oprire n acel loc.
Pentru a vizualiza lista punctelor de ntrerupere se tasteaz info
breakpoints.
Stabilirea punctelor de vizualizare (watchpoint-uri) se face prin
comanda watch (prin watchpoint-uri se poate opri execuia unui
program de fiecare dat cnd evaluarea expresiei se modific. Se pot
seta cel mult dou astfel de expresii:
watch expr
Pentru a cunoate lista punctelor de vizualizare se tasteaz info
watchpoints.
Se ruleaz apoi programul n mod interactiv (debug) prin comanda run
(sau run > outfile pentru indirectarea mesajelor ctre fiierul
outfile).

Metodologia de simulare 135
Puncte de ntrerupere se pot seta i dup lansarea comenzii run prin
aceleai comenzi enunate mai sus (n cazul n care consola deine
controlul).
Parcurgerea sursei se poate face fie pas cu pas, fie pn la urmtorul
punct de ntrerupere, fie pn la sfritul funciei, prin comenzi
asemntoare utilitarelor de depanare din limbajele consacrate (de
nivel nalt).
Comanda continue [ignore_count] reia execuia programului de la
adresa la care s-a oprit ultima dat; oricare punct de ntrerupere setat
la acea adres este srit (bypassing); argumentul opional
ignore_count permind ignorarea punctului de ntrerupere de la
adresa la care s-a oprit de un numr de ori egal cu ignore_count;
comanda poate fi abreviat cu c.
Comanda next [count] (step over) reia execuia programului i se
oprete la instruciunea urmtoare din contextul curent al stivei (din
fiierul curent). Dac se specific argumentul count, rmne n next
nu mai pred controlul consolei dect dup execuia urmtoarelor
count instruciuni.
Comanda step [count] este asemntoare comenzii next, cu
deosebirea c, dac instruciunea curent este o funcie compilat cu
opiunea pentru depanare (-g), nu se trece la urmtoarea instruciune,
ci se intr n funcia respectiv (step into). Reciproc , dac funcia nu a
fost compilat cu opiune pentru depanare, efectul va fi acelai cu cel
al comenzii next. Pentru a intra n funciile fr informaii de
depanare, se poate folosi comanda stepi (abreviat si) care are ca
efect intrarea n funcia respectiv, cu afiarea instruciunii main
urmtoare; mpreun cu stepi se poate folosi comanda nexti (abreviata
ni) care reia execuia programului i se oprete la urmtoarea
instruciune main.
Vizualizarea datelor se face cu ajutorul comenzii print, abreviat p.
Sintaxa acestei comenzi este:
print [/f] [exp]
Dac argumentul exp lipsete, print va afia ultima valoare afiat. /f
poate specifica formatul n care se face afiarea, astfel:
U x afieaz ntregul din valoare ca hexazecimal.
U d afieaz ntregul din valoare ca zecimal cu semn.
U u afieaz ntregul din valoare ca zecimal fr semn.
U o afieaz ntregul din valoare ca octal.
U t afieaz ntregul din valoare n binar.
U c afieaz ntregul din valoare ca i caracter constant.

136 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
U f ia biii din valoare ca numr n virgula mobil i afieaz
valoarea.
Se pot vizualiza variabile sau expresii din alte funcii sau fiiere:
fiier::variabil
funcie::variabil

Not: Ocazional, o variabil local poate avea valori greite chiar la
nceputul intrrii n funcie, sau chiar nainte de ieire din funcie.
Acest lucru se datoreaz n parte faptului c este nevoie pe majoritatea
mainilor de mai multe instruciuni pentru a comuta contextul (i
variabilele locale implicit). Acest lucru se ntmpl doar la
parcurgerea sursei la nivel de instruciuni main.

Prsirea utilitarului gdb se face prin comanda quit.
Exemplul urmtor este dat pentru predictorul de tip LastValue aferent
instruciunilor de salt indirect (contextual = 3 parametrul de intrare pentru
simulatorul sim-vpred.exe) ce conine ca i module principale fiierele: sim-
vpred.c, vpred.h i vpred.c.
1. gcc c g O *vpred.c
2. dir *vpred.o
3. make // sau comanda echivalent (vezi expunerea anterioar)
4. gdb
5. file sim-vpred // s-a ncrcat sim-vpred.exe n memoria aplicaiei gdb
6. set args redir:sim c.res max:inst 500000000 contextual 3 jvpt 256
history 1 applu.ss < applu.in
7. show args
8. break foundAssociativeJVPTAddress
// mesajul care va apare este: Breakpoint 1 at 0x40a8cd: file vpred.c, line 304.
9. run
/* mesajul care va apare este: Breakpoint 1, foundAssociativeJVPTAddress
(addr=4346064, value=4349632, history=1, jvpt=0x430d4c, JVPTdim=256,
contextual=3, pattern=3) at vpred.c:304
Starting program: /home/Administrator/simplesim-3.0/sim-vpred.exe -redir:sim
c.res -max:inst 500000000 -contextual 3 applu.ss < applu.in */



Metodologia de simulare 137
3.3. EXTINDEREA MEDIULUI SIMPLESCALAR 3.0 CU
UN MODUL PROPRIU.
3.3.1. DESCRIEREA SUMAR A CODULUI SURS AFERENT
SIMULATOARELOR SIMPLESCALAR EXISTENTE.
Setul de instruciuni aferent arhitecturii SimpleScalar este definit prin
intermediul unor macrouri n modulul ss.def [Bur97]. Fiecare macro
definete codul operaiei, numele instruciunii, diverse flag-uri (indicatori de
condiie), operanzii surs i destinaie, precum i aciunea ce trebuie
ndeplinit pentru fiecare instruciune n particular. Aciunile instruciunilor
comune tuturor simulatoarelor sunt definite n fiierul ss.h. Acele aciuni
care necesit implementri distincte pentru simulatoare diferite, sunt definite
n mod specific n codul surs al fiecrui simulator.
La rularea unui simulator, rutina main() (definit n modulul main.c)
realizeaz toate iniializrile (ceasul simulatorului, biblioteca BFD, numrul
de instruciuni procesate, unitatea de decodificare a instruciunilor etc.),
procesarea (identificarea) opiunilor generale de simulare, iar apoi ncarc n
memorie codul obiect (executabil) al benchmark-ului care va fi simulat,
verific valorile parametrilor din linia de comand. n final, main() apeleaz
subrutina sim_main() specific i descris distinct n fiecare simulator n
parte. Sim_main() predecodific ntregul segment de text (codul i datele
benchmark-ului) pentru o mai rapid simulare, i apoi starteaz simularea
din punctul specificat (instruciunea 0, sau dup simularea unui anumit
numr de instruciuni etc.). Pentru o mai bun nelegere a funcionrii
interne a simulatoarelor setului de instrumente SimpleScalar 3.0. se prezint
n continuare codul surs al fiierelor componente. Toate aceste fiiere se
regsesc i la adresa de web:
ftp://ftp.cs.wisc.edu/sohi/Code/Simplescalar/simplesim.tar.
bpred.[c,h]: Verific instanierea, funcionarea i actualizarea
predictoarelor de salturi. Cele mai importante funcii de interfa sunt
bpred_create(), bpred_loockup(), bpred_update().
cache.[c,h]: Conine funciile necesare configurrii unor multiple tipuri
de cache (TLB-uri, cache-uri de date i instruciuni). Structurile de date
folosite sunt dinamice (liste simplu nlnuite) care ajut la compararea
tag-urilor n cache-urile cu asociativitate sczut (cel mult patru), i
tabele de dispersie pentru comparaiile de tag-uri n cache-urile de cu
grad ridicat de asociativitate. Funciile cheie folosite sunt:

138 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
cache_create(), cache_acces(), cache_probe(), cache_flush(), i
cache_flush_adr().
endian.[c,h]: Definete cteva funcii simple pentru a determina ordinea
la nivel de octet i cuvnt de date (byte i word) pe platformele surs
(unde au fost compilate) dar i pe cele int (unde sunt lansate n
execuie).
eventq[c,h]: Definete funciile i macro-urile pentru administrarea
cozilor ordonate de evenimente (folosite pentru ordonarea i arbitrarea
scrierilor n faza write-back). Metodele mai importante sunt:
eventq_queue() i eventq_servive_events().
loader.[c,h]: ncarc programul int (ex. applu.ss) n memoria
simulatorului, seteaz mrimea segmentelor de date, cod i stiv,
iniializeaz stiva de program, i stabilete punctul de intrare n
programul de simulat. Funcia cheie care realizeaz acest lucru este
ld_load_prog().
main.c: Execut toate iniializrile i funciile principale ale
simulatorului. Metodele cheie sunt: sim_options(), sim_config(),
sim_main(), i sim_stats().
memory.[c,h]: Cuprinde funciile pentru citirea din surs, scrierea n
destinaie, iniializare, i afiare a coninutului memoriei principale.
Memoria este implementat ca i un spaiu vast compartimentat, fiecare
fraciune a ei fiind alocat la cerere. Funcia de baz este mem_acces().
misc.[c,h]: Conine numeroase funcii foarte utile, ca de exemplu: fatal(),
panic(), warn(), info(), debug(), getcore(), i elapsed_time().
options.[c,h]: Conine codul responsabil cu opiunile simulatorului,
folosit pentru procesarea argumentelor din linia de comand i/sau
opiunile specificate n fiierele de configurare. Opiunile sunt stocate
ntr-o baz de date (vezi funciile opt_reg_*()). opt_print_help()
genereaz o list de mesaje de ajutor, iar opt_print_options() afieaz
starea curent a fiecrei opiuni.
ptrace.[c,h]: Furnizeaz codul necesar generrii de trace-uri la nivel de
faze pipeline de procesare din simulatorul sim-outorder.
regs.[c,h]: Evideniaz funciile privind iniializarea i afiarea
coninutului seturilor de regitri generali: ntregi, flotani.
sim.h: Conine cteva declaraii de variabile externe i prototipuri de
funcii.
stats.[c,h]: Cuprinde rutinele necesare manipulrii rezultatelor statistice
ale simulrii. Funcii cheie folosite sunt: stat_reg_*(),
stat_reg_formula(), stat_print_stats(), stat_reg_dist() i
stat_add_sample().

Metodologia de simulare 139
syscall.[c,h]: Conine codul care acioneaz ca o interfa ntre apelurile
sistem aferente arhitecturii SimpleScalar i apelurile sistem caracteristice
sistemului de operare care ruleaz pe calculatorul gazd.
sysprobe.c: Determin ordinea la nivel de octet i cuvnt (byte and word
order) existent pe calculatorul gazd, i genereaz flag-urile de
compilare corespunztoare.
3.3.2. IMPLEMENTAREA SIMULATORULUI PROPRIU.
Pentru studierea unei anumite idei/concept/metode i raportare n
concordan cu majoritatea cercettorilor n domeniul arhitecturilor de
calcul trebuie ca simularea s fie realizat pe benchmark-urile SPEC,
SoftFloat sau MediaBench. Spre exemplu, n anul 2000, mai mult de o
treime din lucrrile publicate n conferinele de top dedicate arhitecturii
calculatoarelor au folosit setul SimpleScalar pentru simularea / evaluarea
propriilor idei de proiectare. Setul de instrumente "SimpleScalar" realizeaz
o standardizare a procesului de simulare a unei microarhitecturi. Drept
consecin, este dificil de realizat un simulator independent care s
proceseze benchmark-urile SPEC. Soluia const n: se alege unul din
simulatoarele surs existente (cel care s-ar potrivi cel mai mult cu
"background-ul" necesar cercetrii proprii - de exemplu sim-fast, sim-bpred)
i se urmeaz paii descrii n continuare. Se exemplific printr-un modul
care determin localitatea valorilor pe diverse tipuri de resurse i
predicioneaz valorile instruciunilor. O descriere integral a acestui
simulator este realizat n subcapitolul 6.1.1.
A) Pe scheletul simulatorului existent (fie acesta sim-bpred.c),
redenumindu-l, se construiete un fiier surs nou, numit sim-VPred.c.
n cadrul acestui fiier se vor aduga (sau elimina) noi informaii.
= Eliminarea se refer la directive de compilare, etc, avnd ca "target"
o alt platform (Exemplu: Alpha, ARM). Atenie, acest lucru trebuie
fcut cu mult grij! Rmnerea informaiilor ne-necesare n codul
surs al simulatorului nu va afecta funcionarea corect a acestuia pe
platforma pe care se lucreaz (PISA).
= Adugarea const n opiuni noi (parametrii de intrare ai
simulatorului), statistici generale precum i codul aferent simulrii
efective (rutina sim_main() - specific fiecrui simulator, i apelat
din modulul extern main.c, dup iniializri prealabile) a ideii/tehnicii
propuse spre investigare.

140 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
B) Se construiete un fiier surs nou VPred.c care s conin definirea
simbolurilor/parametrilor, structurilor (spre exemplu: LVPT),
implementarea funciilor apelate n modulul sim-VPred.c (spre exemplu:
clasificarea (predictibil / nepredictibil) a intrrii n structura de
predicie etc). Se poate pstra scheletul existent (fie bpred.c),
redenumindu-l.
C) Completarea modulului Makefile (n cadrul cruia are loc compilarea /
asamblarea / link-editarea) cu noul modul oriunde este nevoie (fiiere
surs .c, fiiere header .h, fiiere obiect .o, biblioteci suplimentare, fiiere
executabile - ce vor fi generate). Apariia mesajului "My work is done
here !" exprim ncheierea cu succes a operaiunii de compilare /
asamblare / link-editare a simulatorului implementat.
Obs:
i) Pasul B) poate lipsi dar n acest caz modulul sim-VPred.c ar deveni
prea complex cuprinznd i definiiile, implementrile funciilor
apelate n interiorul su. Este deci nerecomandabil.
ii) Programarea se realizeaz n limbajul C standard sub sistemul de
operare Linux, neexistnd situaii de gen "Not Enough Memory" la
compilare n ciuda complexitii aplicaiei.
nainte de a ncepe simularea n sine simulatorul face uz de cteva
funcii predefinite, astfel:
+ nregistreaz opiunile de intrare n funcia sim_reg_options (struct
opt_odb_t *odb) folosind funciile opt_reg_uint, opt_reg_string.
+ verific valorile argumentelor de intrare n funcia
sim_check_options (struct opt_obd *odb, int argc, char *argv).
+ nregistreaz informaiile statistice de ieire n sim_reg_stats
(struct_stat_sdb_t *odb) folosind stat_reg_counter, stat_reg_int,
stat_reg_formula.
+ iniializeaz simulatorul cu sim_init(void).
+ ncarc programul (benchmark-ul selectat) n starea simulat cu
sim_load_prog(char *fname, int argc, char **argv, char **envp).
Funciile descrise sunt apelate n multe etape ale simulrii i pot fi
folosite n structura simulatorului (dar nu este necesar). Folosind funciile de
ajutor furnizate, simulatorul nou creat este integrat n structura SimpleScalar
i va obine interfaa standard pentru opiunile de intrare, i una pentru
furnizarea rezultatelor. Cu aceste noi funcii de ajutor avem s definim
cteva macrouri pentru a accesa regitri pe care i folosete simulatorul
(SET_NPC, SET_TPC, etc), pentru identificarea dependenelor dintre
instruciuni provocate de regitri generali (DGPR, DFPR_L, DFPR_F, etc.),

Metodologia de simulare 141
funcii de ajutor pentru determinarea strii precise a structurii ierarhice de
memorie (READ_BYTE, WRITE_BYTE etc).
Funcia sim_main() conine nucleul simulatorului. Ea bucleaz ntr-un
ciclu infinit unde se aduc, se decodific i execut instruciunile din
program. Cnd programul simulat se ncheie sau ajunge la un numr maxim
de instruciuni ciclul se ncheie ca de altfel i simularea.
Operaia de aducere i decodificare se implementeaz prin dou
macrouri:
U MD_FETCH_INST(inst, mem, regs.regs_PC).
U MD_SET_OPCODE.
Execuia instruciunii se ncheie folosind o ntrerupere unde este
inclus definiia mainii (machine.def care pointeaz la pisa.def ori
alpha.def). Execuia instruciunii actuale este ncheiat n machine.def
folosind macrourile definite anterior (SET_GPR, SET_NPC, SET_FPR etc).
Mai mult, n timpul fazei de execuie a instruciunii se realizeaz simularea
proprie (determinarea localitii pe tipuri de instruciuni, pe regitrii
procesorului MIPS i eventual predicia cu diverse scheme: "Last Value,
Incremental, Contextual, Hibrid").
Fiierele VPred.h i VPred.c conin declaraiile de structuri i de
date, definiiile funciilor folosite n implementare n vederea cuantizrii
localitii valorilor: addrList, valueList, pushAddress, pushValue,
foundAddress, foundValue, etc.
Blocul de registre generale folosit n simulatorul SimpleScalar este
implementat ca o structur definit n regs.h. Flag-urile folosite sunt:
F_ICOMP identific operaii aritmetico - logice
F_FCOMP identific operaii n virgul mobil (Floating Point)
F_CTRL instruciune de control (jump)
F_UNCOND salt necondiionat
F_COND salt condiionat
F_MEM instruciune de acces la memorie (cuprind att
instruciuni Load ct i instruciuni Store)
F_LOAD ncarc instruciunea Load (citire din memorie)
Alte flag-uri sunt definite n fiierul pisa.h.





142 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
3.4. ARHITECTURA SIMPLESCALAR

Figura 3.6. Arhitectura virtual "SimpleScalar" regitrii/memorie. Orientare
invers.
Arhitectura SimpleScalar este derivat din arhitectura procesorului
MIPS - IV ISA. Organizarea memoriei n sistemele bazate pe arhitectura
SimpleScalar este convenional. Spaiul de adrese utilizator (pe 31 de bii)
este compus din trei pri: cod, date i stiv program. Prima zon din spaiul
de adrese (ncepe la 0x400000) este segmentul text, care memoreaz
instruciunile programului. Deasupra segmentului de text este segmentul de
date (ncepnd de la adresa 0x1000000) i este mprit n dou pri. Zona
de date static conine obiecte a cror mrime i adres sunt cunoscute de
ctre compilator i link-editor. Imediat, deasupra acestei zone se afl datele
dinamice. La alocarea spaiului dinamic de memorie pentru un program
(prin malloc i apelul sistem sbrk) marginea superioar a segmentului de
date se deplaseaz n sus. La marginea superioar a spaiului de adrese
(0x7fffc000) este stiva de program, care crete n jos, spre segmentul de
date.
Setul de instruciuni SimpleScalar PISA (Arhitectura cu set de
instruciuni portabil) este o extensie a setului de instruciuni al procesorului
DLX conceput de Hennessy i Patterson, incluznd de asemenea un numr
de instruciuni i moduri de adresare specifice procesoarelor MIPS IV i

Metodologia de simulare 143
RS/6000. Exist totui cteva diferene notabile dar i caracteristici
suplimentare din care amintim:
Codificarea instruciunilor este pe 8 octei.
Cuprinde o instruciune nou, inexistent la procesoarele amintite mai
sus, de extragere a rdcinii ptrate att n simpl ct i n dubl precizie.
Instruciunile cu referire la memorie (load/store) suport dou moduri de
adresare - pentru toate tipurile de date - suplimentare celor existente la
procesorul MIPS IV: indexat (registru + registru) i auto -
incrementare/decrementare.
Ca i n cazul arhitecturii MIPS exist trei formate de instruciuni:
registru (R-tip), imediat (I-tip) i de salt (J-tip).


Figura 3.7. Formatul instruciunilor pentru arhitectura SimpleScalar
Formatul registru este specific instruciunilor de calcul (aritmetico -
logice). Formatul imediat este folosit de ctre instruciunile de salt
condiionat i de transfer. Cuprinde un cmp constant imediat pe 16 bii.
Al treilea format se numete J-tip, i cuprinde printre altele i un cmp de
adres de 24 de bii. Cmpurile alocate fiecrui registru sunt pe 8 bii n
scopul suportrii unei extensii ulterioare a arhitecturii de registre de 256
regitri ntregi i 256 flotani. Cmpul opcode este pe 16 bii facilitnd o
decodificare rapid a instruciunii. Dei, multiplele formate complic
hardware-ul, prin pstrarea unor formate similare se poate reduce aceast
complexitate. Astfel, primele dou cmpuri ale tuturor formatelor prezentate
mai sus sunt identice.
Setul de instruciuni proiectat suport eventuale adnotri (cmp
suplimentar pe 16 bii) - modificri, sintetizri a instruciunilor post-
compilare - n fiierele asamblare, fr a fi necesar o recompilare a codului
main. Exist dou tipuri de adnotri: pe bit sau la nivel de cmp. O
adnotare pe bit este urmtoarea:

lw /a $r6, 4($r7)

144 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Adnotarea /a urmrete setarea primului bit al cmpului adnotare.
Adnotarea pe bit de la /a la /p stabilete setarea biilor de la 0 la 15 din
respectivul cmp. O adnotare pe bit are urmtoarea form:
lw /6:4(7) $r6, 4($r7)
Adnotarea de mai sus seteaz cmpul de 3 bii (de la 4 la 6) n
interiorul cmpului de 16 bii la valoarea 7. Aceste adnotri ar putea conine
informaii utile hardului, furnizate de ctre compilator. Introducerea
informaiilor de profil aferente fiecrei instruciuni poate fi necesar n
implementarea diverselor arhitecturi sau tehnici novatoare de procesare
(vezi predictorul hibrid cu selecie bazat pe aritate din subcapitolul 5.3.3.1,
identificarea salturilor anterioare cu adevrat relevante pentru predicia
salturilor curente). Prin intermediul lor, s-ar putea proiecta o interfa
hardware software extrem de util, care s faciliteze execuia run-time a
instruciunilor.
Setul de instruciuni precum i apelurile sistem utilizate n cadrul
setului de instrumente SimpleScalar 3.0 se regsesc n [Bur97, Flo03].
4. INFLUENA UNOR CONCEPTE DE
PROGRAMARE PROCEDURAL / OBIECTUAL
ASUPRA GENERRII SALTURILOR INDIRECTE
4.1. ANALIZA LIMBAJELOR C I C++ DIN PUNCT DE
VEDERE AL PROCESRII LOR PE ARHITECTURI
CU PARALELISM LA NIVELUL
INSTRUCIUNILOR
Istoria procesoarelor contrapune dou paradigme pentru creterea
performanei, bazate pe software i respectiv pe hardware. n ciuda scopului
comun de exploatare i cretere a paralelismului la nivelul instruciunilor
comunitatea cercettorilor se mparte n dou entiti aproximativ
disjuncte n ncercrile lor de a-l ndeplini. n timp ce arhitecii de
calculatoare i canalizeaz eforturile pentru exploatarea / optimizarea
tehnicilor de procesare existente prin simulri substaniale pe programe de
test reprezentative n format cod obiect, fr a ine cont de semantica
codului surs (H.L.L), autorii de compilatoare urmresc optimizarea codului
obiect, reducerea necesarului de memorie etc. Knuth afirm n [Knu71],
analiznd comportamentul static i dinamic al unei bogate colecii de
programe Fortran, c programatorii au o srac intuiie n ce privete
seciunile de program mari consumatoare de timp. De aceea, cunoaterea
profilului de execuie al programelor i-ar ajuta pe autorii acestora n efortul
de mbuntire a performanelor (creterea vitezei de execuie a
programelor). n sprijinul afirmaiilor lui Knuth se afl celebra regul 90 /
10 care enun c cca. 90% din timpul de rulare al unui program se
execut doar cca. 10% din codul acestuia. Ideea c arhitectura
procesoarelor interacioneaz "accidental" cu domeniul software este
complet greit, ntre hardware i software existnd n realitate o simbioz i
o interdependen puternic, nc neexplorate corespunztor. Procesoarele
se proiecteaz odat cu compilatoarele care le folosesc iar relaia dintre ele
este foarte strns:
146 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
U benchmark-urile sunt compilate pentru arhitectura respectiv (Ex: gcc
n sistemul de operare Linux poate transforma un cod surs C n cod
obiect fie pentru procesor Intel, fie pentru arhitectura virtual
SimpleScalar, n funcie de bibliotecile i instrumentele software
folosite asamblor, link-editor, interpretor) iar,
U compilatorul trebuie s genereze cod care s exploateze caracteristicile
arhitecturale, altfel codul generat va fi ineficient.
Una dintre metodele moderne care se afl la intersecia celor dou
tipuri de abordri se bazeaz pe clasificarea structurilor de program
(SingleLast, SingleStride, MixedPattern) n funcie de arhitectura pe care
ruleaz mai bine (vezi cazul predictoarelor de valori decuplate [Lee93]).
O alt soluie ar putea consta n modificarea compilatoarelor existente
astfel nct codul obiect rezultat s fie executat foarte eficient pe
arhitecturile implementate la ora actual.
Dup cum este binecunoscut, tehnologia sistemelor de calcul se
dezvolt extrem de rapid (Legea lui Moore) fcnd necesar apariia de noi
programe de test standardizate care s reflecte mbuntirile tehnologice
aferente microprocesoarelor, compilatoare noi, cele mai recente aplicaii
multimedia, compresii / transmisii de semnale audio / video / GSM. Cele
mai reprezentative benchmark-uri care pot asigura un mediu adecvat de
testare / simulare a ideilor arhitecturale novatoare sunt cele dezvoltate de
consoriul SPEC. Ultima versiune a acestor benchmark-uri (SPEC 2000) a
fost lansat oficial la 30 iunie 2000 i cuprinde 26 de programe scrise n C,
C++ i Fortran dintre care 19 n premier [Henn00, SPEC]. innd cont c
benchmark-urile SPEC'95 erau n ntregime procedurale i datorit
tendinelor, manifestate n ultimii ani, de trecere la limbajele obiectuale
bazate pe concepte avansate: ncapsulare, motenire, polimorfism, era de
ateptat ca noua suit (SPEC 2000) s conin ct mai multe benchmark-uri
obiectuale scrise n C++. Cu toate acestea, SPEC a primit ca propuneri din
partea membrilor i a publicului larg, doar dou aplicaii scrise n C++
dintre care una nu s-a dovedit portabil pe compilatorul ANSI C++ (doar pe
gnu g++) nefiind astfel votat de ctre membrii SPEC; cealalt aplicaie -
252.eon - este ns extrem de portabil fiind compilat "fr probleme" pe
17 compilatoare de C++ distincte.
Sunt doar cteva motive pentru care aplicaiile obiectuale pot fi
considerate la momentul actual o mare provocare att pentru comunitatea
compilatoritilor ct i pentru cea a arhitecilor de microprocesoare.
Provocarea este cu att mai mare cu ct nc din 1994 cercettorii americani
[Cal94] au demonstrat, bazat pe simulare, c exist diferene semnificative
ntre caracteristicile programelor procedurale (C) i cele ale programelor

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 147
obiectuale (C++), cu implicaii asupra performanelor acestor programe
(vitez de execuie, consum de memorie) i asupra microarhitecturii.
Caracterizarea empiric a celor dou tipuri de programe (C i C++)
este util att pentru realizatorii de compilatoare ct i pentru proiectanii de
arhitecturi de calcul n ncercarea acestora de a exploata eficient diferenele
comportamentale dar i de a nelege nivelul de complexitate al benchmark-
urilor obiectuale. Astfel, se urmrete detectarea acelor optimizri benefice
din aplicaiile scrise n C dac sunt la fel de eficiente i n programele C++.
Programarea structurat (n limbajul C) este deficitar n ceea ce
privete posibilitatea reutilizrii programelor, scalabilitii, mentenabilitii,
depanrii i extinderii unor module de program. Pornind de laecuaia
programrii structurate enunat de Niklaus Wirth:
Structuri de date + Algoritmi = Program
se poate afirma c, principala deficien a programrii procedurale const n
tratarea separat a algoritmilor i a structurilor de date ce se prelucreaz
[Aco02]. Prin analogie cu obiectele din natur, caracterizate att prin
structur, ct i prin comportament, poate fi enunat o ecuaie ce
caracterizeaz programarea orientat pe obiecte (OOP):
Date + Metode = Clas
Relaia se bazeaz pe principiul fundamental al ncapsulrii
datelor, conform cruia accesul la datele membre (atribute, proprieti) se
poate face numai prin intermediul metodelor asociate. Pe lng ncapsulare,
concepte fundamentale ca polimorfism, motenire (simpl, multipl)
urmresc realizarea unei ierarhii de clase, care s modeleze sisteme
complexe. Construirea ierarhiei de clase constituie activitatea esenial n
realizarea unei aplicaii orientate-obiect, practic faza de proiectare a
respectivului sistem.
Stilul de programare orientat-obiect propune mprirea aplicaiilor n
mai multe module, astfel nct cel ce dezvolt un modul nu trebuie s
cunoasc detaliile de implementare a altor module. Consecinele imediate
sunt scderea timpului de dezvoltare a aplicaiilor, simplificarea activitii
de ntreinere a modulelor i creterea calitii programelor.
n continuare sunt ilustrate cteva din caracteristicile de program prin
care aplicaiile procedurale difer de cele obiectuale. nainte ns, se va
explica semnificaia unora din termenii utilizai. Astfel, prin noiunea de
funcie C++ se nelege o funcie compilat cu un compilator de C++ (de
exemplu gnu g++) n timp ce o funcie C este orice funcie compilat cu

148 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
un compilator de C (fie gnu gcc). Funciile (metodele) membru C++ sunt
acele funcii asociate obiectelor.
U Din punct de vedere static, multe programe obiectuale au un numr
relativ redus de funcii C++ ns ele conin un procent destul de ridicat
de funcii C datorit utilizrii funciilor de bibliotec C predefinite.
U Programele obiectuale conin n medie mai puine instruciuni per
funcie comparativ cu cele procedurale putnd beneficia astfel mai
mult de pe urma tehnicii de in-lining aplicat funciilor. n plus
metodele C++ conin mai puine instruciuni dect funciile C++
(consecin a motenirii care are printre principalele avantaje
economia i reutilizarea de cod, polimorfism, extensibilitate
[Brea02]).
U Din punct de vedere dinamic, funciile din limbajul C execut de
aproximativ trei ori mai multe instruciuni dect funciile i metodele
din limbajul C++. Dimensiunea funciilor reprezint un factor
important att n optimizri precum macroexpandarea, fiind direct
proporional cu spaiul de overhead al fiecrei funcii - destinat
salvrii regitrilor (scrieri / citiri repetate din stiv), transmiterii
parametrilor, pstrrii rezultatului, precum i n performana cache-
ului de instruciuni. Caracteristica programelor obiectuale de a realiza
multe apeluri de funcii scurte (reduse ca numr de instruciuni)
constituie unul din principalele motive pentru care acest tip de
programe nu beneficiaz de avantajele localitii spaiale oferite de
blocurile mari de cache. n cercetrile sale, Calder afirm c
programele obiectuale necesit un cache de instruciuni de dou mai
mare pentru a obine rate de miss egale cu programele procedurale
[Cal94].
U Dimensiunea basic-block-urilor este aproximativ identic att n
programele procedurale ct i n cele obiectuale i este situat sub
valoarea de 6 instruciuni (5.4 instruciuni / basic-block n programele
obiectuale vs. 5.9 instruciuni / basic-block n programele
procedurale). Acest aspect este fundamental n ceea ce privete
limitarea ratei de aducere a instruciunilor din memorie n cadrul
procesorului (fetch bottleneck), sau n optimizarea codului executat pe
o arhitectur prin scheduling static metod care poate duce chiar i
la eliminarea miss-urilor de conflict n cache-ul de instruciuni.
U Cunoscut fiind tendina programelor obiectuale de a avea mai multe
metode cu un numr redus de instruciuni, descrise la nivel de cod
main prin intermediul apelurilor de funcii indirecte mecanism
furnizat de C++ i pentru implementarea motenirii, se poate afirma
c: n timp ce programele C execut mai multe instruciuni de salt

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 149
condiionat (bnez $t0), aplicaiile orientate pe obiecte execut mai
multe apeluri de rutine (directe jal <nume_procedur> i indirecte
jr $t1) dar i reveniri jr $ra n rutina apelant [Cal94]. Bazat pe
simulri laborioase [Cal94] s-a obinut c 23.1% din numrul total de
apeluri dinamice de funcii sunt indirecte n cadrul programelor
obiectuale, n timp ce acest procentaj pe testele procedurale este de
doar 8.3%. Acest fapt subliniaz necesitatea proiectrii de scheme de
predicie distincte pentru atingerea de acuratei ridicate de predicie la
execuia celor dou tipuri de programe (obiectuale respectiv
procedurale). Trebuie amintit aici i afirmaia lui Fisher [Fis92] care
afirm despre apelurile indirecte de funcii c reprezint stagnri greu
evitabile n procesarea fluxului de instruciuni i c exist puine
compilatoare sau artificii arhitecturale aplicabile la nivel hardware
care s elimine aceste bariere n vederea creterii paralelismului la
nivelul instruciunilor. De exemplu, procesoarele superscalare DEC
Alpha AXP 21064, respectiv Intel Pentium4, cu structuri pipeline
extrem de complexe (pe lungime faze de procesare, pe adncime
numr de uniti execuie) determin stagnarea i reexecuia unui
numr de 10 [Cal94b], respectiv 20 [Intel02], instruciuni n cazul unei
predicii eronate a fluxului de instruciuni. Penalitatea n timp poate
crete dac instruciunea int nu se afl n cache i trebuie adus din
memoria principal.
U Pentru o mai bun nelegere a comportamentului programelor, este de
un real ajutor cunoaterea proporiei (procentajul) de instruciuni
statice (de salt indirect, condiionat) prezente n program i care au o
semnificaie deosebit n timpul rulrii acestora. Pentru o cuantificare
a termenului de semnificaie s-a determinat cte instruciuni statice
din program exprim un procentaj dat din execuia tuturor salturilor
efectuate dinamic. Rezultatele, extrem de interesante, au la baz
observaia c nu toate instruciunile de salt statice (mai ales cele
condiionate) sunt executate n timpul procesrii dinamice a codului
surs, deoarece ele rezid n unele condiii de eroare, sau pot apare
ntr-un anumit context la care nu se ajunge ntotdeauna (salturi
corelate if cond1
if cond2 ).
Att pentru programele obiectuale ct i pentru cele procedurale, n
medie 95% dintre salturile dinamice efectuate au la baz doar 10%
dintre cele statice prezente n codul surs, n timp ce, 50% dintre
salturile dinamice sunt cauzate de mai puin de 1% dintre salturile
statice [Cal94]. De asemenea, se remarc numrul relativ redus de

150 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
salturi indirecte statice prezente n programele de calcul, dar i faptul
c sunt mai multe salturi indirecte semnificative n programele
obiectuale (25%) dect n cele procedurale (10%) pe benchmark-urile
msurate de Calder [Cal94]). O consecin a acestor rezultate ar fi c,
pentru multe din programele de calcul, prin tehnica de branch
prediction nu ar fi necesar predicia tuturor instruciunilor de salt, ci
mult mai eficient ar fi predicia corect a unui procentaj ct mai
nsemnat dintre salturile importante (semnificative din punct de
vedere dinamic).
U n stabilirea diferenelor comportamentale dintre programele
procedurale i cele obiectuale un rol important l au compilatoarele
folosite pentru generarea codului pseudo-obiect (necesar asamblrii i
link-editrii cu bibliotecile aferente n vederea obinerii codului
obiect). n urma simulrilor, cercettorii au sesizat pe lng asemnri
i unele diferene n urma compilrii cu DEC C++ respectiv GNUC++
[Cal94, Aig96, Dri98, Flo04]. La aceste aspecte se poate aduga i
afirmaia lui Stroustroup care afirm c: utilizatorii au nceput s
foloseasc C++ nainte ca specialitii s aib timpul necesar s-l
instruiasc pentru a-l folosi cu randament maxim [Aco02]. ntr-
adevr, s-a constat c o mare parte dintre compilatoarele de C++
existente nu sunt folosite dect pentru dezvoltarea de software
structurat i nu orientat-obiect (altfel spus, se lucreaz n C pe un
compilator de C++). Personal, am dezvoltat unele programe de test
simple care relev deosebiri n generarea codului cu compilatorul de C
al firmei Borland (BCC) fa de cel obinut prin compilarea cu GNU
C. Programele asamblare rezultate n urma compilrii cu GNU C
conin anumite salturi indirecte pure care nu se regsesc n urma
compilrii aceluiai cod surs C cu BCC. (Ex: un program care
folosete o instruciune de selecie switch/case pentru identificarea
numrului de cifre, spaii i a altor caractere dintr-un ir citit de la
tastatur).
Codul generat cu GNUC++ este puin mai ineficient dect cel
compilat cu DECC++. Programele compilate cu G++ execut cu 2.5%
mai multe instruciuni i apeleaz cu 8% mai multe funcii. Cu toate
c numrul de instruciuni de salt executate este aproape identic,
programele compilate cu G++ genereaz cu aproape 28% mai puine
salturi condiionate. Majoritatea acestor diferene apar datorit
bibliotecilor dinamice de funcii i se manifest i n cazul
programelor procedurale.
U Aa cum compilatorul influeneaz comportamentul programelor
obiectuale respectiv procedurale i optimizrile din timpul link-editrii

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 151
constituie un factor important n analiza performanelor celor dou
tipuri de aplicaii (C i C++).
Limbajele orientate obiect (C++) permit extinderea ierarhiei
claselor fr afectarea funcionalitii procedurilor anterior compilate.
Spre exemplu, un programator poate folosi clasa X i s compileze
unele module folosind doar interfaa clasei respective. Dac ulterior,
se declar o clas Y, derivat din X aflat n programul original,
atunci se poate opera att cu instane ale clasei de baz ct i cu ale
celei derivate dar optimizrile permise prin folosirea clasei Y nu vor fi
ns detectate. n general, aceste optimizri nu vor fi detectate pn n
momentul link-editrii, cnd toate modulele (corpurile metodelor,
funciilor) vor fi asamblate i legate dinamic. Doar n acest moment,
ierarhia de clase este complet vizibil pentru compilator i doar atunci
pot fi considerate optimizrile specifice clasei derivate.
ntr-o alt lucrare Calder afirm c bazat pe informaii de profil
(type feedback), prin optimizri realizate n momentul link-editrii
(macroexpandarea funciilor i execuia lor condiionat) are loc o
reducere a numrului de apeluri indirecte de funcii cu 31% [Cal94b].
n ciuda unor avantaje evidente (predictibilitate mai mare a apelurilor
directe de funcii, reducerea numrului de instruciuni executate pe o
arhitectur RISC modern) exist i unele dezavantaje i anume:
+ nu ntotdeauna prin inlining aplicat funciilor se reduce timpul
de execuie [Dav92]. O explicaie ar putea consta n expansiunea
codului dup aplicarea acestei tehnici i creterea ratei de miss
n cache-ul de instruciuni. Msurtori efectuate de cercettori
pe 8 programe de test C++ (porky, richards etc) nglobnd peste
90.000 de linii de cod, compilate cu ajutorul GNU C++ 2.6.3. pe
un procesor SuperSPARC cu sistem de operare Solaris 2.5 au
indicat o cretere medie a codului cu 9% dup aplicarea tehnicii
de inlining funciilor [Aig96].
+ eficiena metodei este ridicat dac exist o mare posibilitate de
apel repetat a respectivei funcii.
+ dependena de arhitectur [Cal94] i deci lipsa de
compatibilitate respectiv portabilitate.
Pentru o mai bun nelegere, se exemplific considernd o clas
oarecare, avnd o metod (fie foo) i dou sau mai multe obiecte din
aceast clas (fie A, B, ). Atunci apelul indirect de funcie,
determinat de apelul metodei object->foo(); poate fi convertit la un
apel direct de procedur completat cu verificarea n timpul execuiei

152 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
programului a tipului obiectului, cu avantajele i dezavantajele
amintite anterior:
if (typeof(object) == A)
object->A::foo();
else
object->foo();
U Dei programele procedurale au nevoie de mai puin spaiu pe stiv
dect cele obiectuale, adncimea stivei este destul de mic pentru
ambele tipuri de programe (9.9 - C vs 12.1 - C++) fiind puternic
determinat de domeniul aplicaiilor i tehnicile de programare
folosite (recursivitate, backtracking, programare dinamic) [Cal94].
U Operaiile cu memoria (citiri / scrieri) influeneaz semnificativ
performana arhitecturilor moderne de procesare prin penaliti
serioase n timp n cazul n care procesorul nu dispune de datele
necesare (este binecunoscut decalajul dintre performana
procesoarelor care se dubleaz la fiecare doi ani i timpul mediu de
acces la memoria principal (DRAM) care scade cu doar aproximativ
7% pe an). Mecanismele hardware moderne (memorii cache, scheme
diferite de predicie a valorilor, buffer-ele de reutilizare) contribuie la
eliminarea acestor penaliti, nemaifiind necesar accesul la memoria
principal. Programele obiectuale trimit spre execuie mai multe
instruciuni Load i Store dect programele procedurale (ns cu un
procentaj nesemnificativ, ntre 24%); comportamentul fiind ns
diferit n funcie de arhitectur (MIPS pe 32 bii, Alpha pe 64 bii).
Metodele par s necesite mai multe instruciuni Load dect celelalte
funcii C++, iar funciile apelabile indirect tind s utilizeze puin mai
multe Load-uri dect apelurile directe de funcii, cel puin n C++
(acces la tabelele de metode virtuale [Roth99]). Contribuia
semnificativ la procentajul ridicat de operaii cu memoria n C++ se
datoreaz i salvrilor / restaurrilor de regitri din timpul apelurilor i
revenirilor din proceduri; se reamintete faptul c programele
obiectuale execut mult mai multe apeluri de funcii i reveniri dect
programele procedurale.
U Programele obiectuale aloc mult mai mult memorie n heap
pentru obiectele folosite n aplicaii dect pentru variabilele dinamice
din structurile de date aferente programelor procedurale. Dimensiunea
obiectelor din programele C++ este destul de redus, ceea ce face ca
traficul cu memoria s fie extrem de ridicat. Prin timpul de via scurt
al acestor obiecte se reduce ns complexitatea interfeei aplicaiei.

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 153
Probabil c unul din principalele motive pentru care gradul de
utilizare a memoriei n programele C++ este semnificativ l reprezint
tendina programelor obiectuale de a crea i folosi componente
reutilizabile.
Un alt motiv poate fi de natur istoric. Capacitatea redus a
memoriei sistemelor din anii 70 80 (limbajul C a fost conceput de
ctre Kernigan i Ritchie n anul 1972) a condus la constrngeri
privind execuia programelor procedurale ntr-un spaiu mic de adrese
(de memorie) i alocri reduse pe stiv sau n heap, ceea ce la
limbajul C++ (mult mai nou 1983) nu mai este cazul (executabil
portabil pe arhitecturi moderne de procesare, fr prea mari
constrngeri din punct de vedere al capacitii resurselor).
Un aspect important privind diferenierea dintre limbajele C i C++
l constituie modul n care acestea asigur suportul pentru alocarea
dinamic n memoria heap. n timp ce C asigur cteva funcii
simple de bibliotec (malloc, calloc), C++ furnizeaz acest suport att
cu ajutorul funciilor de bibliotec (new, delete) ct i prin
constructori (implicii, explicii) dar i prin destructori.
Cu toate c benchmark-urile SPEC reprezint cel mai adecvat mediu
pentru testarea / simularea ideilor novatoare din domeniul arhitecturii
calculatoarelor, cele mai multe sisteme de calcul au ca platform sistemul de
operare Microsoft Windows (9x, NT, 2000, XP) cu procesor Intel din
familia x86. Multe dintre acestea execut aplicaii de uz personal
(multimedia, editare, calcul tabelar, prelucrare de imagini, email, navigare
pe Internet) i nu bazate pe cercetri tiinifice, de uz industrial, militar. n
acest sens, vor fi descrise n continuare cteva caracteristici ce privesc
aplicaiile la nivel desktop executate sub sistemul de operare WindowsNT
pe sisteme cu procesor Intel x86, comparativ cu cele aferente benchmark-
urilor SPEC95.
Un studiu sumar dezvluie cteva diferene evidente existente ntre
aplicaiile desktop i benchmark-urile tradiionale care intuitiv sugereaz
diferene att n utilizarea resurselor hardware ct i n comportamentul
programelor la nivel microarhitectural (salturi indirecte, condiionate,
utilizare funcii de bibliotec).
Dei caracterul interactiv al aplicaiilor desktop poate presupune un
comportament propriu mai puin predictibil, din punct de vedere al
prediciei instruciunilor de salt, performanele acestora sunt similare
cu cele ale programelor de test SPEC95 [Lee98], subliniind faptul c
gradul de nepredictibilitate introdus de utilizator este mai degrab la
un nivel masiv de granularitate (coarse) dect la unul care s afecteze

154 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
microarhitectura (fine). Spre exemplu, n spatele unui click de mouse
din cadrul aplicaiei Microsoft Office Winword.exe se afl chiar sute
de instruciuni de salt condiionate. Intervenia utilizatorului n acest
caz const n a spune programului ce s fac (click de mouse la
locaia (x,y) pe o anumit resurs) i nu cum s fac (cum s
trateze respectiva ntrerupere implementat n rutina de tratare a
click-ului de mouse).
Pe lng caracterul interactiv, majoritatea aplicaiilor desktop sunt
caracterizate i de o interfa grafic intuitiv, bazate pe meniuri,
pagini de proprieti, ferestre de dialog etc. n timp ce rezultatele
benchmark-urilor tradiionale constau n cteva pagini de fiiere text,
ieirile aplicaiilor desktop sunt att sub format text dar mai ales
grafic (controale de tip ActiveX, OLE, tabele Excel etc) ceea ce se
traduce la nivel microarhitectural n cod suplimentar de executat,
necesitnd resurse adiionale (structuri de date). Cu toate acestea, din
punct de vedere al cache-ului de date i al buffer-ului TLB de date
comportamentul aplicaiilor desktop este similar cu cel al benchmark-
urilor SPEC95.
n timp ce benchmark-urile tradiionale de cele mai multe ori execut
un singur task (program) la un moment dat, majoritatea aplicaiilor
desktop efectueaz i alte funcii pe lng task-ul principal (de
exemplu, desenarea unor grafice MicrosoftExcel Chart n cadrul unei
prezentri Powerpoint). Aceste caracteristici conduc la coduri
executabile mai mari i apeluri de proceduri dincolo de spaiul de
adres alocat iniial. Practic, diferena semnificativ dintre aplicaiile
desktop i programele de test SPEC95 o reprezint dimensiunea
foarte mare a codului obiect aferent primelor (de 3 pn la 10 ori mai
mare dect a celor din urm) [Lee98]. Numrul funciilor statice
existente ntr-o aplicaie i executate cel puin o dat contribuie
substanial la dimensiunea codului obiect (fiierul executabil) al
aplicaiei respective, cu implicaii defavorabile asupra performanei
(consum ridicat de resurse). Din acest punct de vedere, aplicaiile
desktop apeleaz cu cel puin un ordin de mrime mai multe funcii
statice dect programele de test SPEC95, fapt deloc surprinztor
ntruct dimensiunile funciilor sunt sensibil egale n ambele cazuri iar
codul obiect al aplicaiilor desktop este de pn la 10 ori mai mare.
Tendina execuiei programelor desktop de dispersare n mai multe
funcii crete probabilitatea de apariie a miss-urilor de capacitate i
conflict la cache-urile de instruciuni. Acelai comportament
defavorabil l prezint i TLB-ul de instruciuni [Lee98].

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 155
Multithread-ingul caracterizeaz aproape toate aplicaiile desktop
constituind i o modalitate de a masca operaiile cu latene mari (o
parte dintre ele introduse prin intervenia utilizatorului). Simulri
efectuate pe cinci aplicaii desktop reprezentative (acrord32 - cititor
de documente n format portabil, netscape - "browser" de Internet,
photoshp - pachet de editare de imagini, powerpnt - pachet util n
realizarea de prezentri, winword - procesor de texte) au artat c
patru dintre ele execut n mai mult de 97% din timp instruciuni
dintr-un singur thread, rezultnd un impact minim asupra
performanei datorat disputei ntre fire asupra resurselor [Lee98].
O alt diferen major const n faptul c aplicaiile desktop folosesc
foarte mult bibliotecile legate dinamic (DLL), multe dintre acestea
partajate ntre diferite alte aplicaii. DLL-urile cuprind servicii ale
sistemelor de operare, funcii de interfa, biblioteci grafice, funcii C
de bibliotec, etc. Utilitatea DLL-urilor const att n economisirea
spaiului de memorie precum i n crearea unei interfee standard cu
utilizatorul. Simulri realizate pe aceleai cinci aplicaii desktop
[Lee98] au demonstrat utilizarea n medie a 30 de DLL-uri dintre care
ntre 21 i 25 au fost partajate cu alte aplicaii. De asemenea, s-a
remarcat c aplicaiile desktop execut n medie 11% din
instruciunilor lor n trei biblioteci sistem (user32.dll, gdi32.dll i
kernel32.dll) n timp ce benchmark-urile SPEC'95 folosesc doar
ntdll.dll i kernel32.dll, fiecare dintre acestea contribuind cu mai puin
de 1% din totalul instruciunilor procesate de respectivele benchmark-
uri.
Pentru a determina i a nelege cum bibliotecile legate dinamic sunt
folosite de ctre aplicaiile desktop, trebuie analizai doi parametri:
lungimea unui DLL - numrul de instruciuni executate ntre apelul unui
DLL i revenirea din acesta, respectiv rezidena ntr-un DLL - numrul
de instruciuni executate din cadrul unui singur DLL pn la trecerea ntr-
altul. Bazat pe simulare a rezultat c majoritatea DLL-urilor sunt scurte i
implic apelul altor DLL-uri [Lee98]. Practic, n jumtate din apeluri
lungimea acestora este mai mic sau egal cu 45 de instruciuni iar n
95% din apeluri dimensiunea maxim a acestora este de 571 de
instruciuni. n ceea ce privete rezidena ntr-un DLL s-a observat c
majoritatea secvenelor execut mai puin de 60 de instruciuni n cadrul
unui anumit DLL nainte de a preda controlul altui DLL.
Exist cteva motive pentru care apelurile de biblioteci legate dinamic
(DLL) sunt considerate mai costisitoare dect apelurile funciilor legate
static, i anume:

156 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Apelurile DLL sunt implementate ca i apeluri indirecte de
funcii. Simulri efectuate pe cele cinci aplicaii desktop amintite
anterior [Lee98] au relevat un procentaj ridicat (n medie de 25%) de
apeluri indirecte (pure + DLL) comparativ cu unul extrem de redus
(sub 4%) obinut pe benchmark-urile SPEC'95 (vezi i subcapitolul
7.1.1 al prezentei lucrri). innd cont de concluzia lui Calder [Cal94]
care susine c programele obiectuale genereaz mai multe apeluri
indirecte datorit legrii dinamice prin polimorfism, fa de
programele procedurale, am fi tentai s credem c cele cinci aplicaii
desktop sunt n ntregime obiectuale. n realitate doar netscape,
photoshp i powerpnt sunt obiectuale (scrise n C++) n timp ce
winword i acrord32 sunt implementate n C [Lee98].
DLL-urile sunt partajate ntre aplicaii astfel nct mbuntirea
localitii instruciunilor prin algoritmi tradiionali de reordonare a
codului, statici sau dinamici, este mai dificil [Pett90]. Afirmaia are
la baz experiena i realizrile a doi cercettori n optimizare de cod,
angajai ai firmei Hewlett-Packard, Pettis i Hansen, care pornind de
la limitrile tehnicilor de optimizare tradiionale bazate pe "eliminarea
/ adugarea" unor instruciuni, au propus o tehnic nou de optimizare
global "procedure splitting", n vederea reducerii ratei de miss la
cache-ul de instruciuni i mbuntirea performanei arhitecturilor de
calcul. Avnd la baz informaii de profil culese n urma execuiei
anterioare a programelor, procedure splitting urmrete partajarea n
zone fizice de memorie distincte a basic-block-urilor executate mai
frecvent (codul util) i separat basic-block-urile executate foarte rar
sau deloc. Prin aceast separare se creeaz noi proceduri, mai scurte i
mai dense (executate n ntregime mult mai des) i care pot fi stocate
mpreun ntr-un numr mai mic de pagini de memorie dect iniial,
cnd codul util era dispersat. Basic-block-urile foarte rar executate
sunt mutate la sfritul procedurii, pagina care le cuprinde nefiind
necesar a fi ncrcat n memorie dect foarte rar. De asemenea, n
urma aplicrii acestei tehnici, la implementarea mecanismului de
memorie virtual, dimensiunea paginii de memorie poate fi aleas mai
mic, de capacitate optim ns, astfel nct s compenseze timpul
mare de acces la disc. Procedure splitting a fost implementat cu
succes n cadrul optimizatorului de cod realizat pentru procesorul PA-
RISC al companiei Hewlett-Packard [Pett90].
Apelurile frecvente de DLL-uri din cadrul altor DLL-uri necesit ca
paginile de memorie cu ambele biblioteci s fie rezidente n spaiul de
adrese aferent aplicaiei chiar dac doar o fraciune redus din aceste

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 157
pagini sunt de fapt folosite, n caz contrar crendu-se o fragmentare
intern.
Foarte pe scurt, aplicaiile desktop executate pe platform
WindowsNT cu procesor Intelx86 prezint comportamente similare cu
benchmark-urile tradiionale (SPEC'95) pentru o serie de metrici (influena
cache-ului i a buffer-ului de translatare de adrese, dimensiunea funciilor,
dimensiunea basic-block-urilor, procentajul tipurilor de instruciuni n
cadrul aplicaiilor) dar i difer substanial n cel puin dou privine:
dimensiunea codului obiect al aplicaiei respectiv procentajul semnificativ
de salturi indirecte introdus de apelurile DLL-urilor.
n continuare, subcapitolul 4.2 descrie cteva modaliti de generare a
apelurilor indirecte prin intermediul unor aplicaii originale att procedurale
ct i obiectuale, iar n subcapitolul 4.3 sunt prezentate un numr de salturi
dinamice indirecte cu caracter polimorf observate n urma simulrii
benchmark-urilor SPEC.
Capitolul de fa ncearc s investigheze cele dou "emisfere",
hardware i software, doar aparent disjuncte, n care i desfoar
activitatea cercettorii din tiina calculatoarelor. Preocuprile
programatorilor nu trebuie s vizeze doar interfaa care atrage sau diversele
artificii care fac din utilizator un simplu robot ci i implicaiile pe care
aplicaia creat o are asupra microarhitecturii. Scopul aplicaiei trebuie s fie
utilizarea cu justee att a resurselor software (biblioteci, elemente de
interfa) avute la dispoziie ct i a algoritmilor / conceptelor de
programare cunoscute (declaraii de funcii virtuale, apeluri de funcii prin
pointer chiar i acolo unde nu este cazul). n caz contrar, "rul" (a se citi n
primul rnd salturi indirecte, cod obiect masiv, resurse hardware
suplimentare) se rsfrnge asupra performanelor arhitecturii. n ce-i
privete pe proiectanii de arhitecturi, schemele propuse de acetia ar putea
fi mai eficiente dac nu ar analiza numai codul obiect al benchmark-urilor
avute la dispoziie (dezbrcat de orice semantic) ci ar privi "mai sus" spre
sursa de nivel nalt a programelor simulate.





158 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
4.2. INVESTIGAII PRIVIND GENERAREA
SALTURILOR / APELURILOR INDIRECTE PRIN
APLICAII PROCEDURALE RESPECTIV
OBIECTUALE
Pentru o mai bun nelegere a ceea ce va urma se reamintesc cteva
noiuni legate de metodele virtuale respectiv legarea static versus dinamic.
Preluat dup ali autori [Brea02], este numit legare (binding)
mecanismul prin care compilatorul genereaz cod pentru apelul unei
anumite metode (cum face legtura ntre numele metodei i codul acesteia).
Exist dou posibiliti:
U legarea static (timpurie early binding) caz n care
compilatorul i editorul de legturi fac corespondenta ntre numele
metodei i adresa acesteia din segmentul de cod. Odat fixat aceast
legtura n momentul compilrii ea este definitiv n tot timpul
rulrii programului. La nivelul cel mai de jos, legarea static
corespunde apelului direct al unei proceduri. Acesta este modul de
legare clasic folosit de toate limbajele structurate procedurale i de
limbajele obiectuale pentru metodele ne-virtuale (clasice).
U legarea dinamic (trzie late binding) situaie n care
compilatorul i editorul de legturi fac corespondena ntre numele
metodei i adresa acesteia din segmentul de cod prin intermediul unui
tabel de adrese posibile de salt. Alegerea adresei efective de apel se
face n momentul rulrii, n funcie de obiectul pentru care se
apeleaz (deci, decizia legrii este ntrziat). La nivelul cel mai de
jos, legarea dinamic corespunde apelului indirect al unei proceduri
(folosind de exemplu o instruciune de tip jal $reg pentru procesorul
MIPS). Acesta este modul de legare folosit de limbajele obiectuale
pentru metodele virtuale.
Polimorfismul, fiind un exemplu de soluie avnd la baz indirectarea,
este caracterizat de urmtoarele avantaje i dezavantaje ale acestor metode:
U avantaje: se asigur un grad de flexibilitate.
U dezavantaje: ca n orice apel indirect, se nrutesc performanele de
vitez (datorit dificultii prediciei acestor apeluri).
Pentru fiecare clas compilatorul construiete o tabel cu metodele
virtuale (la offset-uri predeterminate) ale clasei respective VMT i include
n fiecare instan (obiect) a clasei un pointer VMT_ptr spre tabela VMT
corespunztoare clasei (vezi figura 4.1). Pentru o metod ne-virtual legarea
este necondiionat static iar pentru o metod virtual legarea este

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 159
necondiionat dinamic (att la apel direct prin obiect sau prin pointer la
obiect ct i la apel din cadrul altor metode) [Brea02].
ntruct target-urile apelurilor de funcii virtuale sunt determinate de
tipul obiectului este de neles faptul c metodele virtuale care folosesc ca
referin acelai obiect sunt puternic corelate (se gsesc n aceeai tabela
VMT). n consecin, de ndat ce prima adres destinaie aferent unui apel
de metod virtual este cunoscut, urmtoarele apeluri de metode virtuale
generate de acelai obiect pot fi cu uurin prezise prin tehnici bazate pe
istorie (vezi structura TargetCache din subcapitolul 5.2.1). ns predicia
adresei destinaie aferent primului apel indirect este foarte dificil, ansele
de succes ale schemelor bazate pe istorie fiind doar dac obiectele sunt
ordonate dup tip, ceea ce nu se ntmpl ntotdeauna; ordinea obiectelor
poate fi aleatoare cazul benchmark-ului richards (simulator de sistem de
operare) sau dependent de intrarea aplicaiei cazul benchmark-urilor
porky respectiv ixx (parser IDL) [Roth99].


Figura 4.1 Tabelele VMT aferente aplicaiei propuse (motenire_simpl_3.cpp)
O abordare complementar schemei de predicie a salturilor indirecte
bazate pe istorie const n pre-calcularea target-urilor apelurilor de funcii
virtuale (v-call) folosindu-se dependenele dintre instruciunile de tip Load
i cele de salt indirect. Tehnica identific dinamic secvene de operaii ce
concur la determinarea respectivelor target-uri. La ntlnirea primei
instruciuni din secven un mic motor de execuie speculativ i agresiv
efectueaz n avans restul operaiilor. Adresa destinaie precalculat astfel
este memorat, fiind folosit abia cnd n secvena de instruciuni ce
urmeaz se ajunge la saltul indirect care trebuie predicionat [Roth99].

160 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Acurateea sczut generat de schemele de predicie bazate pe istorie
n cazul apelurilor indirecte de funcii este datorat dificultii de a identifica
cu precizie aceste apeluri n momentul prediciei; practic, salturile
condiionate nu reflect contextul exact n care apar salturile indirecte.
Folosind informaii extrase din momentul execuiei programului
mecanismul de pre-calculare a target-urilor instruciunilor de salt
indirect se bazeaz mai degrab pe instruciunile care concur la
calcularea acestui target dect pe adresele destinaie anterioare ale
respectivei instruciuni de salt (vezi cazul Target Cache-ului).
Pre-calcularea target-urilor necesit o perioad scurt de nvare
i poate fi aplicat cu succes chiar i n lipsa informaiilor statistice de
corelare. Dei este o tehnic de uz general care poate fi aplicat cu succes
oricrui tip de instruciune, pre-calcularea target-urilor apelurilor de metode
virtuale se bazeaz pe o implementare hardware simpl, care extinde
mecanismul de prefetch aplicat structurilor de date cu legturi [Roth98].
Prin aceast metod crete acurateea de predicie fa de un predictor BTB
cu 46%, iar fa de unul corelat pe dou niveluri cu 24% [Roth99].


Figura 4.2 Mecanismul de pre-calculare a adreselor destinaie aferente apelurilor
de metode virtuale
Polimorfismul permite programatorului tratarea uniform a unui
tablou de obiecte de clase diferite (Base i Derived n exemplul din figura
4.2., similare cu CBaza i CDerivata din aplicaia motenire_simpl3.cpp
(vezi figura 4.1) sau Back respectiv Dame din aplicaia
motenire_simpl1.cpp) i folosirea apelurilor de metode virtuale pentru
alegerea corect a funciilor n fiecare caz n parte. Practic legarea dinamic
realizat prin polimorfism [Brea02] se traduce prin accesarea tabelei de
metode virtuale folosind o secven de trei instruciuni load dependente

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 161
urmate de un apel indirect de funcie (mecanism numit OVFC [Roth99],
vezi figura 4.2).
Mecanismul de pre-calculare cuprinde trei componente principale:
primul este responsabil cu detecia dependenelor reale de date dintre
instruciunile load precum i dintre ultima instruciune load i cea de salt
indirect, urmat de reprezentarea intern a acestor dependene. A doua
component o reprezint un motor simplu de execuie care folosete
reprezentarea intern a dependenelor de date pentru procesarea anticipat a
instruciunilor din lanul care se ncheie cu instruciunea de salt indirect.
Ultima component colecteaz rezultatele anterior calculate, n principal
adresa destinaie a instruciunii de salt indirect i o pred structurii de
predicie principale din cadrul procesorului fiind necesar abia n momentul
execuiei efective a acesteia.
Pe exemplul din figura 4.2, primul Load (I3) acceseaz adresa de baz
a obiectului (O), al doilea (I4) folosete adresa de baz a acestuia pentru a
accesa tabela metodelor virtuale VMT (V). De la deplasamentul
corespunztor din VMT, cu cea de-a treia instruciune de tip Load (I5) este
preluat adresa metodei virtuale (F) care este utilizat n apelul indirect (C).
Secvenele OVFC corespondente metodelor virtuale Valid() i Print() sunt
ilustrate cu litere aldine n figura 4.2. De asemenea, puin mai trziu pe
parcursul acestui capitol, s-a prezentat mecanismul OVFC corespondent
metodei met() virtual i a destructorului virtual din cadrul aplicaiei
propuse de autor motenire_simpl3.cpp.
De ndat ce instruciunea I3 (O) se ncheie, se consult structura
intern de reprezentare a dependenelor i se execut anticipat lanul de
instruciuni I4I6 (VFC). Rezultatul precalculat constituie adresa destinaie
a instruciunii care urmeaz lui I6 (I50 n acest exemplu).
Se observ c ambele secvene VFC folosesc referina la acelai obiect
O. Astfel, o singur secven de acest gen poate fi ataat dinamic mai
multor obiecte, folosind instruciuni condiionate. ntruct apelurile
metodelor virtuale (n exemplul dat) se refer la un singur obiect
mecanismul se numete pre-calculare simpl a target-urilor. Dac n loc de
obiecte izolate se folosesc tablouri sau liste de obiecte (structuri de date cu
legturi) mecanismul se numete pre-calculare "n-lookahead", unde n
reprezint indexul obiectului n respectiva structur. n acest caz, adresa
obiectului aflat la un anumit deplasament poate fi i ea prezis pornind de la
adresa de baz a tabloului de obiecte i spaiul de memorie consumat de
fiecare obiect.
Ineficiena uneori a mecanismului de pre-calculare a target-urilor
apelurilor de metode virtuale se datoreaz fie timpului insuficient de

162 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
calculare a acestuia (nu exist suficiente instruciuni ntre apel i referina la
obiectul respectiv), fie incapacitii de a prediciona corect adresa
urmtorului obiect.
n continuare sunt prezentate integral sau sumar cteva programe de
test simple propuse de autor [Flo03a], care relev caracteristicile de
program prezente n programele de nivel nalt procedurale, sau concepte
fundamentale ale programrii orientate pe obiecte care conduc la
generarea salturilor indirecte la nivel de cod asamblare / obiect.
Un prim exemplu ilustreaz cum se reflect o motenire simpl la
nivelul codului obiect. Aplicaia motenire_simpl1.cpp
(motenire_simpl1.s dup compilare) rezolv prin backtracking recursiv
dou probleme. Prima se refer la generarea permutrilor de n elemente iar a
doua problem urmrete aezarea a n regine pe tabla de ah fr ca ele s se
atace. Este implementat o clas de baz back avnd ca atribute (membre)
stiva cu soluii, dimensiunea stivei (n-ul citit de la tastatur), iar ca metode
rutina principal de execuie a backtracking-ului (compl), metoda de afiare
a soluiilor (show), metoda care testeaz dac soluia parial este valid
(valid), metoda care indic dac s-a ajuns la ultimul element de pe stiv
(final), ultimele trei metode fiind declarate virtuale. Din clasa de baz se
deriveaz clasa dame care motenete membre (atribute, metode) ale clasei
back i suprancarc cele dou metode virtuale cu codul propriei aplicaii.


Figura 4.3. Tabelele VMT aferente aplicaiei motenire_simpl1.cpp
Declaraiile de obiecte pot fi statice sau dinamice. Rezultatele obinute
n urma compilrii determin prezena a 3 funcii apelabile indirect, datorate

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 163
n opinia autorului, celor trei apeluri de metode declarate virtuale din
metoda back::compl. Din punct de vedere dinamic, cele 3 salturi indirecte
statice determin 322.561 salturi indirecte dinamice (dac se consider o
tabl de ah obinuit n=8). De asemenea, numrul instruciunilor executate
este 302.538.522, instruciuni de salt dinamice 55.529.324(statice doar 585)
i instruciuni de revenire din subrutin 3.899.790 (statice - 57).
Surprinztor la o prim vedere, rezultatele statistice (parametrul
numr salturi indirecte statice) obinute n urma compilrii difer puin de
cele obinute dup simularea pe arhitectura SimpleScalar a codului obiect al
respectivei aplicaii. Cu toate acestea ele sunt justificate. Practic, metoda
final declarat virtual n clasa de baz back nu va fi suprancrcat n clasa
derivat (dame). Astfel, datorit acestei declaraii, la apelul metodei final n
cadrul metodei compl (rutina principal din aplicaie), la compilare va fi
generat un salt indirect (jal $31,$2 trei n total, dou datorate celorlalte
metode apelate show i valid). n realitate, cnd va fi executat metoda
compl, apelat printr-un obiect al clasei derivate nu se va apela alt metod
final dect tot cea din clasa de baz (identic ca ntr-o legare static final
nevirtual). Practic n statistica generat dinamic prin execuia acestui
benchmark pe arhitectura SimpleScalar vor rezulta din 14 salturi indirecte
statice (generate dup faza de link-editare i execuie cu n=4) trei datorate
apelurilor virtuale valid, final i show (la momentul compilrii), celelalte
11 fiind datorate funciilor de bibliotec. O cauz a acestei situaii poate
consta n optimizrile realizate de compilatorul xgcc n momentul link-
editrii (asemeni in-lining-ului coroborat cu verificarea tipului obiectelor din
[Cal94b], vezi i subcapitolul 4.1). Faptul c metoda final, dei virtual este
doar motenit i nesuprancrcat n clasa derivat (dame), este reflectat n
tabela metodelor virtuale aferent clasei dame (vezi figura 4.3),
constituindu-se ntr-un real suport pentru compilator ca n momentul
execuiei apelul indirect generat de respectiva metod s se transforme ntr-
unul direct. Tehnica de optimizare static care realizeaz acest lucru se
numete "analiza ierarhic a claselor" [Aig96]. Evident n acest caz este
trivial declaraia metodei final ca virtual, ns ea a fost introdus i pentru
extinderea aplicaiei cu alte clase pentru rezolvarea aranjamentelor,
combinrilor, produsului cartezian i a altor aplicaii reprezentative, dar n
care metoda final va trebui suprancrcat.






164 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

*************Secven de cod din motenire_simpl1.cpp************
class back{
public:
int n,s[10];
back *x;
back();
void compl(int);
virtual int valid(int );
virtual int final(int );
virtual void show(int );
};

class dame:public back{
public:
dame():back(){};
int valid(int );
void show(int );
};

void back::compl(int p){
int v;
for(v=1;v<=n;v++){
s[p]=v;
if(valid(p))
if(final(p))show(p);
else compl(p+1);
}
}

void main(){

back* permutari;
permutari = new back;

permutari->compl(0);

dame *tabla;
tabla = new dame;
tabla->compl(0);

}

******************Secven de cod din motenire_simpl1.s*********
.ent compl__4backi
compl__4backi:
subu $sp,$sp,40 # alocare spaiu pe stiv i salvare adres de revenire, pointer de
cadru, eventual ali parametrii
sw $31,32($sp)
sw $fp,28($sp)
sw $16,24($sp)
move $fp,$sp
move $16,$4
sw $5,44($fp)

$L58:
lw $2,44($fp)
move $3,$2
sll $2,$3,2
addu $3,$2,$16
addu $2,$3,4
move $3,$2
lw $2,16($fp)
sw $2,0($3)
lw $3,48($16)
addu $2,$3,8
move $3,$2
move $2,$3
lh $3,0($2)
addu $4,$16,$3
lw $2,4($2)
lw $5,44($fp)
jal $31,$2 # apel virtual metoda valid(p) n sursa .cpp
sltu $3,$0,$2
move $2,$3
Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 165
andi $3,$2,0x00ff
beq $3,$0,$L59
lw $3,48($16)
addu $2,$3,16
move $3,$2
move $2,$3
lh $3,0($2)
addu $4,$16,$3
lw $2,4($2)
lw $5,44($fp)
jal $31,$2 # apel virtual metoda final(p) n programul surs
sltu $3,$0,$2
move $2,$3
andi $3,$2,0x00ff
beq $3,$0,$L60
lw $3,48($16)
addu $2,$3,24
move $3,$2
move $2,$3
lh $3,0($2)
addu $4,$16,$3
lw $2,4($2)
lw $5,44($fp)
jal $31,$2 # apel virtual metoda show(p) n sursa .cpp
j $L61
$L60:


Cele trei apeluri indirecte apar doar n metoda compl() a clasei back
(de baz) deoarece aceasta este motenit i legat static n clasa derivat
(dame). Dac compl() ar fi fost virtual declarat n clasa de baz i
suprancrcat n clasa derivat atunci cele trei metode componente (valid,
final i show) ar fi generat un numr dublu de instruciuni de salt indirect n
funcie de numrul de obiecte sau pointeri la obiecte din cele dou clase. Un
exemplu n acest sens l constituie programul de test back_.cpp care extinde
problema rezolvat n motenire_simpl1.cpp cu o nou clas (cinci).
Ulterior am analizat problema eliminnd declaraia ca virtual a
metodei final. n acest sens, dup compilare a rezultat n locul saltului
indirect anterior (jal $31, $2) un apel direct de subrutin (jal
final__4backi), deci statistic au fost generate la nivel de cod asamblare doar
dou salturi indirecte dintr-un total de 13 statice (n aceleai condiii ca mai
sus). Evident rezultatele dinamice ale simulrii au fost identice cu cele
obinute anterior (cnd metoda final era virtual).
Metodele clasei cinci ncearc s rezolve urmtoarea problem: s se
genereze toate numerele de 5 cifre care dau prin suma cifrelor valoarea 20.
Dintr-un total de 22 de salturi statice indirecte (rezultate dup link-editare)
doar 11 sunt generate dup faza de compilare (datorate metodelor compl,
final, valid, show declarate virtuale n clasa de baz - back i
suprancrcate n clasa derivat - cinci). Dinamic au fost generate 145236

166 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
instruciuni de salt indirect. Declaraia a doar 3 pointeri la obiecte din 3
clase diferite pe parcursul execuiei programului implic un grad ridicat de
localitate a valorii aferent instruciunilor de salt indirect dovedind astfel
predictibilitatea sporit a acestora (vezi rezultatele grafice din capitolul
7.1.2).
O alt aplicaie elocvent, simpl i tot orientat obiect, se bazeaz pe
conceptul de motenire simpl, polimorfism, conversii de tip ntre clase
derivate, alocare dinamic de obiecte i utilizare constructori /
destructori n contextul derivrii. ntruct o clas derivat poate fi privit
ca o extensie a clasei de baz C++ se permite conversia unui obiect de clas
derivat la un obiect al clasei de baz iar pointerii la clasa de baz pot ine
adresa unei instane a clasei derivate [Brea02]. Prin legarea dinamic pe care
o presupune, polimorfismul permite o tratare uniform a masivelor
eterogene tablouri, liste de obiecte. De asemenea, la distrugerea unui obiect
dintr-o clas derivat, nti se execut corpul destructorului clasei derivate i
abia apoi destructorul clasei de baz.
Aplicaia motenire_simpl3.cpp[.s] realizeaz tratarea uniform a
unui tablou de obiecte, alocate dinamic, prin polimorfism. Clasa Baza
cuprinde un constructor explicit simplu (o atribuire aplicat membrului
clasei), o metod virtual (un banal printf) i un destructor virtual (tot un
printf).
Clasa Derivat, pe lng un alt atribut cuprinde aceeai metod i un
destructor similar, dar nevirtuale. Programul principal presupune existena
unui tablou de 6 obiecte dinamice care parial aparin clasei de baz i
parial clasei derivate. Dimensiunea tabloului poate fi parametrizabil, cu
ct acest parametru este mai mare cu att numrul de apeluri indirecte de
instruciuni dinamice este mai mare. Urmeaz apoi dou bucle de program
n care fiecare obiect creat apeleaz metoda met aferent clasei din care
face parte iar ulterior este distrus.
n urma compilrii rezult dou apeluri indirecte de funcii statice n
fiierul .s i 11 astfel de apeluri dup simularea codului obiect pe arhitectura
SimpleScalar. Primul apel jal $31,$2 se datoreaz apelului metodei virtuale
met aferent obiectelor dinamice anterior definite n bucla for. Apelul
indirect de funcie se justific prin necunoaterea exact n momentul
compilrii a metodei care va fi executat: cea din clasa derivat sau cea de
baz. Al doilea apel jal $31,$2 apare n cazul apelrii destructorilor virtuali
(nu se cunoate n momentul compilrii din ce clas face parte, iar n cazul
n care obiectul aparine clasei derivate vor fi apelai destructorii ambelor
clase nti cel al clasei derivate i apoi cel al clasei de baz). Din punct de
vedere dinamic apelurile statice indirecte determin 72 de salturi indirecte

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 167

dinamice. Rezultatele statistice bazate pe simularea codului obiect (opiune
de compilare -o) prezint cu 9 apeluri statice mai mult dect s-a determinat
n urma compilrii (opiune de compilare -S), probabil datorate apelurilor
funciilor de bibliotec.
n continuare se descrie comparativ codul surs - de nivel nalt (.cpp)
i cel asamblare - apropiat de arhitectur (.s) rezultat n urma compilrii,
pentru a ilustra cum legarea dinamic (binding) realizat prin
polimorfism genereaz apeluri indirecte de funcii. Asupra codului obiect
obinut se poate aplica cu succes metoda de predicie a target-urilor
apelurilor de funcii virtuale prin pre-calcularea adresei destinaie
bazat pe dependene de date [Roth99]. Sunt prezentate doar secvenele de
cod cele mai reprezentative.

*************Secven de cod din motenire_simpl3.cpp************
#include <stdio.h>
class Baza{
public:
int x;
Baza(int x0) {x=x0;}
virtual ~Baza() { printf("\nDestructor clasa de baza
(%d)",x);}
virtual met() { printf("\n Metoda clasa de baza
(%d)",x);}
};

class Derivata:public Baza
{
public:
int y;
Derivata(int x0, int y0):Baza(x0) {y=y0;}
~Derivata() { printf("Destructor clasa derivata (%d,
%d)", x, y);}
met(){printf("\nMetoda clasa derivata (%d, %d)", x,
y);}
};
void main()
{
Baza *tabel[6];
tabel[0]=new Baza(1);
tabel[1]=new Baza(2);
tabel[2]=new Derivata(3, 4);
tabel[3]=new Baza(5);
tabel[4]=new Derivata(6, 7);
tabel[5]=new Derivata(8, 9);

for(int k=0; k<6; k++)
tabel[k]->met();

for(k=0; k<6; k++)
delete tabel[k];
}
**************Secven de cod din motenire_simpl3.s*************
.text

main: # programul principal n care are loc alocarea dinamic de memorie pentru fiecare obiect prin intermediul
constructorului explicit

subu $sp,$sp,56 # alocare de spaiu pe stiv
sw $31,52($sp) # ntruct apelurile de funcii salveaz n r31 adresa de revenire n programul
apelant, n cazul apelurilor
168 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
# recursive r31 trebuie salvat n stiv
sw $fp,48($sp)
move $fp,$sp
jal __main
li $4,0x00000008 # 8
jal __builtin_new
move $4,$2
li $5,0x00000001 # 1
jal __4Bazai # obiect din clasa de baz
sw $2,16($fp)

li $4,0x0000000c # 12
jal __builtin_new
move $4,$2
li $5,0x00000003 # 3
li $6,0x00000004 # 4
jal __8Derivataii # obiect din clasa derivat
sw $2,24($fp)

$L48:
lw $2,40($fp)
move $3,$2
sll $2,$3,2
addu $3,$fp,16
addu $2,$2,$3
move $3,$2
lw $2,0($3) # registrul $2 va conine adresa de baz a obiectului - O
met

lw $3,4($2) # registrul $3 va conine adresa de baz a tabelei VMT - V
met

# (aflat la un deplasament fa de adresa obiectului) vezi figura
# 2.1
addu $2,$3,16 # metoda virtual este la un deplasament de 16o
# tabel[k]->met();
move $3,$2
move $2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,2
addu $4,$fp,16
addu $3,$3,$4
move $4,$3
lh $3,0($2)
lw $4,0($4)
addu $3,$3,$4
lw $2,4($2) # registrul $2 va conine adresa metodei obiectului care va fi
# apelat - F
met

move $4,$3
jal $31,$2 # apelul indirect al metodei virtuale - C
met


$L52:
lw $2,40($fp)
move $3,$2
sll $2,$3,2
addu $3,$fp,16
addu $2,$2,$3
move $3,$2
lw $2,0($3)
beq $2,$0,$L53
lw $2,40($fp)
move $3,$2
sll $2,$3,2

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 169

addu $3,$fp,16
addu $2,$2,$3
move $3,$2
lw $2,0($3) # registrul $2 va conine adresa de baz a obiectului - O
D

lw $3,4($2) # registrul $3 va conine adresa de baz a tabelei VMT - V
D

# (aflat la un # deplasament fa de adresa obiectului) vezi
# figura 2.1
addu $2,$3,8 # metoda virtual este la un deplasament de 8o delete tabel[k];
move $3,$2
move $2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,2
addu $4,$fp,16
addu $3,$3,$4
move $4,$3
lh $3,0($2)
lw $4,0($4)
addu $3,$3,$4
lw $2,4($2) # registrul $2 va conine adresa Destructorului de obiect care va
# fi apelat - F
D

move $4,$3
li $5,0x00000003 # 3
jal $31,$2 # apelul indirect al destructorului virtuale - C
D



A treia aplicaie exemplific un apel indirect de funcie prin pointer
(cazul aplicaiilor de sortare selectate printr-o construcie de tip
switch/case). Aplicaia sorteaz aleator (pe baza unui contor generat de o
funcie) printr-una din metodele clasice de sortare implementate Bubblesort,
Quicksort, SelectionSort, InsertionSort. n urma compilrii au rezultat 5
apeluri indirecte statice de funcie la apelul unor funcii prin pointeri,
construcii de tipul switch/case (n aplicaia de nivel nalt C). Diferena de la
5 apeluri statice de funcii (obinute dup faza de compilare) la 14 apeluri
statice (generate dup link-editare) se datoreaz apelului indirect a altor
funcii de bibliotec folosite n cadrul aplicaiei (printf, scanf, rand). Din
punct de vedere dinamic numrul apelurilor indirecte de funcii a fost 1035.
n continuare se vor prezenta comparativ, exemplificndu-se la nivel
de instruciune, secvene din codul surs .c (de nivel nalt) versus .s
(asamblare) al aplicaiei sort.[c,s].






170 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
*****************Secven de cod din sort.c********************
int Nr_metoda;
... // alte declaraii: variabile i
prototipuri de funcii
int AfisareMetoda(int (*p)());
int GenMetoda();
...
int AfisareMetoda(int (*p)())
{
int x=p();
switch (x){
case 0: printf("\nBubbleSort");
break;
case 1: printf("\nQuickSort");
break;
case 2: printf("\nSelectSort");
break;
case 3: printf("\nInsertSort");
break;
case 4:
printf("\nInsertSortModif");
break;
}
Nr_metoda=x;
return 0;
}

int GenMetoda(){
return rand() % 5;
}

void main()
{
int i, x, k, nr_sort;
printf("\nNr sortari = ");
scanf("%d",&nr_sort);
for (k=0; k<nr_sort; k++)
{
...
AfisareMetoda(GenMetoda);
... // apelul diverselor metode de
sortare
}
}

********************Secven de cod din sort.s********************
.align 2
$LC1: # stocarea n zona de date a adreselor de mesaje: numele funciilor
.ascii "\n"
.ascii "BubbleSort\000"
.align 2
$LC2:
.ascii "\n"
.ascii "QuickSort\000"
.align 2
$LC3: .ascii "\n"
.ascii "SelectSort\000"
.align 2
$LC4:
.ascii "\n"
.ascii "InsertSort\000"
.align 2
$LC5:
.ascii "\n"
.ascii "InsertSortModif\000"
.text # declararea numelui funciilor ca pointer global (n acest
# caz AfisareMetoda)
.align 2
.globl AfisareMetoda
.align 2
$LC6:
.ascii "\n"
.ascii "Nr sortari = \000" # mesaj folosit n cadrul funciei

.ent AfisareMetoda

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 171
AfisareMetoda:
subu $sp,$sp,40 # alocare spaiu pe stiv i salvare parametri:
sw $31,32($sp) # adresa de revenire n programul apelant - $31
sw $fp,28($sp) # frame pointer-ul
sw $16,24($sp)
move $fp,$sp
sw $4,40($fp) # salvare pe stiv a parametrului funciei ($4): adresa
# funciei GenMetoda
lw $16,40($fp) # preluare din stiv n registrul $16 a adresei funciei
# GenMetoda n vederea apelului indirect de funcie
jal $31,$16 # apelul este indirect pentru c n momentul compilrii din
# punct de vedere al metodei AfiareMetoda nu este
# cunocut exact numele funciei, ci doar adresa acesteia.
sw $2,16($fp) # La revenirea din funcia GenMetoda rezutatul acesteia,
# aflat n registrul $2 [Flo03] va fi salvat n stiv. Acesta
# va reprezenta pentru AfisareMetoda o opiune de
# selecie n cazul mecanismului switch/case.
lw $2,16($fp)
sltu $3,$2,5 # Exist 5 opiuni de sortare: de la 0 la 4. Se compar dac
# rezultatul funciei GenMetoda se afl printre cele 5
# valori posibile
beq $3,$0,$L11 # n caz contrar efectundu-se salt la $L11 ieirea din
# funcia AfisareMetoda.
lw $2,16($fp)
move $3,$2
sll $2,$3,2 # Calcul deplasament fa de adresa de baz a instruciunii
# switch (adresele instruciunilor fiind pe 4 octei vezi
# directivele .word ncepnd cu adresa $L10).
# Deplasamentul va fi multiplu de 4.
la $3,$L10 # n $3 se ncarc adresa de baz a instruciunii switch
# aferent primului case:
addu $2,$2,$3 # Calcul adres exact instruciune de selecie.
move $3,$2
lw $2,0($3) # Preluarea de la adresa anterior determinat a
# instruciunii de selecie efective - fie case 3:
j $2 # Execuie salt necondiionat de la PC-ul instruciunii
# determinat anterior.
.rdata
.align 3
.align 2
$L10:
.word $L5 # Adresele la care se gsesc parametrii de afiare pentru
# fiecare din cazuri
.word $L6
.word $L7
.word $L8
.word $L9
.text
$L5:
la $4,$LC1
jal printf # Apelul funciei de bibliotec printf dup ncrcarea n
# prealabil n $4 a parametriilor de afiare
j $L4 # Salt necondiionat la ieirea din funcia AfisareMetoda.
$L6:
la $4,$LC2
jal printf
j $L4
$L7:
la $4,$LC3

172 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

jal printf
j $L4
$L8:
la $4,$LC4
jal printf
j $L4
$L9:
la $4,$LC5
jal printf
j $L4
$L11:
$L4:
lw $2,16($fp) # rezultatul returnat de funcia GenMetoda aflat pe stiv
# este adus n $2 i
sw $2,Nr_metoda # stocat n memorie n variabila global Nr_metoda
move $2,$0 # rezultatul returnat de AfisareMetoda (adic 0) se va
# depune n $2.
j $L3
$L3:
move $sp,$fp # revenire din funcia AfisareMetoda.
lw $31,32($sp) # preluare din stiv a adresei de revenire n programul
# apelant
lw $fp,28($sp)
lw $16,24($sp)
addu $sp,$sp,40
j $31
.end AfisareMetoda

main:

la $4,GenMetoda # pregtire parametrii de apel funcie AfisareMetoda.
jal AfisareMetoda
lw $2,Nr_metoda # la revenirea din funcie se citete variabila Nr_metoda
# necesar ulterior.


Construciile de tip switch/case sunt foarte des utilizate n fazele de
analiz (lexical, sintactic) componente ale compilatoarelor. ntruct
schemele de predicie bazate pe istorie, focalizate pe mbuntirea acurateii
de predicie prin optimizarea algoritmilor sau varierea numrului de
instruciuni de salt care determin contextul de apariie al saltului, sunt
ineficiente n cazul acestor construcii, a fost propus un nou mecanism Case
Block Table (CBT) menit att s reduc numrul instruciunilor de salt
greit predicionate ct i numrul instruciunilor execuate dinamic [Kae97].
CBT folosete valoarea variabilei de selecie (fie x n instruciunea switch
(x)), pentru a gsi adresa exact a urmtoarei instruciuni (blocul case care
se va executa). Deoarece CBT nregistreaz comportamentul anterior al
fiecrui bloc, asociind adresei destinaie a instruciunii de salt (switch)
valoarea variabilei care determin selecia unui anumit bloc, structura se
dovedete a fi un predictor optimal dup ce fiecare bloc a fost accesat cel
puin o dat.
Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 173
Pentru fiecare bloc case va exista o intrare unic n CBT aferent
fiecrei valori unice de selecie. O intrare n CBT este alctuit din adresa de
start a blocurilor (adresa instruciunii switch), valoarea operandului de
selecie i adresa destinaie a saltului (adresa exact a blocului case care se
va executa n continuare). CBT este accesat n momentul n care este
recunoscut adresa de nceput a unei construcii switch/case. n tabela CBT
are loc o cutare asociativ dup adresa instruciunii de salt switch i
valoarea operandului de selecie. n caz de hit se execut un salt
necondiionat la adresa int (a noului bloc) din locaia corespondent din
CBT.
Pentru a permite structurii CBT s identifice corect adresa de intrare i
ieire n / din construcia switch/case, setul de instruciuni al procesorului
trebuie mbogit cu dou instruciuni:
BEGINCASE(VARADDR) unde VARADDR reprezint
numele variabilei (operandului de selecie) folosit pentru cutarea
n tabela CBT. Funcional nu realizeaz nimic ns servete la
identificarea adresei de start a construciei switch/case.
ENDCASE(TARGADDR) unde TARGADDR specific adresa
de ieire din construcia switch/case. Funcional nu realizeaz
nimic.
Instruciunile de salt condiionat existente n interiorul construciei
switch/case compilate, delimitate de BEGINCASE i ENDCASE, nu vor fi
predicionate cu predictorul folosit n mod obinuit, n cazul unei cutri cu
hit n tabela CBT acestea fiind evitate prin bypassing, prevenind astfel
predictorul s fac un numr suplimentar de predicii greite. n caz de miss
dup execuia instruciunilor de salt condiionat i aflarea adresei destinaie
a noului bloc case aceasta va fi introdus mpreun cu adresa instruciunii
BEGINCASE i valoarea operandului de selecie ntr-o locaie din CBT.
Rezultate statistice bazate pe simulare obinute pe trei dintre
benchmark-urile SPEC95 (gcc, li, espresso), caracterizate de un procentaj
ridicat de construcii switch/case, au determinat o reducere a numrului de
predicii greite cu 4.5% iar a numrului de instruciuni cu 9%, mbuntind
astfel performana [Kae97]. Dezavantajul utilizrii tabelei CBT l constituie
indisponibilitatea valorii operandului de selecie la timp pentru extragerea
din cache a instruciunii din subcazul target corespunztor, n cazul
procesoarelor superscalare cu execuie speculativ.
O soluie alternativ pentru predicia construciilor switch/case poate
consta n utilizarea unei tabele de salturi care s stocheze target-urile
fiecrui subcaz n parte, tabela fiind indexat cu valoarea operandului de

174 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
selecie. Avantajul CBT fa de aceast structur const doar n reducerea
cii de execuie a programului.
ntruct sistemele dedicate n timp real cunosc o larg rspndire la ora
actual iar propriile aplicaii implementate software ruleaz pe procesoare
cu puteri de calcul limitate, optimizarea codului devine o necesitate. Cteva
din aceste optimizri vizeaz i construciile switch/case.
Exemplul anterior (aplicaia sort.[c,s]) arat cum instruciunea de
selecie multipl switch/case genereaz salturi indirecte n programele
procedurale. n continuare se va arta tot bazat pe exemple concrete cum o
aceeai instruciune se comport diferit din punct de vedere al codului
asamblare generat n urma compilrii, n funcie de numrul de opiuni
(cazuri ce trebuiesc tratate).


Figura 4.4. Comportament diferit al construciei switch/case din punct de vedere
al generrii statice a salturilor indirecte

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 175
Astfel, dac instruciunea de selecie multipl ofer mai mult de 5
ramuri posibile (cazurile testate nu cuprind o situaie implicit default), n
codul limbaj de asamblare rezultat apare o instruciune de salt indirect, n
caz contrar aceasta fiind nlocuit de o secven de salturi condiionate.
Compilarea surselor s-a fcut cu GNU C++ 2.6.3. i opiunea de optimizare
O3 pe un procesor Intel80x86 i sistem de operare Linux Red Hat 7.3.
Opiunea O3 pe lng reducerea dimensiunii codului i a timpului de
execuie permite inlining-ul aplicat funciilor i aplicarea delay slot-ului
pentru instruciunile de salt (f_inline_functions, f_delayed_branch).
Semantica instruciunii switch/case se traduce n limbaj de
asamblare ntr-o secven de cel puin dou instruciuni: una de ncrcare (li
$3, 0x3) respectiv una de salt condiionat (beq $2, $3, $L31) vezi figura
4.4. Este de neles atunci c, la un numr mare de opiuni numrul
instruciunilor de executat (introduse prin aceste opiuni) se dubleaz.
Problema se poate rezolva prin scrierea mult mai generic a secvenei de
cod, introducndu-se ns n locul instruciunilor de salt condiionat una de
salt indirect i a unui tablou de adrese de subcazuri n memoria de date
aferent aplicaiei. Pragul de 5 ramuri ale instruciunii de selecie a fost ales
ntruct, pn la inclusiv 4, numrul instruciunilor folosite pentru emularea
construciei switch/case a fost mai mic sau egal dect numrul
instruciunilor din secvena generic (cu salt indirect vezi figura 4.4(a, b)).
Practic preul genericitii aplicaiei la nivel nalt se pltete la nivelul
codului obiect ntruct salturile indirecte sunt foarte dificil de predicionat i
mai mult, o singur instan static a acestora poate determina i 6000 de
instane dinamice (cazul benchmark-ului go.ss din SPEC95 [Flo04,
Dri98a]).
Privind prin prisma construciei switch/case cu cel mult 4 opiuni, n
care compilatorul genereaz o cascad de instruciuni if-else-if pentru
compararea variabilei de selecie cu adresa fiecrui caz n parte, este
justificat ncercarea de optimizare a codului prin amplasarea cazului cel
mai frecvent executat pe prima poziie n lista de opiuni. n aceast situaie
numrul de comparaii efectuate este automat diminuat. Identificarea celui
mai frecvent caz se poate face cu ajutorul informaiilor de profil. Un
exemplu n care aceast tehnic de optimizare ar avea realmente succes este
cazul benchmark-ului SPEC95 li.ss n care funcia livecar conine o
instruciune de selecie multipl cu un caz (corespondent tipului LIST) care
este accesat cu o frecven de peste 80% [Watt01].
O metod de optimizare bazat pe reducerea numrului de apeluri
indirecte prin transformarea acestora n salturi condiionate, folosit n
situaia existenei unui numr suficient de mare de ramuri (>4) ale

176 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
instruciunii de selecie multipl const n imbricarea construciilor
switch/case. Cazurile frecvente sunt plasate ca i ramuri (efective) ale
instruciunii de selecie multipl, n timp ce cazurile mai puin frecvente sunt
tratate pe varianta implicit printr-o nou construcie switch/case (vezi
figura 4.5).


Figura 4.5. Separarea cazurilor frecvente de cele mai puin frecvente prin
imbricarea construciilor switch/case
n situaia n care construcia de baz switch/case (neoptimizat) ar
avea cel mult 8 ramuri atunci prin optimizarea propus anterior s-ar putea
elimina cu succes saltul indirect, fiind nlocuit cu salturi condiionate.
La o prim vedere pot prea surprinztoare rezultatele obinute dup
compilarea respectiv simularea execuiei codului obiect pe arhitectura
SimpleScalar a unui program de test extrem de simplu care cuprinde doar
funcia main i care nu face efectiv nimic main{}. Codul asamblare salveaz
n stiv frame pointer-ul i adresa de revenire n sistemul de operare
(contextul din care a aprut) vezi i secvene de cod din programul de test
qsort.s, efectueaz un apel direct de subrutin jal __main (rutin aferent

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 177
sistemului de operare). Se restaureaz din stiv registrul de revenire i
frame pointer-ul dup care printr-un return (j $31) se revine n sistemul de
operare n contextul din care a fost lansat. Aparent nici un salt indirect. La
simularea codului obiect ns rezult 6 apeluri statice indirecte care
genereaz 8 apeluri dinamice indirecte. De asemenea, un fapt interesant
obinut n urma simulrii pe toate programele de test folosite (inclusiv SPEC
95) sugereaz c exist mai multe apeluri call dinamice dect cele return
dinamice.
Un exemplu suplimentar n sprijinul afirmaiei c funciile de
bibliotec determin salturi indirecte (new, qsort, scan, printf) se
constituie programul de test qsort[.c,.s].
Codul asamblare nu prezint nici un apel indirect de funcii de
bibliotec (jal qsort, jal strcmp). La analiza codului obiect ns (dup link-
editarea sursei cu bibliotecile n cauz) au rezultat 11 apeluri statice
indirecte care au generat 61 apeluri dinamice indirecte.
Programul surs C preluat din help-ul oferit de mediul BorlandC
sorteaz un tablou de iruri de caractere prin intermediul funciei de
bibliotec qsort care primete ca parametri adresa tabloului, numrul de
elemente, dimensiunea fiecrui element i o funcie de comparare de dou
iruri de caractere. Practic o surs a celor 11 apeluri indirecte o constituie i
apelul indirect prin pointer la funcia de comparare pas realizat n
cadrul funciei qsort (precompilate).
n continuare se exemplific pe baza descrierii funciei din fiierul
...\BorlandC\Crtl\Clib\qsort.cas.
Nume funcie qsort sorteaz un tablou de elemente pe baza
metodei de sortare rapid "selecia elementului
median din trei", prin apelul repetat al unui pointer la
o funcie definit de utilizator ((*fcmp)()).
Utilizare void qsort(void *base, int nelem, int width, int
(*fcmp)());
Prototipul funciei se afl n stdlib.h.
*fcmp funcie de comparare care accept dou argumente:
elem1 i elem2, adresele a dou elemente ale tabloului
de sortat. Rezultatul returnat este urmtorul:
Dac elementele sunt n relaia fcmp returneaz
*elem1 < *elem2 Un ntreg
negativ (elem1
se va afla n
tabloul sortat

178 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

naintea lui
elem2)
*elem1 == *elem2 0
*elem1 > *elem2 Un ntreg
pozitiv (>0)
Qsort nu returneaz nimic.

n continuare se vor prezenta comparativ, exemplificndu-se la nivel
de instruciune, secvene din codul surs .c (de nivel nalt) versus .s
(asamblare) al aplicaiei qsort.[c,s].

******************Secven de cod din qsort.c*********************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char list[5][4] = { "cat", "car", "cab",
"cap", "can"};

int sort_function( const void *a, const void
*b)
{
return( strcmp((char *)a,(char *)b) );
}
int main(void)
{
int x;

qsort((void *)list, 5, sizeof(list[0]),
sort_function);
for (x = 0; x < 5; x++)
printf("%s\n", list[x]);
return 0;
}

*********************Secven de cod din qsort.s*****************
.globl list
.data
.align 2
list:
.ascii "cat\000" # stocarea n zona de date a adreselor de mesaje:
# elementele de tablou care vor fi sortate.
.ascii "car\000"
.ascii "cab\000"
.ascii "cap\000"
.ascii "can\000"
...
.text
.align 2
.globl main
.align 2
.globl sort_function__FPCvT0 # adresa funciei de sortare
.text
.ent main
main:
subu $sp,$sp,32 # alocare spaiu pe stiv
sw $31,28($sp) # salvare # adresa de revenire n programul apelant - $31
# (sistemul de operare)
sw $fp,24($sp)
move $fp,$sp
jal __main
la $4,list # pregtire parametrii de apel $4 adresa tabloului de
# sortat
li $5,0x00000005 # $5 <- 5 = numrul de elemente al tabloului
Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 179
li $6,0x00000004 # $6 <-4 = dimensiunea n octei a fiecrui element de
# tablou
la $7,sort_function__FPCvT0 # $7 <- adresa funciei folosit de ctre qsort n apelul su
jal qsort # la apelul unei funcii primii 4 parametrii de apel sunt
# salvai n regitrii $4 $7 restul, dac e cazul sunt depui
# pe stiv [Flor03]. Funcia qsort este precompilat.
sw $0,16($fp)
...
$L36:
move $sp,$fp # sp not trusted here
lw $31,28($sp)
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end main
.ent sort_function__FPCvT0
sort_function__FPCvT0:
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp) # salvare pe stiv a parametrilor de apel n cadrul rutinei
# apelate indirect prin qsort adresa i
sw $5,28($fp) # numrul de elemente al tabloului
lw $4,24($fp)
lw $5,28($fp)
jal strcmp # apel funcie de bibliotec pentru compararea a dou
# iruri de caractere
move $3,$2
move $2,$3
...
$L41:
move $sp,$fp
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end sort_function__FPCvT0

n urma analizei programelor de test (rezultate dup compilare [.s]) se
desprinde o concluzie general n ceea ce privete salturile indirecte:
ntruct instruciunile de apel de subrutin salveaz automat n registrul
$31 ($ra) adresa de revenire (PC_curent+4) [Flor03], la apelul recursiv
ntlnit n cadrul diverselor apeluri indirecte de funcii (vezi back_.cpp)
adresa de revenire trebuie salvat explicit n stiv de ctre programator,
naintea fiecrui astfel de apel (practic compilatorul realizeaz acest
lucru).
Dei au fost analizate doar cteva programe simple de test, cu numr
redus (<5.000.000) de instruciuni dinamice, pe baza rezultatelor obinute se
desprind cteva concluzii clare.
U Instruciunile de salt indirect apar mult mai frecvent n programele
obiectuale dect n cele procedurale.

180 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
U Prezena salturilor indirecte n programele procedurale se datoreaz
n principal urmtoarelor dou aspecte:
Apelurilor indirecte de funcii prin pointeri.
Construciilor de tip switch/case.
U Unul dintre motivele secundare care favorizeaz prezena salturilor
indirecte n programe l reprezint prezena funciilor de bibliotec
(vezi cazul qsort precum i alte librrii legate dinamic din cadrul
aplicaiilor desktop DLL [Lee98]).
U Legarea dinamic (late binding) realizat prin polimorfism (care
se bazeaz la rndul su pe conceptul de motenire) genereaz apeluri
indirecte de funcii n cazul programelor obiectuale (C++, Java,
Smaltalk).
4.3. INSTRUCIUNI DE SALT INDIRECT CU
CARACTER DINAMIC POLIMORF
Subcapitolul de fa ilustreaz pe 5 din benchmark-urile SPEC95
comportamentul dinamic al salturilor indirecte, dispersia target-urilor
acestora i cteva cazuri n care dei clasificarea bazat pe aritate (numrul
target-urilor distincte generate de fiecare instan de salt indirect) a indicat
salturi duomorfe sau polimorfe, ar fi fost mai util o clasificare a branch-
urilor dup numrul de situaii n care acestea sufer o modificare a target-
ului datorit saltului care se face preponderent la doar una din adresele sale
destinaie. Pentru acest experiment simulrile au fost efectuate doar pentru
5.000.000 instruciuni dinamice executate aferente fiecrui benchmark,
concluziile fiind suficient de elocvente. n continuare sunt ilustrate adresele
instruciunilor de salt indirect, target-urile posibile aferente respectivelor
salturi, tipul saltului (salt jr $reg, sau apel jalr $reg) precum i frecvena
cu care este accesat fiecare target.

Salturi cu caracter duo sau polimorf dar cu execuie preponderent
doar la una din adresele destinaie
Benchmark-ul hydro2d.ss

PC: 0x425cb0 jr $2 Target1 = 0x426950 freq = 2
Target2 = 0x425cb8 freq = 782
PC: 0x41e858 jr $2 Target1 = 0x41ecf8 freq = 1565
Target2 = 0x41eb38 freq = 6

Influena unor concepte de programare procedural / obiectual asupra generrii salturilor
indirecte 181

PC: 0x4108e0 jr $2 Target1 = 0x4108e8 freq = 1565
Target2 = 0x410f50 freq = 6

Benchmark-ul cc1.ss

PC: 0x420598 jr $2 Target1 = 0x420750 freq = 1
Target2 = 0x4205a0 freq = 306
PC: 0x5071d0 jr $2 Target1 = 0x507220 freq = 2
Target2 = 0x507250 freq = 71
PC: 0x462750 jr $2 Target1 = 0x464f18 freq = 1
Target2 = 0x463340 freq = 306
Target3 = 0x462770 freq = 4

Salturi cu dispersie ridicat a target-urilor
Benchmark-ul cc1.ss

PC: 0x400a68 jr $2
Target1 = 0x402b70 freq = 7
Target2 = 0x401228 freq = 1
Target3 = 0x400fd0 freq = 15
Target4 = 0x402ca8 freq = 15
Target5 = 0x402950 freq = 35
Target6 = 0x402a28 freq = 1
Target7 = 0x402c88 freq = 13
Target8 = 0x4027f0 freq = 17
Target9 = 0x400de0 freq = 17
Target10 = 0x400df8 freq = 17
Target11 = 0x401fd0 freq = 246
Target12 = 0x402bb8 freq = 31
Target13 = 0x4028f8 freq = 3
Target14 = 0x4028d8 freq = 3
Target15 = 0x4027a0 freq = 282
Target16 = 0x4044d8 freq = 282
Target17 = 0x404360 freq = 282
Target18 = 0x4044a8 freq = 282
Target19 = 0x4028b8 freq = 41
Target20 = 0x402860 freq = 17
Target21 = 0x404328 freq = 20
Target22 = 0x4027d0 freq = 86
Target23 = 0x401fa8 freq = 14
Target24 = 0x402a98 freq = 146
Target25 = 0x402ae0 freq = 146
Target26 = 0x402b88 freq = 122
Target27 = 0x403188 freq = 153
Target28 = 0x403178 freq = 153
Target29 = 0x401f50 freq = 161
Target30 = 0x402840 freq = 17
Target31 = 0x402818 freq = 13
Target32 = 0x402a08 freq = 10
Target33 = 0x401cc0 freq = 24
Target34 = 0x401cf8 freq = 24
Target35 = 0x4029c0 freq = 8
Target36 = 0x402c50 freq = 298
Target37 = 0x402c68 freq = 293
Target38 = 0x402970 freq = 8
Target39 = 0x402100 freq = 365
Target40 = 0x401bf8 freq = 497
Target41 = 0x401d20 freq = 351
Target42 = 0x4045f8 freq = 4165
Target43 = 0x401df8 freq = 351
Target44 = 0x4041c8 freq = 1915

Benchmark-ul li.ss
PC: 0x406bb0 jalr $2, $31
Target1 = 0x40a0b8 freq = 21
Target2 = 0x40a868 freq = 21
Target3 = 0x401938 freq = 21
Target4 = 0x400c98 freq = 22
Target5 = 0x40a128 freq = 64
Target6 = 0x40cd20 freq = 22
Target7 = 0x40c8d0 freq = 44
Target8 = 0x402278 freq = 22
182 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Target9 = 0x40a080 freq = 86
Target10 = 0x40cb60 freq = 68
Target11 = 0x401e90 freq = 46
Target12 = 0x400480 freq = 67
Target13 = 0x401350 freq = 13
Target14 = 0x401318 freq = 30

Benchmark-ul hydro2d.ss
PC: 0x4125b0 jr $2
Target1 = 0x412918 freq = 1570
Target2 = 0x412690 freq = 3141
Target3 = 0x4127b8 freq = 1571
Target4 = 0x4127f8 freq = 1571

Benchmark-ul apsi.ss
PC: 0x43a0b0 jr $2
Target1 = 0x43a190 freq = 1499
Target2 = 0x43a2b8 freq = 568
Target3 = 0x43a418 freq = 252
Target4 = 0x43a140 freq = 410
Target5 = 0x43a2f8 freq = 253

Benchmark-ul go.ss
PC: 0x47ec68 jr $2
Target1 = 0x47ed98 freq = 760
Target2 = 0x47ed50 freq = 760
Target3 = 0x47ecf8 freq = 760
Target4 = 0x47ec90 freq = 760
Target5 = 0x47eca8 freq = 808
Target6 = 0x47ece8 freq = 808
Target7 = 0x47ec80 freq = 808
Target8 = 0x47ec70 freq = 808

Exceptnd benchmark-ul go.ss mai exist i alte salturi polimorfe (cu
3, 4 i pn la 9 target-uri distincte) n fiecare din celelalte programe de test
(rezultatele se bazeaz pe execuia a 5.000.000 instruciuni dinamice) ns
le-am ales pe cele cu dispersia cea mai mare n fiecare din cazuri. Practic
benchmark-urile cu un numr (i procentaj) redus (chiar foarte mic) de
instruciuni dinamice de salt indirect (applu, go) se caracterizeaz
printr-o dispersie redus a target-urilor. Rezultatul este similar cu cel
obinut de Chang n simulrile sale [Cha97]. Dispersia target-urilor
salturilor indirecte tinde s creasc odat cu simularea unui mai mare numr
de instruciuni dinamice. Dificultatea prediciei se datoreaz dispersiei
extrem de ridicate a target-urilor unora dintre aceste instruciuni
(simulri pe benchmark-ul gcc SPEC2000 au artat c exist salturi care
genereaz pentru 100.000.000 de instruciuni dinamice, 106 target-uri
distincte, cu frecvene de repetiie a acestora ntre 1 i 12039). O contribuie
proprie care vizeaz predicia salturilor indirecte, prezentat n subcapitolul
5.3, utilizeaz informaiile de aritate a salturilor n cadrul unei structuri
hibride de predicie.


5. CONTRIBUII LA PREDICIA SALTURILOR /
APELURILOR INDIRECTE
5.1. PREDICIA DINAMIC A RAMIFICAIILOR DE
PROGRAM. NECESITATE. SOLUII
Rezultate statistice bazate pe simulri laborioase pe benchmark-uri
reprezentative (SPEC95, 2000) arat c o instruciune de salt apare la
fiecare 58 instruciuni dinamice executate, ceea ce nseamn c rata de
aducere a instruciunilor (fetch rate FR) este limitat la cel mult 8,
aducerea simultan a mai multor instruciuni fiind inutil (fetch bottleneck).
Aceast limitare fundamental ar avea consecine defavorabile i asupra
ratei medii de execuie (issue rate IR) a instruciunilor ntruct IRFR.
Pentru creterea gradului de paralelism la nivelul instruciunilor este
necesar dezvoltarea i implementarea de noi tehnici care s reduc
ntrzierile n procesare (hazarduri) pe oricare din cele dou fluxuri: de
instruciuni (control-flow) i respectiv de date (data-flow). Instruciunile de
ramificaie (branch) acioneaz la nivelul control-flow genernd pierderi de
performan prin necunoaterea la timp (n momentul fazei de aducere a
instruciunilor) a direciei i adresei saltului. Reducerea efectelor
defavorabile se poate face prin metode software bazate pe reorganizarea
programului surs (scheduling) sau prin metode hardware (predicia
ramificaiilor de program care favorizeaz astfel execuia speculativ).
Exist scheme de predicie numite statice caracterizate prin faptul c
predicia saltului pentru o anumit istorie a sa este fix, bazat n general pe
studii statistice ale comportamentului salturilor i uneori pe diverse euristici
[Cal95]. Compilatoarele se bazeaz pe predicia static i estimri ale
execuiei codului n implementarea de optimizri gen trace-scheduling.
Predicia static a branch-urilor determin calea cea mai frecvent
urmat prin graful de control al unui program, prezicnd direcia care se va
alege n cazul instruciunilor de salt. mbuntirea prediciei statice a
branch-urilor constituie o problem important cu numeroase implicaii,
variind de la optimizri ale compilatoarelor, pn la creterea
184 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
performanelor sistemelor dedicate (embedded systems) care nu nglobeaz
un predictor dinamic de salturi din motive de cost hardware. De asemenea,
se urmrete mbuntirea prediciei dinamice prin transmiterea de
informaii de la nivel high (software) la nivel low (hardware). Astfel de
informaii pot fi: se face / nu se face saltul (T/NT), direcie target (forward /
backward), opcode salt, etc.
Predicia prin hardware numit dinamic, reprezint una din cele mai
performante strategii actuale de gestionare a ramificaiilor de program i
presupune verificarea condiiei de salt (se face sau nu se face) iar dac saltul
se face determinarea adresei instruciunii destinaie. Procesul de predicie a
ramurii de salt condiionat precum i determinarea n avans a noului PC se
realizeaz run-time utiliznd tabele hardware mai mult sau mai puin
complexe (vezi n continuare subcapitolele 5.1.1 i 5.1.2). Cercetrile
recente insist pe aceast problem ntruct s-ar elimina necesitatea
reorganizrilor soft ale programului surs obinndu-se astfel o
independen fa de main. n principiu, o schem dinamic de predicie
este superioar uneia statice datorit adaptabilitii sale.
n condiiile creterii cantitii de cod executat speculativ, predicia cu
acuratee a instruciunilor de ramificaie (salturi) n general, i a celor
indirecte n special, constituie un factor esenial n mbuntirea
performanei globale a arhitecturilor de calcul. Complexitatea arhitectural a
procesoarelor actuale (structuri pipeline cu foarte multe niveluri 20 la
procesorul INTEL Pentium4 i ferestre largi de instruciuni care pot fi
lansate simultan spre execuie) dar i complexitatea tehnologic (perioade
de tact extrem de sczute 500ps la acelai procesor [Spra02]) agraveaz
impactul negativ asupra performanei cauzat de o predicie greit. ntruct
structurile pipeline moderne rein pn la sute de instruciuni n execuie
nefinalizate (in flight), dar mai ales faptul c, ramura de program executat
speculativ trebuie prsit n cazul unei predicii eronate a destinaiei unei
instruciuni de salt (cu consecine defavorabile din punct de vedere al
timpului de execuie), arhitecturile moderne de procesare trebuie s
nglobeze scheme de predicie ct mai eficiente. Simulri efectuate pe o
suit ampl de benchmark-uri (SPEC95, 2k, aplicaii desktop, multimedia
i Internet, recunoaterea vorbirii, CAD etc.) avnd la baz o arhitectur
superscalar echivalent procesorului Intel Pentium 4 au demonstrat
diminuarea ratei globale de procesare (IPC instruction per cycle) cu
0.45% pentru fiecare ciclu de tact suplimentar necesar n cazul unei
predicii greite a salturilor [Spra02], iar o nrutire a acurateii prediciei
salturilor de la 4% la 7% determin descreterea ratei globale de procesare
cu 11% [Jim02].

Contribuii la predicia salturilor / apelurilor indirecte 185
Dei cele mai mari acuratei de predicie a salturilor (pe direcie)
raportate n literatur se situeaz ntre 95% [McFar93] i 97% [Yeh92],
costul ridicat ca i timp necesar refaceri structurii pipeline i a contextului
procesorului la starea dinaintea prediciei greite reprezint unul dintre cele
mai mari impedimente n calea creterii performanei procesoarelor moderne
[Ega03]. La procesorul Alpha 21264 acest timp este de 7 cicli de tact
procesor, la Intel Pentium II este de 10 cicli iar la Pentium 4 procesul de
recovery se realizeaz n 20 cicli de tact.
Un alt aspect de care trebuie inut cont de ctre arhitecii de
calculatoare se refer la costul hardware impus de o acuratee ridicat de
predicie. De exemplu, la campionatul mondial de branch prediction din
2004 bugetele hardware destinate implementrii predictoarelor a fost limitat
la 64Kbii+256bii [JILP04]. Studiile cercettorilor [Ega03] accentueaz
faptul c generaiile viitoare de predictoare ar putea consuma un buget
hardware foarte ridicat (de ordinul megaocteilor). Ideal ar fi ca
predictoarele viitoare s prezic cu acuratee ct mai apropiat de 100% dar
cu costuri hardware nu foarte mari. Pentru predictoarele de capacitate redus
(16Ko [Tho03]) a cror acuratee este n principal limitat de interferene
destructive, o mic cretere n dimensiune determin o mbuntire
substanial a acurateii. Predictoarele globale de salturi mbuntesc
acurateea prediciei prin corelarea comportamentului saltului curent (T /
NT) cu istoria celor mai recente salturi dinamice precedente acestuia, o
cretere liniar a lungimii istoriei cauznd o cretere exponenial a
capacitii predictorului. Din fericire, chiar i aceste structuri imense de
predicie pot fi implementate n Siliciu, bugetul de tranzistoare (ntre 55
milioane la Intel Pentium 4 Northwood [Intel02] i pn la 178 milioane
la Intel Pentium 4 Extreme Edition [Intel03]) existent la ora actual
permind acest lucru, singurul neajuns constituindu-l ntrzierea prediciei.
Dac pn nu demult, un numr nsemnat de cercetri a fost canalizat
asupra a dou dimensiuni aferente prediciei acuratee i respectiv consum
hardware al schemelor implementate, odat cu creterea n complexitate a
procesoarelor actuale (structuri pipeline foarte adnci) i necesitatea
prediciei ntr-un singur ciclu de tact CPU, se pune problema lurii n calcul
a celui de-al treilea aspect al prediciei latena [Jim02]. mbuntirile
aferente procesului tehnologic de fabricare, realizate prin creterea
capacitii de integrare a tranzistoarelor i reducerea timpilor de comutaie,
determin creterea frecvenei procesoarelor actuale i viitoare. ngustarea
continu a perioadei de tact a acestora conduce la imposibilitatea accesri
ntr-o singur perioad de tact a structurilor de predicie dinamice de foarte
mare capacitate cu efect imediat i asupra vitezei globale de execuie a
programelor msurat n IPC (instruciuni per ciclu). Evident predictoarele de

186 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
capacitate redus determin diminuarea acurateii de predicie i o penalitate
suplimentar rezultnd de asemenea, reducerea vitezei globale de execuie.
Practic trebuie realizat un compromis ntre dimensiunea tabelelor de
predicie i frecvena de procesare. O tabel de predicie de capacitate mai
mare poate extrage mai bine informaia de corelaie rezultnd o acuratee de
predicie ridicat dar un timp de acces la structur mai mare (> 1Tact
CPU
). O
frecven de procesare mai modest permite un timp mai mare pentru
efectuarea unei predicii care se poate realiza astfel ntr-o singur perioad
de Tact
CPU
. n [Jim02] se arat c, din punct de vedere al costului de
execuie al unei instruciuni de salt, acceptarea unor predicii realizabile ntr-
un numr mai mare de cicli de tact folosind structuri de predicie de
capaciti foarte mari, n vederea creterii acurateii, nu reprezint niciodat
un bun compromis. Ecuaia urmtoare, preluat din [Jim02] descrie n mod
grosier costul de execuie al unei instruciuni de salt:
C = d + r p, unde
d reprezint timpul de acces la structura de predicie
r = 1 Acurateea prediciei, i reprezint procentajul de
predicii greite
p penalitatea n cazul unei predicii greite.
ntruct r este n mod clar subunitar rezult influena mult mai
pronunat a parametrului d dect cea a lui r asupra costului C.
n sprijinul celor afirmate mai sus se exemplific cu dou
implementri comerciale, existente pe piaa mondial, referitoare la
procesoarele firmei AMD. Astfel, predictorul de salturi ncorporat n
procesorul AMD Athlon reprezint un pas napoi comparativ cu
predecesorul su ncorporat n AMD K6. n timp ce K6 deinea un predictor
performant GAs (vezi terminologia din subcapitolul 5.1.1) de 8K intrri,
Athlon folosete un predictor mai puin eficient, de acelai tip dar cu doar
2K intrri [Die98]. Prin aceast modificare se reduce timpul mediu de
efectuare a unei predicii favoriznd atingerea unei frecvene de ceas de 1.4
GHz, mai agresive dect cea aferent procesorului K6. Fr ndoial c,
viteza global de execuie a programelor (msurat n IPC) pe un Athlon a
sczut datorit predictorului de salturi mai puin performant dect al
predecesorului su.
Astfel, toate ideile relevate anterior conduc la o motivaie clar:
necesitatea gsirii i implementrii unor predictoare cu acuratei extrem de
ridicate i un timp de acces ct mai redus. Se pare c, structurile viitoare de
predicie vor fi compuse din predictoare multi-nivel (hibride sau cascadate)
cu latene i acuratei de predicie progresiv cresctoare (rezultate n urma
unui mecanism selectiv de corecie) [Tho03, Dri98b, Dri99, Jim02].

Contribuii la predicia salturilor / apelurilor indirecte 187
n continuare n subcapitolul 5.1.1. sunt ilustrate pe scurt cele mai
nsemnate structuri clasice de predicie cu performanele i limitrile lor,
urmnd ca n subcapitolul 5.1.2. s fie prezentate cteva soluii de depire a
celor mai bune predictoare clasice. Predictoarele markoviene i cele bazate
pe reele neuronale par s reprezinte soluia viabil cea mai avantajoas care
s fie implementat n Siliciu. n ciuda unor dezavantaje legate de timpul de
realizare a prediciei, reelele neurale au fost sugerate ca o tehnologie
promitoare pentru procesoarele viitoare [Sez02]. Spre exemplu, unul din
simulatoarele procesorului Intel IA64, utilizate n exploatarea, cercetarea i
dezvoltarea microarhitecturilor, are n componen un predictor neural
[Bre02].
5.1.1. STRUCTURI CLASICE DE PREDICIE A
SALTURILOR CONDIIONATE.
Structura de predicie branch target cache (BTC) [Hen03] sau branch
target buffer (BTB) n alte documentaii [Per93], reine urmtoarele
informaii privitoare la salturile executate anterior: adresa instruciunii (PC-
ul saltului), adresa destinaie (target-ul saltului) i informaii privind istoria
acestuia (automat finit de stare pe 1 sau 2 bii care n funcie de starea sa
curent prezice dac saltul se va face sau nu). Automatele de predicie astfel
ncorporate, confer predictorului dinamism, comportarea lor adaptndu-se
n funcie de istoria saltului respectiv. Branch-urile sunt predicionate,
folosind PC-ul pentru indexarea structurii BTB, n paralel cu procesul de
aducere a instruciunii din cache. Dac din tabela BTB rezult branch-ul de
prezis ca fiind taken, i ntruct target-ul acetuia este i el disponibil la finele
ciclului de fetch al saltului, rezult c urmtoarea instruciune va fi extras
din cache de la adresa specificat de respectivul target. Bazat pe simulri
laborioase [Per93], se arat c acurateea de predicie obinut folosind
structura BTB este de 88% folosind un singur bit de predicie, respectiv de
93% folosind 16 bii de predicie. Totui, chiar i aceste acuratei ale
prediciei sunt insufuciente pentru marea performan a procesoarelor
superscalare, unde fiecare procent de acuratee suplimentar are un impact
pozitiv deosebit asupra performanei globale (vezi 5.1). Dintre
implementrile comerciale microprocesoarele DEC Alpha 21064 i
respectiv AMD K5 au avut ncorporat un predictor de ramificaii bazat pe un
BTB cu un singur bit de predicie, iar microprocesoarele PowerPC 604 i
MIPS R10000 predictoare BTB cu doi bii de predicie.

188 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Schema de predicie anterior prezentat se baza pe comportarea
recent a unei instruciuni de salt, de aici predicionndu-se comportarea
viitoare a acelei instruciuni de salt. Este posibil mbuntirea acurateii
prediciei dac aceasta se va baza pe comportarea recent a altor instruciuni
de salt, ntruct frecvent aceste instruciuni pot avea o comportare corelat
n cadrul programului. ncepnd cu 1991 au fost dezvoltate structuri de
predicie adaptive, corelate pe dou niveluri, cu acuratei de predicie
superioare celor obinute folosind structuri de tip BTB. Schemele de
predicie corelate au fost introduse pentru prima dat n 1992 n mod
independent de ctre Yeh i Patt i respectiv de Pan i Rahmeh [Hen03,
Yeh92, Pan92]. Exist n implementare dou niveluri. Primul l reprezint
un registru de predicie (registru binar de deplasare pe m ranguri) care reine
istoria (s-a fcut / nu s-a fcut) a celor mai recent executate m salturi din
program. Aceast informaie poate fi sau nu, concatenat cu cei mai puin
semnificativi bii ai PC-ului instruciunii de salt pentru a pointa la un cuvnt
din tabela de predicie (practic al doilea nivel din structur). Acest cuvnt
conine automatul de predicie, target-ul saltului etc). Succesul noilor
structuri se datoreaz n primul rnd capacitilor ridicate ale acestora
(tablouri de dimensiuni mari de automate de predicie sau de pattern-uri de
istorie a fiecrui salt Prediction History Table PHT). ntruct capacitatea
PHT crete exponenial n funcie de lungimea istoriei, costul PHT devine
excesiv, fiind dificil de exploatat eficient o cantitate mare de istorie a
branch-urilor. Predictoarele adaptive pe dou niveluri prezint nc alte dou
dezavantaje. Primul se refer la faptul c, n majoritatea implementrilor
fiecare automat de predicie este partajat ntre mai multe salturi.
Interferenele astfel generate conduc la scderea acurateii de predicie
datorit miss-urilor de conflict. Pe de alt parte, structurile foarte mari de
predicie reduc din aceste interferene ns necesit un timp suplimentar de
antrenare (setup) al automatelor nainte de a prezice cu succes.
n literatur au fost dezvoltate dou tehnici de predicie: global i
respectiv local (per adres). Dac registrul de predicie (istorie) reine
comportamentul ultimelor k (HR) salturi condiionate anterioare saltului
curent atunci aceast istorie precum i tehnica de predicie este una global.
Dac registrul de istorie reine comportamentul saltului curent n ultimele
sale k (HR) instane se spune att despre istorie ct i despre tehnica de
predicie c este local. Yeh i Patt [Yeh92] au propus un sistem de
clasificare al predictoarelor adaptive corelate pe dou niveluri. Sunt
cunoscute 6 tipuri de astfel de predictoare: GAg, GAp, GAs, PAg, PAp i
PAs. Expresiile care definesc fiecare tip de predictor nu sunt ntmpltor
alese i au la baz urmtoarele consideraii:

Contribuii la predicia salturilor / apelurilor indirecte 189
Prima liter scris cu majuscul specific tipul mecanismului de pe
primul nivel: G global sau P per adres (local).
Cea de-a treia liter identific tipul istoriei de pe cel de-al doilea nivel.
Aceasta poate fi: g global, p per adres (local) sau s per set
(mai multe branch-uri partajeaz aceeai istorie fiind mapate n aceeai
locaie a tabelei de predicie PHT).
Litera A din mijlocul fiecrei expresii evideniaz caracterul adaptiv
(dinamicitatea) predictorului.
Prima implementare comercial a unei scheme de predicie corelat pe
dou niveluri a fost predictorul GAg(vezi figura 5.1) n cadrul
microprocesorului Intel Pentium Pro. Au urmat apoi implementri ale
schemei GAg n cadrul microprocesoarelor Intel Pentium II i respectiv ale
schemei GAs n AMD K6.

Figura 5.1. Structur de predicie de tip GAg
Privitor la schema GAg, tabela de predicii PHT (Prediction History
Table) este adresat cu un index rezultat din concatenarea a dou informaii
ortogonale: PClow (i bii), semnificnd gradul de localizare al saltului,
respectiv registrul de predicie (HR - History Register pe k bii),
semnificnd "contextul" n care se situeaz saltul n program. Ambele
contribuii s-au fcut cu scopul eliminrii interferenelor branch-urilor n
tabela de predicie. Adresarea PHT exclusiv cu HR ca n articolul [Yeh92],
ducea la serioase interferene (mai multe salturi puteau accesa acelai

190 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
automat de predicie din PHT), cu influene evident defavorabile asupra
performanelor. Desigur, PHT poate avea diferite grade de asociativitate. Un
cuvnt din aceast tabel are un format similar cu cel al cuvntului dintr-un
BTB. O soluie alternativ la concatenarea HR i PClow n adresarea PHT,
cu rezultate foarte bune, o reprezint dispersia printr-o funcie de tip SAU
EXCLUSIV a celor dou informaii, cu care se adreseaz apoi tabela PHT.
Aceast compresie are o influen benefic asupra capacitii tabelei PHT.
n scopul reducerii interferenelor diverselor salturi n tabela de
predicii, n [Yeh92] se prezint o schem numit PAg- Per Address History
Table, Global PHT, a crei structur este oarecum asemntoare cu cea a
schemei GAg. Componenta HR
*
(k) a fost introdus n [Vin00], avnd
semnificaia componentei HR de la varianta GAg, adic un registru global
care memoreaz comportarea ultimelor k salturi. Fr aceast component,
schema PAg i-ar pierde din capacitatea de adaptare la contextul
programului n sensul n care schema GAg o face. Yeh i Patt renun la
informaia de corelaie global (HRg) n trecerea de la schemele de tip GAg
la cele de tip PAg, n favoarea exclusiv a informaiei de corelaie local
(HRl). n schimb, componenta HRl din structura History Table, conine
"istoria local" (taken / not taken) a saltului curent, ce trebuie predicionat.
Performana schemei PAg este superioar celei obinute printr-o schem de
tip GAg, cu tributul de rigoare pltit complexitii hardware. Schema de
predicie de tip PAg predicioneaz pe baza a 3 informaii ortogonale, toate
disponibile pe chiar timpul fazei de aducere a instruciunilor (IF): istoria
HRg a anterioarelor salturi corelate (taken / not taken), istoria saltului curent
HRl i PC-ul acestui salt.


Figura 5.2. Structur de predicie de tip PAg

Contribuii la predicia salturilor / apelurilor indirecte 191
Dup cum se observ din figura 5.2, dei tabela de pe primul nivel
(History Table) este specific unui salt (PC concatenat cu HRg), tabela de
pe nivelul al doilea (PHT) este global, fiind adresat doar cu istoria local a
unui salt (HRl), fapt ce conduce la interferene ntre instruciunile de salt.
Dac adresarea tabelei PHT s-ar face n schema PAg cu HR concatenat cu
PClow(i), atunci practic fiecare branch ar avea propria sa tabel PHT,
rezultnd deci o schem i mai complex numit PAp (Per Address History
Table, Per Address PHT) [Yeh92, Vin00]. Complexitatea acestei scheme o
face practic neimplementabil n siliciu la ora actual, fiind doar un model
utilizat n cercetare.
Desigur, este posibil ca o parte dintre branch-urile memorate n
registrul HR, s nu se afle n corelaie cu branch-ul curent, ceea ce implic o
serie de dezavantaje. n astfel de cazuri pattern-urile din HR pot pointa n
mod inutil la intrri diferite n tabela de predicie, fr beneficii asupra
performanei prediciei, separndu-se astfel situaii care nu trebuiesc
separate. Mai mult, aceste situaii pot conduce la un timp de "umplere" a
structurilor de predicie mai ndelungat, cu implicaii defavorabile asupra
performanei [Eve96]. O posibil soluie i n acest caz poate consta n
pstrarea i utilizarea unei istorii ct mai lungi (ndeprtate) n procesul de
predicie aferent instruciunilor de salt [Tho03]. Argumentul este de bun
sim ntruct unele salturi corelate pot aprea la o distan considerabil n
irul de instruciuni dinamice. Acest lucru se poate ntmpla dac dou
salturi corelate sunt desprite (separate) de ctre un apel de funcie care
conine multe branch-uri. La momentul prsirii funciei, o istorie global
redus poate conine doar comportamentul salturilor din cadrul funciei, n
timp ce o istorie global extins poate reine i rezultatul saltului corelat,
anterior apelului funciei. De asemenea, o idee interesant ce poate fi
abordat o reprezint studiul fezabilitii unui predictor de salturi, corelat pe
baz de arbori de decizie i senzitiv la informaia de corelaie cu adevrat
util [Fern03]. Asupra acestei relativ recente idei se va reveni n
subcapitolul 5.2.2.5.
Exist ns salturi care rmn greu predictibile n ciuda pstrrii
istoriei locale sau globale a comportamentului lor anterior. Pot exista dou
cazuri. Unele salturi a cror condiie este dependent de anumite date
aleatoare vor fi ntotdeauna greu de prezis. n schimb exist posibilitatea ca,
identificnd noi mecanisme de corelaie care s fie adugate procesului de
predicie, s favorizeze predicia cu acuratee a unora dintre salturile greu de
prezis. n [Ega03] se propune exploatarea acestei informaii de corelaie
potenial prin intermediul unor predictoare neuronale.
O critic valabil pentru toate schemele corelate const n faptul c
informaia de corelaie global este insuficient n predicie. Registrul de

192 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
predicie (HRg) nu poate capta ntreg contextul de apariie al unui anumit
salt. Simulri laborioase de tip trace - driven pe benchmark-urile Stanford
[Vin99], art c exist salturi care n acelai context (HRg, HRl) au
comportri antagoniste, adic de exemplu n 56% din cazuri s-au fcut, iar
n 44% din cazuri nu s-au fcut. Prin urmare aceste salturi sunt practic
nepredictibile, din motivul c "acelai context" nu este n realitate acelai! O
soluie ar consta n asocierea fiecrui bit din HRg cu PC-ul aferent saltului
respectiv i accesarea prediciei pe baza acestei informaii mai complexe.
Astfel, ar exista sigurana c la contexte diferite de apariie a unui anumit
salt, se vor apela automate diferite de predicie, asociate corect contextelor,
reducndu-se din efectele fenomenului de interferen a prediciilor.
Compararea acestor noi scheme de predicie trebuie fcut cu scheme
clasice avnd aceeai complexitate structural. Comprimarea acestui
complex de informaie (HRg cu PC-urile aferente) este posibil i chiar
necesar, avnd n vedere necesitatea unor costuri rezonabile ale acestor
scheme. Ea se poate realiza prin utilizarea unor funcii de dispersie simple
(de exemplu tip SAU- EXCLUSIV). Aceast observaie simpl poate
conduce la mbuntiri substaniale ale acurateii de predicie, comparativ
cu oricare dintre schemele actuale. n cadrul acestei lucrri am aplicat
tehnica mai sus menionat la predicia salturilor indirecte (vezi subcapitolul
5.3.2).
Avnd n vedere complexitatea tot mai mare a acestor predictoare, cu
implicaii defavorabile asupra timpului de cutare n structurile aferente, se
vehiculeaz tot mai des ideea unor predictoare hibride, constnd n mai
multe predictoare relativ simple asociate diferitelor tipuri de salturi n mod
optimal. Aceste predictoare se activeaz n mod dinamic, funcie de tipul
saltului care este n curs de predicionat. Subcapitolele 5.3.3.1. i 5.3.3.2.
descriu implementarea a dou predictoare hibride utilizate n predicia
salturilor indirecte: unul cu selecie bazat pe aritate i altul cu selecie
bazat pe confiden. Conform literaturii [Jim02], din punct de vedere al
implementrilor comerciale existente, cel mai performant predictor hibrid
este nglobat n procesorul Alpha 21264 i este n genul celui propus de
McFarling [McFar93] (pentru detalii privind acest tip de predictor vezi
5.2.2.3).



Contribuii la predicia salturilor / apelurilor indirecte 193
5.1.2. DEPIREA PERFORMANELOR PREDICTOARELOR
CLASICE PRINTR-O ABORDARE INTEGRATOARE
HARDWARE-SOFTWARE
5.1.2.1. PREDICTOARE MARKOVIENE.
Se poate afirma c predicia salturilor reprezint un caz particular al
problemei prediciei n general, care apare n diverse domenii ale tiinei i
necesit folosirea unor instrumente matematice foarte puternice precum
procesele Markov sau seriile de timp. Este surprinztor faptul c puini
cercettori neleg necesitatea unei abordri integratoare hardware
(tehnologie respectiv arhitectur) software (concepte, algoritmi i metode)
cu scopul obinerii unor arhitecturi de procesare ct mai evoluate,
revoluionare chiar (vitez de procesare ridicat, predictoare aproape
perfecte etc). Printre cei care au recurs la mbinarea ideilor din diferite
domenii ale tiinei calculatoarelor a fost Trevor Mudge de la Universitatea
din Michigan, care n 1996 a introdus conceptul de predictor pe baz de
lanuri Markov, utilizat n predicia salturilor. n [Chen96] s-a demonstrat
c toate predictoarele adaptive pe dou niveluri implementeaz cazuri
particulare ale algoritmului universal de compresie prin potrivire parial
(Prediction by Partial Matching PPM), care s-a dovedit optim n
compresii i extrageri anticipate de date i n recunoaterea vorbirii. De
asemenea, PPM reprezint un instrument de diagnoz n msurarea limitei
inerente de predictibilitate din programele de test.
Algoritmul PPM de ordinul m (predictor PPM complet vezi figura
5.3) este alctuit din (m+1) predictoare Markov. Un predictor Markov de
ordinul j predicioneaz bit-ul urmtor pe baza pattern-urilor precedente de j
bii (n concordan cu cel mai frecvent bit care urmeaz pattern-ului). De
cte ori apare un miss (nu regsim pattern-ul de j bii n irul de intrare),
PPM reduce pattern-ul cu 1 bit i folosete predictorul Markov de ordin
imediat inferior pentru predicie. Procedeul continu pn cnd se identific
un pattern i se poate realiza predicia corespondent.


194 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
.
.
.
.
.
.
E nt r y St r ing
0 1 1 1 0 1 1 . 1 0 1 ?
Last m bit s
If fo und
m- t h o rder Mar ko v pr edict or
I f no t fo und
If no t fo und
If no t fo und
If fo und
I f fo und
Last m-1 bit s ( m- 1) -t h o r der Mar ko v pr edicto r
Last 1 bit 1-st or der Mar ko v pr edict o r
0-t h o r der Marko v pr ed ict or

Figura 5.3. Predictor PPM de ordin m
n esen pentru predicie, se caut pattern-ul memorat n registrul
HRg pe k bii ntr-un ir binar mai lung al istoriei salturilor anterioare. Dac
acest pattern este gsit n irul respectiv cel puin o dat, predicia se face
corespunztor, pe baza unei statistici care determin de cte ori a fost urmat
de 1 logic (taken) respectiv 0 logic (not taken) valoarea predicionat este
aceea care a urmat cu cea mai mare frecven contextului considerat. Dac
ns pattern-ul din HRg nu a fost gsit n irul de istorie, se construiete un
nou pattern mai scurt prin eliminarea ultimului bit din HRg i algoritmul se
reia pe cutarea acestui nou pattern, .a.m.d. pn la gsirea unui anumit
pattern n ir. Se observ c predicia este funcie i de contextul considerat,
un context mai bogat (lung) conducnd adeseori la o acuratee mai
ridicat a prediciei (nu ntotdeauna ns: cteodat contextul se poate
comporta ca zgomot). Se arat c dei complexitatea implementrii acestei
noi scheme crete de cca. 2 ori fa de o schem corelat, eficiena sa - la
acelai buget al implementrii - este clar superioar. La nivelul tehnologiei
actuale, implementarea unui asemenea predictor PPM complet ar putea fi
prohibit.
Exist similitudini puternice ntre predictoarele adaptive pe 2 niveluri
i predictoarele Markov [Chen96] (primul nivel este identic - ambele
scheme de predicie utilizeaz comportarea ultimelor m salturi (T/NT)
pentru cutarea n structurile de date corespondente, iar numrtoarele
saturate de pe al doilea nivel sunt aproximate cu numrtorul de frecvene
Markov (frecvena de apariie a valorii 1 i 0). Cele dou scheme de

Contribuii la predicia salturilor / apelurilor indirecte 195
predicie difer doar prin informaia folosit pentru actualizarea celor dou
numrtoare.
Un predictor PPM complet de ordinul m cuprinde (m+1) predictoare
Markov de ordinul m, m-1, , 0. Datorit asemnrilor enunate anterior,
predictorul PPM poate fi vzut ca o mulime de predictoare adaptive pe
dou niveluri, avnd nu doar un registru de istorie a salturilor pe m bii ci un
set de regitri cu dimensiunile de la m la 0. Rezult n acest fel, generarea a
(m+1) tabele PHT avnd dimensiuni ntre 2
m
k bii (unde k reprezint
numrul de bii pentru codificarea contorului de frecvene Markov) i 2
0
k
bii. Spaiul total de memorie necesar este, n acest sens: 2
m
k + 2
m-1
k +
+ 2
0
k = k(2
m+1
-1)/(2-1) 2
m+1
k= 2(2
m
k) = 2(spaiul de
memorie necesar unui GAg cu istorie global pe m bii). n concluzie,
costul hardware al unui predictor PPM de ordinul m complet este echivalent
cu dublul costului unui predictor adaptiv corelat pe dou niveluri utiliznd
tot m bii de istorie global, ceea ce l face dificil de implementat n siliciu.
ncercnd s evite complexitatea acestui circuit, n [Vin99a] s-a
studiat comportarea unui predictor PPM simplificat, constnd ntr-un
predictor Markov de ordin m i respectiv unul de ordin 0, chiar fezabil
pentru a fi implementat n hardware. Rezultatele simulrilor de tip trace
driven pe benchmark-urile Stanford au artat c acurateea prediciei
obinut cu predictorul PPM este substanial mai bun fa de folosirea unui
predictor GAg clasic (n medie 7%).
5.1.2.2. METODE NEURONALE DE PREDICIE. PREDICTORUL
PERCEPTRON.
Limitrile structurilor adaptive pe dou niveluri din punct de vedere al
acurateii prediciei, dar i datorit complexitii hardware ceea ce ar
conduce la accesarea structurilor de predicie ntr-un numr ridicat de
perioade de tact
CPU
, plus faptul c creterea nivelului de istorie determin o
cretere exponenial a tabelelor de predicie PHT au condus la
introducerea n procesul de predicie a reelelor neurale ca i alternativ la
automatele de predicie deterministe de tip numrtoare saturate.
Din punct de vedere al scopului, domeniul reelelor neuronale, se
ncadreaz n domeniul mai mare al recunoaterii formelor, iar acesta n
inteligena artificial prin necesitatea nvrii, iar din punct de vedere al
metodei aplicate, se ncadreaz n cel al proceselor distribuite paralel (PDP).
Reelele neuronale ncearc s simuleze structura neurofiziologic a
creierului uman. Creierul este alctuit dintr-o mulime de neuroni
interconectai. Fiecare neuron primete informaii de la ali neuroni prin

196 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
intermediul dendritelor i transmite la rndul su un semnal prin intermediul
axonului. Acest model poate fi implementat pe calculator, considernd
legturile dintre neuroni numere (ponderi) care se modific n funcie de ct
de des este activat legtura.
O reea neural este un sistem de procesare a informaiei format dintr-
o mulime de neuroni (puternic) interconectai. Conceptul de reele neurale
artificiale a fost inspirat de reelele neurale biologice. Neuronii biologici
sunt considerai a fi constituanii structurali ai creierului care dei sunt mult
mai ncei dect o poart logic, implementat n siliciu, realizeaz inferene
i gndesc mult mai rapid i, n orice caz, mai profund i mai nuanat dect
cel mai bun calculator actual. Creierul compenseaz operaiile relativ ncete
(operaii luate individual) printr-un numr imens de neuroni interconectai,
prin paralelism masiv, reuind s se adapteze mediului nconjurtor, s
mnuiasc" informaii vagi, imprecise i probabilistice, s generalizeze de
la situaii i exemple cunoscute la situaii necunoscute, robustee, toleran
la erori. Reele neurale artificiale ncearc s imite o parte a caracteristicilor
descrise mai sus ale reelelor neurale biologice i const dintr-o mulime de
neuroni artificiali interconectai, de mici procesoare care execut doar
operaii de baz.
Noiunea de perceptron a fost introdus de Frank Rosenblatt [Ros62],
denumire dat reelei sale neuronale. n ciuda aplicaiilor variate care puteau
fi rezolvate prin intermediul reelelor neuronale (recunoaterea formelor,
clasificare, reconstrucia imaginilor), n 1969, Marvin Minsky i S. Papert
au analizat posibilitile de nvare ale perceptronului i au ajuns la
concluzii destul de sceptice, dovedind imposibilitatea rezolvrii de ctre
perceptronul cu un singur strat a unor probleme simple, cum ar fi nvarea
funciei XOR (funcie care nu este liniar separabil). Ca urmare, interesul
pentru acest domeniu de cercetare a sczut dramatic. Relansarea interesului
oamenilor de tiin s-a produs n 1986, odat cu apariia unor modele i
tehnici noi de nvare supervizat (metodele propagrii napoi).


Figura 5.4. Modelul matematic al unui neuron artificial
Modelul matematic al unui neuron artificial propus de McColloch i
Pitts calculeaz o sum ponderat de n semnale de intrare i genereaz o

Contribuii la predicia salturilor / apelurilor indirecte 197
singur ieire de 1 dac aceast sum este mai mare dect o anumit valoare
(numit prag) i 0 dac este mai mic.
Una dintre cele mai evidente mbuntiri care pot fi aduse modelului
McColloch-Pitts, care de altfel reprezint o simplificare grosolan a
neuronului biologic, este folosirea unei funcii de activare diferite de funcia
treapt cum ar fi funcia sigmoid sau funcia Gaussian.


Figura 5.5. Dou funcii de activare: sigmoid i Gaussian
Funcia sigmoid este de departe cea mai folosit n reelele neurale.
Este strict cresctoare i asimptotic avnd expresia matematic
g(x)=1/(1+exp(-(x)). Prin folosirea unei funcii de activare neliniare pot fi
rezolvate un numr mai mare de probleme dect cu funcii liniare iar
neuronul artificial este adus mai aproape de cel biologic, care este analogic
i nu binar.

Caracterizarea unei reele neurale poate fi fcut dup:
Arhitectur. Reelele neurale artificiale pot fi vzute ca i grafuri
orientate n care neuronii artificiali sunt noduri iar muchiile sunt
conexiuni ntre ieirile neuronilor i intrrile acestora. Astfel exis dou
categorii de reele:
reele feed-forward, n a cror grafuri nu exist bucle; (cu reglare
nainte; cu reacie pozitiv) unde fluxul de date de la unitile de
intrare la cele de ieire se desfoar strict nainte. Procesarea datelor
poate fi extins pe mai multe straturi dar, fr a fi prezente conexiuni
napoi (feed-back) de la ieirile unitilor la intrrile celor din acelai
strat sau din straturile anterioare. ntr-una din cele mai cunoscute
familii de reele feed-forward numit multilayer perceptron, neuronii
sunt organizai pe nivele care au conexiuni unidirecionale ntre ele.
Predictoarele neurale descrise n continuare se bazeaz pe reele de tip
feed-forward. Diferite configuraii determin diferite comportamente
i capabiliti ale reelei.
reele recurente (feed-back) n care apar bucle datorit conexiunii
napoi. Spre deosebire de reele feed-forward, aici sunt importante
proprietile dinamice ale reelei. n unele cazuri, valorile activrii
unitilor trec printr-un proces de relaxare astfel nct, reeaua va

198 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
evolua ntr-o stare stabil n care aceste valori nu se vor mai modifica.
Exemple de reele de acest tip sunt reelele Hopfield i reelele
Kohonen.
Regulile de actualizare a ponderilor (algoritmul de nvare). Abilitatea
de a nva este o caracteristic fundamental a inteligenei. Nu exist o
definiie precis a procesului de nvare ns acest proces poate fi vzut
n cazul reelelor neurale artificiale ca i o problem de adaptare a
ponderilor astfel nct reeaua s poat rezolva o anumit problem. Sunt
trei mari paradigme de nvare: supervizat, nesupervizat i hibrid. n
nvarea supervizat, sau nvarea cu un profesor", reelei i se
furnizeaz un rspuns pentru fiecare tip de intrare. Ponderile se vor
modifica astfel nct reeaua s dea un rspuns ct mai aproape de cel
corect. Prin contrast, nvarea nesupervizat, sau nvarea fr profesor,
nu necesit un rspuns corect asociat fiecrui tip de intrare din mulimea
de intrri de antrenament. n schimb reeaua exploateaz corelaiile
ntlnite n cadrul datelor de intrare i organizeaz abloanele n categorii
rezultate din aceste corelaii. nvarea hibrid combin nvarea
supervizat i cea nesupervizat. O parte dintre ponderi sunt determinate
prin nvarea supervizat iar celelalte sunt obinute prin nvarea
nesupervizat;
Funcia de activare. Poate fi folosit o plaj ntins de funcii de activare
dar cele mai eficiente n rezolvarea problemelor dificile sunt funciile de
activare neliniare. Studiul acestor funcii este dificil fapt pentru care nici
reelele care se bazeaz pe astfel de funcii nu se tie exact cum
funcioneaz, similar cu sistemul neural uman care este necunoscut n
proporie de 80%.

Domeniile de aplicabilitate / utilitate al reelelor neurale:
Clasificarea pattern-urilor. Sarcina de clasificare a pattern-urilor se
refer la a cataloga un pattern reprezentat printr-un vector de trsturi la
una din clasele prespecificate (recunoaterea caracterelor, recunoaterea
de voce, clasificarea celulelor de snge, etc.)
Clustering sau gruparea. n grupare, care se mai numete i clasificare
a pattern-urilor nesupervizat nu exist date de antrenament i clase
cunoscute. Un algoritm de grupare exploateaz similaritile dintre
pattern-uri i plaseaz pattern-uri similare ntr-o grupare (compresia de
date).
Aproximare de funcii. Fiind dat o mulime de perechi (x
1
,y
1
), (x
2
,y
2
),
..., (x
n
,y
n
) generate de o funcie necunoscut. Sarcina aproximrii unei
funcii este de a gsi un estimator a acesteia cu care s poate s fi

Contribuii la predicia salturilor / apelurilor indirecte 199
generate i alte valori cu o anumit aproximaie (predicia la burs,
prognoza vremii).
Predicia. Dndu-se o mulime de n exemple (y(t
1
), y(t
2
), , y(t
n
)) n
ordinea temporal t
1
, t
2
, , t
n
problema este de a prediciona valoarea de
la momentul t+1.
Optimizarea. Scopul optimizrii este de a gsi o soluie la o anumit
problem dar care s satisfac anumite restricii cum ar fi maximizarea
sau minimizarea.
Control. Avnd un sistem caracterizat de o mrime de intrare i control
u(t) i una de ieire y(t) scopul este de a genera o intrare de control astfel
nct sistemul urmeaz o anumit traiectorie dup un anumit model.
Aplicaii poteniale ale reelelor neurale n microarhitecturi:
- Predicia dinamic a salturilor este realizat cu ajutorul unei reele
neurale care primete ca i intrri n format binar comportamentul
celor mai recent executate branch-uri. Ieirea reelei o reprezint
predicia (dac saltul curent se va face sau nu). Dup cunoaterea
rezultatului real al saltului, istoria care a condus la acest rezultat poate
fi folosit la antrenarea reelei pentru a produce un rezultat corect pe
viitor.
- Predicia trace-ului urmtor. Reeaua neural selecteaz din mai
multe trace-uri posibile pe cel care s fie extras din trace-cache.
- Politica de nlocuire din cache bazat pe reele neuronale adaptabile
la pattern-urile de date accesate de programe determin reducerea ratei
de miss.
- Predicia valorilor. Reelele neurale pot fi utilizate la selecia cu
succes a uneia dintr-un set de valori care au fost generate sau sunt
probabil a fi furnizate de o anumit instruciune i folosit apoi
speculativ.
- Reelele neurale pot ajuta i la predicia target-urilor salturilor
indirecte generate la nivel low (hardware), n principal, de ctre
apelul metodelor virtuale din programele orientate obiect de la nivel
high (software). Detalii privind generarea salturilor indirecte au putut
fi obinute din subcapitolul 4.2.
Reelele neurale funcioneaz cu randament maxim atunci cnd
clasific o intrare care provine dintr-un numr restrns de clase. Predicia
neural folosit n probleme de clasificare este utilizat cu succes [Jim02,
Ega03] n predicia salturilor condiionate (selecteaz direcia) i necesit
un singur perceptron pentru a clasifica un salt ca fiind taken sau
nottaken. Predicia unei valori sau a unui target de branch este ns mult
mai complex. Ea necesit mai mult de un perceptron pentru fiecare
predicie i se bazeaz n principiu pe existena unei tabele auxiliare de

200 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
opiuni din care reeaua va face selecia (de exemplu, ultimele k valori
sau target-uri anterior generate, k parametrizabil). ntr-o manier
original, n subcapitolul 6.2.2. am implementat un predictor neural cu
rol n metapredicia valorilor regitrilor procesorului. Reeaua neuronal
implementat selecteaz ntre trei sau mai multe predictoare clasice de
valori (incremental, contextual, LastValue).
Reelele neurale au fost folosite pentru prima dat, n procesul de
predicie static a instruciunilor de ctre Calder [Cal95]. Direcia probabil
(taken / not taken) aferent unui salt static este prezis n momentul
compilrii, folosind pentru antrenarea reelei neurale informaii de profil
cum ar fi: opcode-ul instruciunilor de salt, direcia acestora (nainte sau
napoi), caracteristici ale saltului anterior i ale basic-block-urilor
succesoare instruciunii de salt. Acurateea prediciei obinut este de doar
80%, extrem de ridicat pentru o tehnic de predicie static dar sczut n
raport cu acurateea unei predicii dinamice [Vin00c, Ega03]. Probabil
contribuia cea mai folositoare a respectivei lucrri este de a sugera o gam
variat de intrri alternative care pot fi utile n mecanismul de corelaie i
pot fi cu succes adugate predictoarelor dinamice.
Literatura de specialitate remarc activitatea independent i aproape
simultan a doi cercettori, cu realizri importante n domeniul
predictoarelor neurale. Este vorba de Lucian Vinan de la Universitatea
Lucian Blaga din Sibiu, care a introdus conceptul de predictor neural
dinamic i a propus dou tipuri de astfel de predictoare: unul de tip Learning
Vector Quantization LVQ [Vin99b] i unul de tip Multi-Layer-Perceptron
MLP [Ega03] cu algoritm de nvare de tip backpropagation. Al doilea
cercettor este Daniel Jimenez de la Universitatea Rutgers SUA, al crui
perceptron s-a dovedit nu numai fezabil la nivel de implementare n Siliciu
ci i cel cu acurateea de predicie cea mai ridicat 98.29% [Jim02].
nainte de a prezenta mai n detaliu despre fiecare tip de predictor sunt
descrise cteva asemnri i deosebiri n abordrile celor doi cercettori
privitor la schemele de predicie dezvoltate.
Principala deosebire ntre cele dou studii const n faptul c Jimenez
[Jim02] utilizeaz doar registrul de istorie ce reflect comportamentul
salturilor anterioare ca intrri n predictorul su perceptron, n timp ce
Vinan [Vin99b, Vin00c, Ega03] folosete ca intrri n cele dou predictoare
neurale (LVQ i perceptronul multistrat) att registrul de istorie ct i
adresele branch-urilor. O asemnare ntre cele dou studii se refer la faptul
c, n ambele, reeaua neural este antrenat dinamic dup fiecare predicie.
Vinan aplic perceptronului multistrat algoritmul complex de nvare
backpropagation (va fi descris ulterior n cadrul acestui subcapitol).
Algoritmul de nvare al lui Jimenez, mai simplu i mai rapid poate fi

Contribuii la predicia salturilor / apelurilor indirecte 201
rezumat pe scurt astfel: intrrile n reeaua neural pot fi 1 sau -1. Dac o
intrare n reea coincide cu rezultatul branch-ului (un nottaken este asociat
cu -1 iar un taken cu +1) atunci ponderea aferent respectivei intrri este
incrementat. n caz contrar ponderea este decrementat. n cadrul
perceptronului lui Jimenez fiecare pondere reprezint gradul de corelaie
(pozitiv sau negativ) dintre comportamentul unui salt trecut (vzut de pe
nivelul de intrare) i comportamentul saltului curent care trebuie prezis; cu
ct este mai mare o pondere cu att va fi influenat mai mult predicia.
Concluziile ambilor cercettori sugereaz faptul c reelele neurale extrag
un grad de corelaie suplimentar fa de schemele adaptive pe dou niveluri,
cu implicaii benefice asupra acurateii de predicie. Din punct de vedere al
performanei, perceptronul lui Jimenez nltur pn la 36% din prediciile
eronate obinute cu cel mai bun predictor hibrid existent n variant
comercial, de tip McFarling [Jim02]. Acurateea prediciei obinut de
Vinan variaz ntre 89% i 92% i echivaleaz cu o mbuntire cu 3% a
predictorului neural fa de structurile adaptive pe dou niveluri [Ega03].
Diferena de performan se poate datora i faptului c Jimenez folosete pe
intrrile perceptronului doar registrul de istorie a crui lungime poate varia
pn la 66 de bii, n timp ce Vinan restricioneaz nivelul de istorie la doar
10 bii. De asemenea, algoritmii de antrenare diferii pot constitui un factor
critic n determinarea comportamentului reelelor neurale utilizate.
Primul predictor neural care se prezint este cel bazat pe modelul de
reea Learning Vector Quantization [Vin99b]. LVQ este o reea neural
simpl folosit pentru clasificarea pattern-urilor. Modul de nvare este
unul supervizat bazat pe competiie. n cadrul algoritmului vor fi atia
vectori binari cte clase diferite sunt. Numrul de bii folosii la codificarea
unui singur pattern determin lungimea acestor vectori. n principiu reeaua
neural, component a structurii de predicie (vezi figura 5.6), este compus
din doi vectori binari: Vt- asociat unei predicii de tip taken respectiv Vnt-
asociat unei predicii de tip nottaken. Fiecare dintre aceti vectori binari are
o lungime de (i+k+l) bii, n concordan cu lungimea total a celor 3
componente (adres branch, istorie global, istorie local) pe care se
bazeaz predicia. Iniial, fiecare element al vectorului Vnt este iniializat cu
zero logic iar fiecare element al vectorului Vt cu unu logic. n procesul de
predicie, fiecare salt n curs de predicionat genereaz un vector binar X(t)
pe (i+k+l) bii, n coresponden cu PC, HRg i HRl pe care le are asociate
la momentul respectiv. Pentru a clasifica un patern este calculat distana
Hamming dintre patternul de intrare i fiecare vector HD= ,
unde X este paternul de intrare i Vw este unul dintre vectori (Vnt sau Vt).
( ) X Vw
p
p
i k l
p
=
+ +


1
2

202 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Paternul X este clasificat ca fcnd parte din clasa asociat vectorului care
are distana Hamming cea mai mic. Vectorul (Vnt sau Vt) avnd distana
Hamming minim fa de vectorul X(t), se numete "vector nvingtor"
(Vw- "winner"). Cellalt vector se va numi perdant (Vl-"loser").


Figura 5.6. Schem bloc a predictorului neuronal [Vin99b]
Algoritmul de predicie adaptiv este descris de ecuaiile de mai jos
(5.1 i 5.2) Fiind un algoritm de nvare vectorii iniiali trebuiesc
modificai, dar ntr-un singur ciclu se modific doar vectorul ctigtor, cel
perdant rmne nemodificat, motiv pentru care se consider algoritmul de
nvare bazat pe competiie.
Vw(t+1) = Vw(t) + a(t)[X(t) - Vw(t)] (5.1)
Vl(t+1) = Vl(t) (5.2)
n ecuaia (5.1) a(t) reprezint pasul de nvare i ia valori reale
pozitive, subunitare. Semnul "+" se refer la o predicie corect iar semnul
"-" la una incorect. Metoda propus face pentru prima dat pe plan mondial
legtura ntre problema prediciei salturilor n microprocesoarele de mare
performan i respectiv problema recunoaterii formelor, recunoscnd n
prima un caz particular al celei de a 2-a probleme. Forma de intrare (X) se
clasific ntr-una din cele 2 forme care se modific adaptiv, Vt respectiv
Vnt. Practic se nlocuiesc automatele de predicie deterministe de tip
numrtoare saturate (uzual de ordinul miilor sau zecilor de mii) cu o
singura reea neural de predicie.
Acurateea medie de predicie, obinut cu predictorul LVQ pe
benchmark-urile Stanford printr-o metodologie trace-driven, este de 88.10%
[Ega03], echivalent unui predictor de tip BTC (vezi subcapitolul 5.1.1) dar
inferioar celei produse de o structur adaptiv pe dou niveluri. n ciuda
modestiei rezultatelor, acestea pot fi considerate ncurajatoare din cel puin
dou motive: primul ar fi simplitatea reelei neurale folosite iar, al doilea,
faptul c algoritmul de nvare este complet neoptimizat practic reeaua
nva pe toat durata procesrii trace-ului. De asemenea, se remarc

Contribuii la predicia salturilor / apelurilor indirecte 203
superioritatea perceptronului [Jim02] fa de LVQ [Vin99b] din punct de
vedere al acurateii prediciei dar i al implementrii la viteze de procesare
ridicate datorit calculelor complexe implicate de operaiile n virgul
mobil din cadrul LVQ.
Preluat din [Ega03] se prezint un al doilea model de reea neural
utilizat n predicia salturilor, i anume, perceptronul multistrat, o reea de
tip feed-forward, cu algoritm de nvare de tip backpropagation.
Backpropagation definete doi pai: primul n care informaia trece de la
intrare ctre ieire i apoi un pas napoi de la nivelul de ieire la nivelul de
intrare. Pasul de trecere nainte propag vectorul de intrare n primul nivel al
reelei, ieirile din acest nivel produc un nou vector care vor fi intrri pentru
nivelul urmtor, pn cnd se ajunge la ultimul nivel al cror ieiri produc
ieirile reelei. Pasul napoi este similar cu cel nainte exceptnd faptul c
erorile sunt propagate napoi prin reea pentru a determina adaptarea
ponderilor. Algoritmul backpropagation, reprezentnd de fapt o metod de
minimizare a erorii medii ptratice, poate fi formulat astfel:
1. Iniializeaz ponderile cu valori mici aleatoare n intervalul [-
2/N
1
, 2/N
1
] unde N
1
reprezint numrul de noduri de pe nivelul de intrare
[Gal93].
2. Plaseaz la intrare un vector X.
3. Propag acest vector de intrare nainte prin reea.
4. Calculeaz eroarea n nivelul de ieire.
] )[ (
m
i
u
i
m
i
m
i
y d h f = , unde f este derivata funciei de activare f,
reprezint intrrile perceptronului i din nivelul m, d este rezultatul
dorit iar y este rezultatul produs de ultimul nivel al reelei.
m
i
h
5. Calculeaz erorile pentru nivelele precedente prin propagarea
erorilor napoi:

+ +
=
j
l
j
l
ij
m
i
m
i
w h f
1 1
) ( , unde l ia valori de la numrul nivelului
ultim -1 pn la 1.
6. Actualizeaz ponderile folosind .
1
=
l
j
l
i
l
ji
y w
7. Repet de la pasul 2 cu urmtorul pattern pn cnd eroarea din
nivelul de ieire scade sub un anumit nivel (threshold).
Cu toate c alegerea lui influeneaz ntr-o mare msur algoritmul
de nvare backpropagation, aceast alegere este dependent de specificul
problemei.
Predictorul neuronal de salturi implementat n [Ega03] este constituit
n principal dintr-o reea neuronal, un registru de istorie global (HRg) i o
tabel cu regitrii de istorie local. Reeaua neuronal (pe post de predictor

204 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
global al tuturor salturilor din program) este o reea de tip Multi Layer
Perceptron, de tip feedforward avnd un singur nivel ascuns, un nivel de
intrare i un nivel de ieire (vezi figura 5.7). Fiecare nivel este format dintr-
un numr de noduri astfel:
- Pentru primul nivel numrul de noduri este calculat dup
urmtoarea formul:
dimensiunea PCului + dimensiune HRg + dimensiunea unui HRl.
- Dimensiunea nivelului al doilea este dat de dimensiunea primului
nivel + un delta dat ca parametru de intrare (avnd ca valori
discrete 2,4,6,8).
- Nivelul de ieire conine un singur nod i constituie predicia
saltului (taken / not taken).


Figura 5.7. Predictor neural de ramificaii program [Ega03]
Fiecare nod de pe nivelurile ascuns i de ieire este n legtura cu
nodurile nivelului care le precede prin intermediul unor ponderi. Valorile
fiecrui nod de pe aceste dou niveluri sunt calculate dup urmtoarea
formul:
unde n
j
este nodul a crui valoare este calculat
n
i
este unul din nodurile nivelului
precedent iar w
i,j
este ponderea ce leag
nodul i de n
) * ( , j
i
j i i j t w n f n + =

odul j
n [Ega03] sunt studiate patru reele neurale diferite, rezultate n urma
folosirii pe intrrile reelei a dou tipuri de istorie, local i respectiv global
dar i a dou funcii de activare diferite (una de tip gaussian 1
1
2

+
x
e

i

Contribuii la predicia salturilor / apelurilor indirecte 205
una de tip sigmoidal
x
e

+

1
1
). Utilizarea celor dou versiuni de funcii se
datoreaz n principal codificrii diferite a intrrilor n reea. La folosirea
funciei sigmoidale intrrile sunt 0 i 1 (binare) i o valoare mai mare dect
0.5 la ieirea reelei reprezint predicie taken a saltului curent, n timp ce o
valoare sub acest prag (0.5) semnific predicie nottaken. Cnd se folosete
funcia sigmoidal bipolar (gaussian) intrrile n reea sunt codificate -1 i
respectiv +1, iar un branch este prezis taken dac ieirea reelei exprim o
valoare mai mare sau egal cu 0. O ieire negativ sugereaz un branch
nottaken. Jimenez utilizeaz n studiul su doar intrri bipolare n reea (-1 i
+1) argumentnd c intrrile binare avnd valoarea 0 (n cazul folosirii
funciei sigmoidale) chiar dac au o pondere substanial asupra rezultatului
(prediciei curente), prin nmulirea dintre pondere i 0 (valoarea de pe
nivelul de intrare) nu rezult nici un impact asupra ieirii reelei (vezi
ecuaia 5.3 care descrie modelul analitic al perceptronului [Jim02]).

=
+ =
n
j j
x w w
1 j
0
y
(5.3)
Revenind la studiul din [Ega03], perceptronul multistrat cu
backpropagation, istorie local pe intrare i funcie de activare gaussian s-a
dovedit cel mai performant (acurateea prediciei obinut fiind de 91.53%),
mbuntind acurateea unui predictor adaptiv corelat pe dou niveluri de
tip GAs cu 5.2%. Cu toate acestea, datorit complexitii algoritmului de
nvare backpropagation, pn la ora actual este imposibil de a realiza o
predicie ntr-un numr restrns (14 [Jim02]) de perioade de tact procesor,
conform cerinelor existente n domeniul microarhitecturilor (vezi detalii la
nceputul subcapitolului 5.1).
O soluie n vederea creterii acurateii de predicie a schemelor
neurale const n combinarea prediciei statice cu cea dinamic n trei
moduri [Vin99a, Vin01]:
+ Prima metod const n prenvarea unor statistici, realizate asupra
trace-ului, de ctre reeaua neuronal cu o anumit eroare urmat de
predicia propriu-zis. n prima faz ponderile sunt ajustate astfel nct
reeaua nva o parte din trace, realizndu-se o pre-predicie (se
stabilete anterior execuiei fiecare salt cum va fi predicionat atunci cnd
va fi executat) naintea execuiei iar apoi urmeaz predicia dinamic din
timpul execuiei.
+ A doua metod const n antrenarea reelei folosind un numr de n-1
trace-uri furnizate n mod aleator pn cnd eroarea maxim a nvrii
va scade sub o anumit valoare. Antrenarea este realizat printr-o

206 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
predicie n gol adic predicia unui trace fr reinerea rezultatului.
Dup ce eroarea nvrii a ajuns sub o anumit valoare urmeaz
predicia propriu-zis pe cel de-al n-lea trace, unde de data aceasta sunt
reinute rezultatele prediciei.
+ A treia metod const n utilizarea unui algoritm genetic pentru
antrenarea reelei neurale. Algoritmii genetici constituie o parte a
calculului evolutiv care la rndul su este o component a inteligenei
artificiale. Ca i reelele neurale, algoritmii genetici se bazeaz pe o
metafor biologic (asocierea soluiei unei probleme unui cromozom
uman i folosirea operatorilor genetici pentru determinarea de noi
soluii). Prin aceti algoritmi se percepe nvarea ca o competiie ntre
membrii unei populaii de soluii posibile a unei probleme n evoluie.
Este utilizat o funcie de evaluare a fiecrei soluii care s estimeze dac
o soluie va contribui la urmtoarea generaie de soluii. Apoi prin
operaii similare cu transferul de gene din reproducerea sexual
algoritmul creeaz o nou populaie de posibile soluii. Iniial se
stabilete o populaie de cromozomi suficient de larg pentru a asigura
variabilitatea populaiei. Fiecare cromozom conine un numr de gene,
acestea reprezentnd de fapt o pondere din cadrul reelei neurale. Genele
aparinnd populaiei iniiale de cromozomi sunt iniializate cu valori
aleatoare n intervalul [-1,1]. Algoritmul genetic se desfoar astfel:
pentru un numr de generaii stabilit se repet paii urmtori
o sunt evaluai toi cromozomii
o este aplicat operatorul de ncruciare (Cross)
o este aplicat operatorul de mutaie (Mutation)
cel mai performant cromozom din generaia final va conine prin
genele sale ponderile reelei antrenate static.
Parametrii cheie ai acestui algoritm sunt numrul de generaii i
dimensiunea populaiei. Dac populaia este prea mic nu va fi suficient
diversitate n cadrul populaiei pentru a obine soluia optim. Dac ns
numrul de generaii este prea mic nu vor fi destule anse pentru a ajunge
la soluia optim. De notat c optimul nu este garantat c va fi obinut,
exist doar o mare probabilitate de a-l gsi.
Predictorul neural propus de Jimenez [Jim02] va fi numit
Perceptron pe parcursul acestui subcapitol, reprezint o schem de predicie
corelat pe dou niveluri care nlocuiete automatele de predicie
deterministe (tabela PHT din figurile 5.1, 5.2) cu perceptroni cu un singur
strat. ntruct capacitatea predictorului variaz liniar i nu exponenial cu
dimensiunea nivelului de intrare, principalul avantaj al Perceptronului lui
Jimenez se refer la posibilitatea exploatrii unei istorii mult mai lungi n

Contribuii la predicia salturilor / apelurilor indirecte 207
procesul de predicie (pn la 66 de salturi anterioare) n vederea creterii
acurateii de predicie. Perceptronul cu un singur strat, introdus pentru
studiul funciilor creierului [Ros62] const dintr-un singur neuron artificial
care conecteaz n uniti de intrare ponderate, la o singur ieire. n cazul
predictorului Perceptron intrrile reprezint coninutul registrului de istorie
global, iar ieirea (un singur bit) specific dac saltul curent supus
prediciei se va face sau nu. Fiecare pondere reprezint gradul de corelaie
dintre comportamentul unui salt trecut i comportamentul saltului supus
prediciei.
Figura 5.8 ilustreaz modelul grafic iar ecuaia 5.3 prezint modelul
analitic al perceptronului. Acesta este descris printr-un vector ale crui
elemente sunt ponderile, numere ntregi cu semn reprezentate pe 8 bii.
Ieirea perceptronului se determin ca produs scalar dintre vectorul de
intrare x
1..n
x
0
fiind ntotdeauna 1, oferind o pondere de baz (bias), i
vectorul de ponderi w
0..n
. Ponderea de baz (bias) reflect (nva) n ce
msur (mai mare sau mai mic) comportamentul saltului curent este
independent de istoria salturilor anterioare. Intrrile perceptronului sunt
bipolare, o valoare -1 aferent unui x
i
semnificnd salt nottaken iar un +1
nsemnnd salt taken. O ieire negativ este interpretat ca predicie
nottaken iar una pozitiv semnificnd predicie taken.


Figura 5.8. Predictorul Perceptron [Jim02]
n figura 5.9. se prezint pentru o mai bun nelegere un mic
exemplu. Se consider astfel un registru de istorie care reine
comportamentul ultimelor 4 salturi. Se observ c salturile al doilea i al
patrulea (corespondente biilor 1 i respectiv 3) contribuie cel mai mult la
predicia saltului curent. Cea de-a doua pondere arat c exist o puternic
corelaie pozitiv ntre direcia celui de-al doilea branch i direcia branch-
ului curent supus prediciei. De asemenea, se remarc o puternic corelaie
negativ ntre rezultatul saltului patru i rezultatul saltului curent. ntruct al
patrulea salt nu s-a fcut aceast corelaie, sugereaz faptul c saltul curent
se va face.


208 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 5.9. Exemplu privind mecanismul de predicie al Perceptronului
n cele ce urmeaz va fi descris mecanismul de realizare a prediciei,
algoritmul de nvare actualizare a ponderilor i modul de implementare
hardware al perceptronului. Procesorul ncorporeaz o tabel de N
perceptroni implementai n memorie SRAM foarte rapid. Parametrul N
este impus de bugetul hardware i respectiv de numrul de ponderi
determinat la rndul su de cantitatea de istorie reinut. n momentul n
care procesorul ntlnete un branch, pe timpul fazei de fetch instruciune,
au loc urmtoarele:
1. Adresa saltului este dispersat pentru a obine un index i 0..N-1 n
tabela de N perceptroni.
2. Perceptronul i este extras din tabel ntr-un registru vectorial P
0..n
de
ponderi.
3. Valoarea ieirii perceptronului, y, este calculat ca produs scalar ntre
vectorul P i registrul de istorie global.
4. Branch-ul va fi prezis nottaken dac y este negativ sau taken n caz
contrar. Asupra punctelor 3 i 4 se va insista cnd se va descrie modul
de implementare hardware al tabelei de perceptroni.
5. Odat ce rezultatul real al branch-ului devine cunoscut, algoritmul de
nvare folosete acest rezultat i valoarea y (ieirea prezis) pentru
actualizarea ponderilor n registrul vectorial P.
6. Ponderile actualizate vor fi nscrise n intrarea i a tabelei.


Contribuii la predicia salturilor / apelurilor indirecte 209

Figura 5.10. Implementarea software a mecanismului de predicie i a algoritmului
de nvare
n [Jim02a] sunt prezentate n pseudocod (apropiat de limbajul Algol)
dou subprograme care permit implementarea software a mecanismului de
predicie i a algoritmului de nvare (vezi figura 5.10). Lungimea
registrului de istorie este considerat h. Tabela de predicie este reprezentat
de o matrice N (h+1) ponderi, numere ntregi pe 8 bii W[0..N-1, 0..h].
Fiecare rnd al matricei este un vector de (h+1) ponderi, care reprezint
ponderile unui perceptron. Prima coloan reine ponderile (de baz)
independente de istoria branch-urilor, aferente celor N salturi din tabela de
perceptroni. Vectorul boolean G[1..h] {1..h}{nottaken, taken} reprezint
registrul global de deplasare care pstreaz istoria salturilor. Expresiile
taken i nottaken sunt considerate constante booleene iar cuvintele scrise cu
litere aldine reprezint cuvinte cheie.
La nivel hardware matricea ponderilor W este implementat ca o
memorie mapat direct direct, fr TAG, cu N blocuri, fiecare bloc
coninnd (h+1) ponderi aferente unui perceptron. Astfel, de fiecare dat
cnd este necesar o predicie se citete din memorie ntr-un registru
vectorial aceste ponderi. Circuitul care determin ieirea perceptronului
(calea critic pentru realizarea unei predicii) accept ca semnale de intrare
tabloul de ponderi (registrul vectorial) i registrul de istorie. ntruct
elementele registrului de istorie pot fi doar -1 i +1 rezult c nu mai este
necesar implementarea unui circuit multiplicativ, acesta fiind nlocuit cu

210 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
simple adunri i scderi (adunare cu complementul fa de 2). n urma
simulrilor efectuate, Jimenez [Jim02] a apreciat c o adunare cu
complementul fa de 1 reprezint o bun estimare a complementului fa de
2, i suplimentar, evit ntrzierea introdus de un sumator cu propagare a
transportului. Astfel, dac intrarea i a registrului de istorie este -1 rezult c
ponderea i din tablou trebuie sczut (adunat la suma total y a
complementului fa de 2 a respectivei ponderi). Prin reprezentarea lui -1 n
complement fa de 2 i efectuarea unui sau exclusiv (xor) cu valoarea
ponderii respective, i tiind c:
a xor 1 = not a a {0, 1},
se obine practic complementul fa de 1 al ponderii. Prin aproximarea
propus de Jimenez rezult practic valoarea cutat. (-1w
i
) care va fi
adunat la suma total y. Dac intrarea i din registrul de istorie este 1 atunci
nu se aplic nici o operaie ponderii respective. Dup determinarea fiecrui
produs x
i
w
i
dac este cazul (x
i
= -1) se calculeaz suma tuturor produselor
folosind un circuit numeric bazat pe arbori Wallace sumatoare cu transport
salvat cu 3 intrri i 2 ieiri. Pentru suma a trei numere de cte m bii
efectuat de un sumator cu transport salvat de dimensiune (m) este necesar
un timp (1) pentru a ajunge la suma a dou numere. Arborii Wallace reduc
problema sumei a n numere codificate pe m bii la suma a dou numere
codificate pe 2 m bii. Ultimele dou numere rezultate sunt adunate cu
ajutorul unui sumator cu transport anticipat [Cor90]. ntruct adncimea
unui astfel de arbore este de ordinul O(log n) iar cea a unui sumator cu
transport anticipat este de ordinul O(log m), iar m n [Jim02] este 8, rezult
c timpul de calcul este relativ scurt. Semnul sumei va determina dac
predicia va fi taken sau nottaken.
Cercetarea lui Jimenez [Jim02] cuprinde i o simulare la nivel de
circuit a tabelei de perceptroni implementat hardware. n acest sens au fost
folosite:
- Simulatorul CACTI, un instrument de modelare a cache-ului pentru
evaluarea timpului necesar citirii ponderilor din tabela de perceptroni i
nscrierea lor ntr-un registru vectorial.
- Simulatorul HSPICE, care determin timpul necesar stabilirii ieirii
perceptronului: taken (0) sau nottaken (<0).
n condiiile unui buget hardware limitat, trei parametri pot fi variai
pentru obinerea modelului optim de perceptron: dimensiunea registrului de
istorie, numrul de bii pe care vor fi reprezentate ponderile i pragul folosit
n algoritmul de nvare. Studiind influena istoriei globale asupra latenei
de predicie a perceptronului se desprinde o prim concluzie privind

Contribuii la predicia salturilor / apelurilor indirecte 211
fezabilitatea acestuia. Astfel, pentru un buget hardware de 4KB i o lungime
a istoriei de 24 rezult o laten a prediciei de 2.4ns, care reprezint 2
perioade de tact
CPU
pentru un procesor Alpha 21264 la 833MHz,
implementat ntr-o tehnologie de 180nm (performan acceptabil din punct
de vedere al latenei de predicie, inacceptabil prin prisma frecvenelor de
procesare actuale). Acurateea de predicie a respectivului perceptron este de
95.4%, superioar cu 26% fa de un predictor gshare [McFar93, Bur97]
echivalent.
Tendinele microarhitecturale curente ns, urmresc implementarea
de microprocesoare cu frecvene de tact ct mai ridicate, chiar i n
detrimentul performanei globale de procesare (msurat n IPC
instruciuni per tact
CPU
). n aceste condiii predictoarele care pot furniza o
predicie ntr-un numr ct mai mic de perioade de tact (12) sunt fie
hibride, fie cascadate (se va discuta n subcapitolul 5.2.3), fie predictoare cu
suprascriere a prediciei (overriding). Jimenez [Jim02] propune o astfel de
schem structur ierarhic caracterizat de faptul c, n acelai timp este
furnizat o predicie i de un prim nivel, foarte rapid, dar mai simplu
(gshare) i de un al doilea nivel, mai complex cu laten mai mare de
predicie (perceptronul). Primul nivel genereaz imediat o predicie care
poate fi suprascris de cel de-al doilea nivel puin mai trziu. Dac se
ntmpl acest lucru atunci procesul de fetch este reluat de la adresa stabilit
de predictorul de pe nivelul 2, provocnd o penalitate, mai mic totui dect
cea datorat unei predicii greite. Spre exemplu, latena de suprascriere
(overriding) a predictorului hibrid ncorporat n procesorul Alpha 21264 este
de 2-3 perioade de tact
CPU
iar penalitatea n cazul unui salt greit
predicionat, fr proces de suprascriere este de 7 perioade de tact
CPU

[Kes99]. n principiu, la apariia unui branch exist patru posibiliti:
- Prediciile generate de cele dou nivele coincid i sunt corecte. Rezult
penalitate nul.
- Prediciile difer, iar cea de pe nivelul 2 este corect. n acest caz, cel de-
al doilea nivel suprascrie predicia primului nivel, cu o penalitate redus.
- Cele dou predicii generate sunt n dezacord, iar perceptronul greete.
n acest caz penalitatea este ridicat (trebuie realizat nti suprascrierea
prediciei de pe primul nivel, apoi dup determinarea prediciei greite a
celui de-al doilea nivel prin aflarea rezultatului saltului trebuie reluat
procesul de fetch de pe ramura corect). Cu toate c reprezint cel mai
defavorabil caz, este mai puin probabil s apar ntruct, luate
individual, acurateea prediciei de pe nivelul 2 este superioar prediciei
de pe nivelul 1.
- Cele dou predictoare genereaz aceeai predicie, dar greit. Nu se
realizeaz o suprascriere dar apare penalitatea datorat prediciei greite.

212 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Astfel, la o frecven de 1.76GHz oferit de procesorul Intel
Pentium4, predictorul cu suprascriere avnd perceptron cu istorie de 24 pe
nivelul al doilea, realizeaz predicia n patru perioade de tact
CPU
: 1 tact
CPU

pentru citirea ponderilor din tabela de perceptroni i alte 3 tacte
CPU
pentru
calcularea ieirii perceptronului folosit pentru predicie. Cele 3 perioade de
tact se datoreaz n primul rnd arborelui Wallace care, pntru n=24, are 7
nivele (conform relaiei de recuren 1 )
3
2
( ) ( +


=
n
D n D [Cor90]). Aceste
7 nivele, plus sumatorul final cu transport anticipat (rdcina arborelui
Wallace) sunt pipelinizate astfel: primele 3 nivele sunt executate n 1
tact
CPU
, urmtoarele 3 nivele sunt executate n 1 tact
CPU
, i ultimul nivel plus
sumatorul se execut n cel de-al patrulea tact
CPU
. Chiar i n condiiile unei
viteze de procesare ridicate (1.76GHz), un predictor cu suprascriere avnd
pe al doilea nivel Perceptronul [Jim02] cu laten de suprascriere de 4 cicli
de tact conduce la o performan global de procesare, superioar (cu 5.7%)
unui procesor Alpha 21264 care ncorporeaz un predictor hibrid cu
suprascriere cu latena de 3 cicli [Kes99]. Aceleai simulri demonstreaz o
superioritate a performanei globale de procesare a arhitecturii bazat pe
Perceptron cu 15.8% fa de o arhitectur echivalent Pentium4 cu predictor
Gshare ncorporat. O soluie de mbuntire a timpului de efectuare a
prediciei de ctre Perceptron ntr-un procesor cu vitez ridicat de execuie
(1.76GHz) o reprezint predictorul neural path-based [Jim02a]. Acesta
ealoneaz calculele n timp permind eliminarea arborelui Wallace n
procesul de nsumare i nlocuirea cu un simplu sumator. Latena de
predicie devine astfel 2 perioade de tact
CPU
, n concordan cu predictoarele
existente n implementrile comerciale [Sez02].
n finalul acestui subcapitol vor fi prezentate cteva din avantajele
(suplimentare) oferite de perceptron pe lng acurateea de predicie
ridicat, performan global de procesare superioar altor implementri i
fezabilitate hardware n condiii echivalente cu structurile adaptive pe
dou niveluri. Astfel, unul din avantaje se refer la independena fa de
istorie a timpului de antrenament n cazul perceptronului, contrar cu
schemele adaptive corelate pe dou niveluri, la care timpul de antrenament
depinde de lungimea istoriei, iar de la o anumit mrime poate afecta
negativ performana. Un alt avantaj l reprezint asignarea unui grad de
confiden prediciei. Acesta este determinat de distana absolut dintre
ieirea perceptronului i 0 (pragul fa de care se stabilete dac saltul se
face sau nu se face). Cu ct aceast distan este mai mare se asigur faptul
c acel branch va fi taken sau nottaken. O confiden redus permite
microarhitecturii execuia speculativ a ambelor ramuri ale saltului (taken

Contribuii la predicia salturilor / apelurilor indirecte 213
sau nottaken) n timp ce o confiden ridicat impune execuia doar a unei
anumite ramuri (cea prezis). De asemenea, Perceptronul ajut la
identificarea salturilor mai importante din punct de vedere al corelaiei
dintre acestea, pentru predicia unui anumit salt stabilete care bii de
istorie sunt mai importani (pondere foarte mare n modul) i care nu
(pondere apropiat de 0) n predicia saltului curent. Aceast proprietate a
perceptronului poate fi folosit n determinarea informaiilor de profil a
salturilor i combinat cu alte structuri de predicie cunoscute n literatur
[Sta98] (vezi subcapitolul 5.2.2.4) care exploateaz informaia de corelaie
variabil.
5.2. NECESITATEA PREDICIEI SALTURILOR /
APELURILOR INDIRECTE. SOLUII.
Din punct de vedere microarhitectural, ultima perioad este
caracterizat de creterea n importan a salturilor indirecte comparativ cu
salturile condiionate, n ciuda frecvenei destul de reduse a primelor n
programele de calcul. Unul din motive l reprezint execuia predicativ care
determin reducerea numrului de salturi condiionate (njumtirea
acestora n cadrul arhitecturii IA64 [Intel97]). Un alt motiv l constituie
amploarea pe care a luat-o dezvoltarea de aplicaii desktop, vizuale dar mai
ales obiectuale, respectiv tendina de portabilitate a ct mai multor dintre
acestea. Aplicaiile desktop sunt bogate n apeluri de funcii de bibliotec
[Flo04], iar programele C++ i Java asigur un stil polimorfic de
programare n care, legarea dinamic a apelurilor de subrutine
(implementat la nivel hardware prin apeluri indirecte) constituie
instrumentul principal de proiectare modular a codului. Adugnd la
acestea dificultatea prediciei salturilor indirecte comparativ cu celelalte
tipuri de instruciuni de salt se justific aportul crescut al salturilor /
apelurilor indirecte asupra costului global generat de prediciile greite i
respectiv necesitatea dezvoltrii de noi mecanisme de predicie (structuri
hibride, predictoare cascadate pe dou sau mai multe niveluri [Dri98c,
Dri99] sau adaptate din predicia valorilor) pentru predicia cu acuratee a
acestora. Dac se mai pune n balan i faptul c un numr restrns de
salturi indirecte statice sunt responsabile pentru mai bine de 90% din
salturile indirecte dinamice (2 go.ss, 3 ijpeg.ss etc, vezi benchmark-urile
SPEC95 subcapitolul 7.1.1, respectiv o medie de 22 pe 8 benchmark-uri

214 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
obiectuale [Dri98a]), rezult i mai clar c, performana global a
arhitecturilor este extrem de senzitiv la predicia salturilor indirecte (o
mbuntire a prediciei pentru un singur salt static are un impact
semnificativ asupra acurateii globale de predicie, respectiv asupra ratei de
procesare n arhitecturile superscalare actuale cu structuri pipeline extrem de
adnci). Creterea adncimii pipe-ului determin nu doar o reducere a
perioadei de tact a procesorului ci i o accentuare a efectului defavorabil
provocat de hazardurile de toate felurile, dar mai ales de cele de ramificaie.
Simulri efectuate pe o suit ampl de benchmark-uri (SPEC95, 2k,
aplicaii desktop, multimedia i Internet, recunoaterea vorbirii, CAD etc.)
avnd la baz o arhitectur superscalar echivalent procesorului Intel
Pentium 4 au demonstrat diminuarea ratei globale de procesare cu 0.45%
pentru fiecare ciclu de tact suplimentar necesar n cazul unei predicii greite
a salturilor [Spra02].
Pentru creterea acurateii prediciei se pune mai nti problema
determinrii caracteristicilor de program i a paradigmelor existente n
aplicaiile procedurale respectiv obiectuale care genereaz salturi / apeluri
indirecte. Astfel, simulri laborioase (pn la 6.000.000 de salturi indirecte
executate / program de test) au artat c procentajul apelurilor indirecte de
funcii datorat metodelor virtuale este de peste 34% (n medie pe 8
benchmark-uri obiectuale: porky, eqn, troff, jhm etc este de 69%) [Dri98a].
Pe parcursul subcapitolului 5.2 este realizat o descriere a structurilor
de predicie dedicate salturilor / apelurilor indirecte, dezvoltate pe parcursul
ultimei decade, de la cele mai simple pn la cele mai complexe, urmnd ca
n subcapitolul 5.3 s fie prezentate cteva cercetri proprii care urmresc
determinarea limitelor existente, implementri ale schemelor actuale i
mbuntiri aduse acestora n vederea creterii acurateii prediciei.
5.2.1. PREDICTOARE ADAPTIVE PE DOU NIVELURI.
PREDICTORUL TARGET-CACHE.
Schema clasic de predicie BTB (branch target buffer) specific n
special salturilor condiionate, a fost propus pentru nceput i pentru
predicia salturilor indirecte (vezi figura 5.11). Au existat dou variante:
standard, n care target-ul este evacuat cu fiecare predicie greit, respectiv
BTB-2bc, un BTB standard suplimentat cu numrtoare saturate pe doi bii
aferente fiecrei locaii (cmpul 2bc) n care target-ul este actualizat cu cel
corect doar dup a doua predicie greit (structur oarecum similar cu
predictorul de valori LastValue descris n subcapitolul 6.1.1).

Contribuii la predicia salturilor / apelurilor indirecte 215

Figura 5.11. Predicia target-urilor n cazul salturilor indirecte. Structura
BranchTargetBuffer [Dri98a]
n implementarea acestor scheme s-a plecat de la premisa c, chiar i
n cazul salturilor polimorfice ale cror target-uri variaz foarte des, n
general predomin n execuie un singur target [Aig96]. Acurateea maxim
de predicie obinut pe benchmark-urile SPEC95 a fost de 71.9% cu
schema BTB standard i respectiv 75.1% cu BTB-2bc. Simulri efectuate cu
cel din urm predictor pe o suit de programe att procedurale ct i
obiectuale au relevat variaia acurateii de predicie (ntre 62% - pe
programe C i 80% - pe programe C++ i Java)[Dri98a].
ntruct n predicia salturilor condiionate schemele adaptive, corelate
pe dou niveluri s-au dovedit mai eficiente dect cele de tip BTB [Yeh92],
au fost propuse i pentru predicia salturilor / apelurilor indirecte (vezi
figura 5.12), cu o deosebire ns. Deoarece majoritatea salturilor indirecte
sunt necondiionate rezult ineficiena pstrrii unei istorii (history pattern)
a comportamentului salturilor indirecte anterioare (Taken) alegndu-se n
schimb s se rein pe nivelul de istorie comportamentul salturilor
condiionate premergtoare saltului indirect (Taken / NotTaken) [Cha97].


Figura 5.12. Predicia target-urilor salturilor indirecte prin scheme adaptive
corelate pe dou niveluri [Dri98a]

216 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Variante de implementare ale schemei adaptive pe dou niveluri
folosesc pe nivelul History Pattern target-urile anterioare sau anumii bii ai
acestora path (funcie i de dimensiunea pattern-ului), aferente
respectivului salt indirect static, supus prediciei [Dri98a]. n cadrul acestui
predictor rezultat, informaia de predicie suplimentar poate fi concatenat,
comprimat prin intermediul unei funcii de dispersie sau chiar ntreesut.
Rezultatele raportate de cercettori [Dri98a] referitor la care din cele
modalitile de indexare ale structurii de predicie sunt mai eficiente,
exprim urmtoarea concluzie: creterea n acuratee n cazul n care
informaia de predicie este concatenat nu justific utilizarea unei tabele
de target-uri foarte mari comparativ cu o tabel de dimensiuni mai
modeste, necesar dac informaia de predicie este comprimat.
Diferena n performan ntre un BTB i cel mai bun predictor
adaptiv pe dou niveluri, n cazul salturilor indirecte, devine semnificativ
doar pentru tabele de target-uri mai mari de 64 de intrri. Pentru atingerea
unei acuratei de predicie de 90% este necesar un predictor adaptiv pe dou
niveluri path-based cu o tabel de minim 1024 intrri [Dri98a]. n urma
unor simulri laborioase, Driesen a ajuns la concluzia c o cale (path) cu o
lungime de 3 target-uri anterioare respectiv o tabel cu grad de asociativitate
4-way s-au dovedit optime din punct de vedere al acurateii de predicie,
rezultate oarecum similare cu cele obinute de autor n cercetrile efectuate
(vezi subcapitolul de rezultate 7.1). ntruct fiecare instruciune de salt ar
necesita un numr mare de intrri n tabela de target-uri care variaz
exponenial cu lungimea pattern-ului, pentru o tabel de capacitate limitat,
creterea dimensiunii pattern-ului poate conduce la un numr ridicat de
miss-uri de capacitate cu implicaii defavorabile asupra acurateii prediciei.
Din categoria predictoarelor adaptive pe dou niveluri poate fi
considerat ca fcnd parte i predictorul Target Cache (vezi figura 5.13),
implementat i supus analizei n subcapitolul 5.3.2. Sunt discutate n
literatur dou variante: un predictor bazat pe pattern care reine
comportamentul ultimelor salturi condiionate (T / NT), respectiv unul bazat
pe path (calea spre respectivul salt indirect, compus att din pattern ct i
din adresele instruciunilor de salt condiionate). n acest caz predicia
adresei de salt nu se mai face pe baza ultimei adrese int a saltului indirect,
ca n schemele de predicie clasice, ci pe baza alegerii uneia dintre ultimele
adrese int ale respectivului salt, memorate n structur. n unele
implementri [Cha97, Dri98a], structura de predicie, memoreaz pe
parcursul execuiei programului pentru fiecare salt indirect ultimele pattern
adrese int (sau un numr de bii din fiecare). Cele dou/trei surse de
informaie binar (PC, pattern / path) sunt n general prelucrate prin
intermediul unei funcii de dispersie (XOR), rezultnd indexul de adresare

Contribuii la predicia salturilor / apelurilor indirecte 217
n cache i tag-ul aferent. n implementarea proprie s-a optat pentru un
Target Cache N-way asociativ (un set conine N adrese destinaie) cu
TAG pentru evitarea interferenelor ce pot s apar atunci cnd o
instruciune de salt utilizeaz o intrare din structur care a fost anterior
accesat de ctre un alt salt, genernd o predicie din start greit, cu
implicaii defavorabile asupra timpului de execuie.


Figura 5.13. Predicia target-urilor n cazul salturilor indirecte. Structura
TargetCache [Cha97]. HRgLength lungimea pattern-ului de istorie global
Modul de funcionare a structurii de predicie Target Cache este
urmtorul: numrul de bii mai puin semnificativi ai cuvntului obinut prin
dispersia PC-ului saltului i a registrului de istorie global a salturilor
condiionate (globalHR) formeaz Indexul iar Tag-ul (reprezentnd de fapt
contextul de apariie al acelui salt indirect) aferent valorii care va fi
predicionat este reprezentat de cei mai semnificativi bii. n cazul unui
acces cu hit la locaia Index n TargetCache valoarea prezis (target-ul
saltului) va fi cmpul Adr din structur, n caz contrar putndu-se alege una
din urmtoarele variante (nu se prezice un target sau se face o predicie
implicit spre exemplu, cea mai recent adres destinaie din setul
respectiv). n implementarea realizat (vezi subcapitolul 5.3.2), un miss n
Target Cache nu conduce la mbuntirea acurateii de predicie. Dup ce
adresa int a saltului devine efectiv cunoscut, n situaia unui hit n
TargetCache dac predicia a fost eronat, target-ul de la TAG-ul emis prin
PC (i eventual globalHR) va fi actualizat cu noua adresa destinaie,
reprezentnd de fapt contextul de apariie al acelui salt indirect. n caz de
miss n TargetCache tabela este actualizat prin introducerea valorii reale a
registrului surs aferent instruciunii de salt indirect, evacund din lista de
target-uri de la respectiva adres (identificat prin set) cea mai veche dintre
acestea, printr-un algoritm de tip FIFO (first in first out). Principiul
prediciei este n acest caz simplu: la acelai pattern de context, aceeai

218 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
adres int. Prin astfel de scheme, msurat pe benchmark-urile SPEC'95,
acurateea prediciei salturilor indirecte crete i ca urmare, ctigul global
asupra timpului de execuie este de cca 4.3% - 9%. Un TargetCache cu tag,
de tip 16-way set asociativ, folosind o istorie global pe 16 bii reduce
timpul de execuie cu 12,66%, respectiv 4,74% pe benchmark-urile
SPEC95 perl i gcc, n timp ce un target cache 8 way set asociativ reduce
timpul de execuie cu 10,27% respectiv 4,31% pe aceleai dou programe de
test [Cha97].
5.2.2. PREDICTOARE HIBRIDE I METAPREDICTOARE.
5.2.2.1. CU SELECIE BAZAT PE CODUL SURS.
n literatura de specialitate recent au fost propuse cteva noi scheme
de predicie bazate pe codul surs ce st la originea salturilor i apelurilor
indirecte (principalele vinovate n acest sens fiind unele construcii
switch/case, apelurile indirecte de funcii prin pointer i respectiv
polimorfismul apelul metodelor virtuale, fapt artat n capitolul 4). Astfel,
n urma informaiilor extrase dup compilare sau pe baza informaiilor de
profil, instruciunile de salt pot fi partiionate n clase diferite, fiecrei clase
fiindu-i ataat cte un predictor specific. Aceste predictoare specifice sunt
combinate sinergic ntr-un predictor hibrid (vezi figura 5.14). n acest scop
Driesen a folosit simulatorul dedicat shade pentru generarea trace-urilor
tuturor salturilor indirecte [Cme93].


Figura 5.14. Predictorul hibrid cu mecanism de clasificare bazat pe opcode
[Dri98b]

Contribuii la predicia salturilor / apelurilor indirecte 219
n experimentul propus de Driesen [Dri98b], predictoarele
componente difer doar prin lungimea cii (dependent de clasa fiecrui salt
indirect). n timp ce istoria (path-ul) fiecrui predictor component este
actualizat de ctre toate salturile indirecte indiferent de clasa creia i
aparin, doar o singur cale este selectat pentru predicie (cea aferent
clasei din care face parte branch-ul curent supus prediciei). Predictorul
hibrid poate folosi o tabel de target-uri partajat de ctre toate clasele de
salturi indirecte sau tabele separate pentru fiecare clas. Din punct de vedere
al timpului de procesare, aceast selecie bazat pe opcode (care identific
clasa branch-ului) pare s ntrzie predicia de la finele fazei IF (instruction
fetch) la finele fazei de decodificare ID.
n continuare sunt descrise cteva aspecte legate de detecia salturilor
indirecte, procentajul fiecrei clase, i numrul de target-uri distincte
generat de fiecare clas, detalii folositoare n analiza performanei
predictorului hibrid. Aa cum s-a demonstrat n subcapitolul 4.2 al prezentei
lucrri, n limbajul C/C++, construciile switch/case cu mai mult de 5 cazuri
determin n urma compilrii salturi indirecte (folosind GNU gcc 2.6.3 cu
opiunea de optimizare O3). Driesen a probat i el acest lucru cu
deosebirea c versiunea de compilator a fost GNU gcc 2.7.2, opiunea de
optimizare O2, -multrasparc plus static linking, iar numrul de cazuri
rezultat a fost 7. Recunoaterea acestor construcii n codul asamblare MIPS
(generat dup compilare, avnd ca platform gazd un procesor Intel
Pentium II i sistem de operare Linux Red Hat 7.3) este relativ simpl
ntruct au mnemonica j $reg (salt necondiionat la adresa specificat de
registru reg) [Flo04]. Pentru identificarea apelurilor indirecte datorate
metodelor virtuale Driesen folosete EEL o bibliotec de instrumente
pentru analiza i modificarea unui cod executabil [Lar95], care ntr-un
mod similar cu tehnica OVFC de predicie prin precalculare a target-urilor
apelurilor metodelor virtuale [Roth99], selecteaz o secven de 5
instruciuni care conduc la apelul indirect respectiv (extragere din memorie
a adresei obiectului, determinare adres de baz a tabelei de metode virtuale,
calcul adres exact la care se gsete adresa metodei virtuale, extragere
adres metod, salt necondiionat pe prima instruciune aferent metodei
virtuale). Celelalte tipuri de salturi indirecte gsite n program, diferite de
cele mai sus descrise (switch i virtual) au fost considerate de Driesen ca
fiind apeluri indirecte (datorate apelurilor de funcii prin pointer, funcii de
bibliotec, DLL-uri).
n timp ce n programele obiectuale salturile indirecte datorate
apelurilor de metode virtuale predomin (61% - vezi tabelul 5.1), n
aplicaiile procedurale, care nu conin astfel de salturi, dominante sunt
apelurile indirecte de funcii prin pointer (69%).Cu toate c salturile

220 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
indirecte datorate instruciunii de selecie multipla switch / case prezint
cele mai multe adrese destinaie comparativ cu celelalte tipuri de salt
indirect (12.7), comportamentul salturilor din clasa switch din punct de
vedere al acurateii predictiei este oarecum similar cu cel al salturilor
generate de apeluri indirecte de funcie prin pointeri (dll-uri), acurateea
maxim de predicie obinndu-se pentru monopredictor cu path de lungime
3. Apelurile virtuale difer de salturile indirecte din celelalte clase, prin
aceea c lungimea ideal a path-ului este uor mai scurt, fiind corelate
probabil cu cele mai recente 2 salturi indirecte anterior executate.
Predictorul hibrid cu tabele separate prezint o acuratee de predicie
inferioar fiecrui monopredictor n parte. Aceasta se datoreaz n primul
rnd faptului c predictoarele componente ale hibridului nu utilizeaz
eficient spaiul din tabelele de target-uri, ntruct procentajul fiecrei clase
de salturi indirecte variaz n funcie de benchmark. De exemplu,
programele C nu conin apeluri virtuale, astfel c cel puin un sfert din
spaiul total al tabelei de target-uri este neutilizat. n cazul predictoarelor cu
tabel partajat are loc o balansare dinamic a adreselor de instruciuni
pentru toate clasele de salturi componente.
Programe
obiectuale
Programe
procedurale
Clasa Structura
surs
Mod de
detecie a
clasei
D
[%]
S
[%]
T D
[%]
S
[%]
T
switch Construcie
switch cu mai
mult de 7
[Dri98b]
Prin opcode:
j MIPS,
jmp SPARC
22.5 2.6 12.7 31.4 35.6 4.9
virtual Apeluri de
metode virtuale
n C++
Folosind EEL
[Lar95]; OVFC
[Roth99]
61.2 69.4 2.1
indirect Restul salturilor
indirecte
Prin opcode: jal
MIPS
jmpl - SPARC
16.3 28.0 2.2 68.6 64.4 5.1
Tabelul 5.1. Procentajul din totalul salturilor indirecte (Dinamice D, Statice S)
care l reprezint fiecare clas i numrul mediu de target-uri (T) distincte generat
de fiecare clas [Dri98b]
Ctigul n acuratee obinut printr-un predictor hibrid bazat pe
clasificare static a opcode-ului este destul de redus, sugernd o prea mare
generalitate a claselor de salturi i totodat faptul c informaiile semantice
obinute de la nivel nalt, sunt insuficiente pentru o acuratee de predicie
ridicat a salturilor indirecte (cunoatere exact a comportamentului
acestora). Pentru o tabel de target-uri cu 1024 intrri, 4-way asociativ,
partajat de cele 3 clase i path (3 indirecte, 2 virtuale, 3 switch)

Contribuii la predicia salturilor / apelurilor indirecte 221
acurateea obinut este de 90.5% superioar totui acurateii obinute cu un
monopredictor two-level adaptiv cu path = 3 (90.2%). n general lungimea
path-ului optim variaz cu capacitatea tabelei i gradul de asociativitate
pentru fiecare clas.
5.2.2.2. CU SELECIE BAZAT PE ARITATE.
Aritatea salturilor indirecte [Dri98b] reprezint numrul target-urilor
distincte generate de fiecare salt indirect. Aceasta poate fi fie determinat n
urma simulrii i cunoscnd informaii de profil (identificarea claselor de
branch-uri) fie estimat printr-o analiz la nivelul codului surs. n urma
studiului efectuat, Driesen [Dri98b] a clasificat instruciunile de salt indirect
n trei categorii: cu un singur target, cu dou target-uri i respectiv cu mai
mult de dou target-uri. Salturile monomorfe (cu un singur target) sunt
executate 34% din totalul salturilor dinamice indirecte iar din cadrul celor
polimorfe, cele care au 2 target-uri sunt executate 17% din totalul salturilor
dinamice indirecte iar cele cu trei sau mai multe adrese destinaie 49%.
Rezultate aproape identice, obinute de autorul acestei lucrri n urma
simulrii benchmark-urilor SPEC95 pot fi sesizate i n subcapitolul de
rezultate 7.1.1, figura 7.16. n urma clasificrii bazate pe aritate, salturile
monomorfe pot fi cu succes predicionate de un monopredictor fr istorie
(BTB, LastValue). O cale lung crete numrul prediciilor greite
ntruct fiecare cale diferit spre un acelai salt cauzeaz un miss de start
rece suplimentar fa de cazul n care istoria ar fi nul. Aceast situaie este
profund duntoare n cazul salturilor monomorfe deoarece, prin inserarea
inutil i repetat n tabela de target-uri a aceleai adrese destinaie aferente
unui singur salt, dar cu fiecare nou path ntlnit, cresc chiar i miss-urile de
capacitate cu repercursiuni negative asupra acurateii prediciei (informaia
suplimentar acioneaz ca zgomot). n schimb, salturile polimorfe
beneficiaz de pe urma istoriei memorate (path): pentru predicia optim a
salturilor cu dou target-uri (duomorfe) este suficient o cale (path) de
lungime 2, iar pentru celelalte o cale de lungime 3 i o tabel de 1024
intrri.
Comportamentul diferit al acestor clase de branch-uri poate fi
exploatat pentru atingerea unei mai bune acuratei de predicie, cu ajutorul
unui predictor hibrid care folosete predictoare componente diferite pentru
fiecare clas n parte. Astfel, dac salturile monomorfe ar fi prezise de un
BTB i nu ar mai accesa o structur de predicie mai complex (path-based)
s-ar reduce un numr semnificativ de miss-uri de start rece i capacitate
determinnd o cretere nsemnat a acurateii de predicie. De exemplu, n

222 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
cazul benchmark-ului jhm Java High-level Class Modiffier (benchmark
obiectual cu 6.000.000 de instruciuni de salt indirect executate), un
predictor cu 256 de intrri genereaz o rat de miss de 2.3% dup predicia
tuturor branch-urilor, iar dac salturile monomorfe sunt nlturate rata de
miss scade la 0.9% [Dri98b]. Cu toate acestea, pot exista i salturi greit
clasificate. De exemplu, un branch duomorf poate efectua salturi
preponderent la una din adresele destinaie, aspect care conduce la concluzia
c ar fi fost poate mai eficient dac saltul ar fi fost clasificat ca monomorf.
n subcapitolul 4.3. sunt prezentate astfel de cazuri ce pot s apar n
execuia programelor, cu exemplificri pe benchmark-urile SPEC95 (SPEC
2000) cu numr bogat de salturi indirecte. De concluzia generat prin
exemplul anterior ar trebui s in cont cercettorii n alegerea mecanismului
de clasificare. Astfel, ar fi mai indicat poate o clasificare a branch-urilor
dup numrul de situaii cnd acestea sufer o modificare a target-ului.
Predictorul hibrid cu mecanism de clasificare bazat pe aritate [Dri98b]
dei este superior ca i acuratee unui monopredictor n aceleai condiii de
cost hardware (mai ales pentru tabele de capacitate redus), i competitiv
(echivalent ca performan 91% acuratee pentru o tabel de 1024 intrri)
cu un predictor hibrid dual-path (vezi figura 5.16), prezint i cteva
dezavantaje:
O Instruciunile de salt indirect trebuie s cuprind n cmpul opcode
(s fie adnotate) un contor de aritate, ceea ce presupune o extensie
a arhitecturii setului de instruciuni.
O ntruct aritatea se determin folosind informaii de profil s-ar
putea ca aceasta s varieze funcie de fiierele de intrare folosite,
sau estimrile fcute n timpul analizei codului s nu fie cele mai
corecte.
5.2.2.3. CU SELECIE BAZAT PE CONFIDEN.
Predictoarele hibride cu selecie bazat pe confiden folosesc dou
sau mai multe predictoare simple (P1 i P2) drept componente, multiplexate
printr-un mecanism de selecie corespondent fiecrei instruciuni statice de
salt indirect. McFarling [McFar93] a propus pentru salturi condiionate o
tabel de selecie a predictorului folosit care asociaz fiecrui PC un
numrtor saturat pe doi bii (P1c{0,1}, respectiv P2c{0,1}) pentru a
pstra comportamentul relativ al celor dou predictoare care dintre ele a
prezis cu acuratee mai mare (vezi figura 5.15). Astfel, dac (P1c-P2c) este
0 atunci predicia va fi fcut de structura care a prezis i ultima oar, dac
(P1c-P2c) este 1 atunci va prezice P1, altfel P2. Dup rezolvarea saltului

Contribuii la predicia salturilor / apelurilor indirecte 223
numrtorul este actualizat pentru a ilustra acurateea relativ a celor dou
predictoare componente. Din punct de vedere al implementrilor comerciale
existente, cel mai performant predictor hibrid este nglobat n procesorul
Alpha 21264 i este n genul celui propus de McFarling [McFar93], unde P1
este un predictor foarte simplu pe un singur nivel line predictor tabel
de numrtoare saturate pe doi bii indexat cu PC-ul saltului [Kes99], iar
P2 este un predictor hibrid la rndul su, mai complex [Kes99]. P2 este
compus dintr-un predictor pe dou niveluri de tip GAg cu 4192 intrri i un
predictor tot pe dou niveluri cu 1024 intrri care rein o istorie local,
fiecare astfel de intrare indexnd o tabel de 1024 numrtoare saturate pe 3
bii [Kes99, Sez02, Jim02b].


Figura 5.15. Structur hibrid de predictoare [McFar93]
Predictorul hibrid implementat de Driesen, folosete dou
monopredictoare (dou predictoare adaptive pe dou niveluri path-based a
cror nivel History Pattern are dimensiunile k1 respectiv k2, cu k1k2).
Fiecare intrare n tabela de target-uri are ataat un numrtor de confiden
pe n bii, n {14}, care exprim de cte ori predictorul respectiv a generat
o predicie corect n ultimele 2
n
-1 accese ale respectivei intrri. La
nlocuirea unei intrri numrtorul aferent va fi resetat. Valoarea va fi
prezis de monopredictorul care va avea o confiden mai mare pe locaia
corespunztoare din tabela proprie. Fiecare salt indirect va actualiza ambele
monopredictoare (path-ul respectiv numrtorul de confiden aferent).


224 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 5.16. Predictor hibrid dual-path [Dri98a]
Schema reprezint o generalizare natural a celei propus de
McFarling. Dac n cazul unui BTB (pattern-ul fiind de lungime 0)
informaia de confiden poate fi considerat per-branch, n cazul unui
predictor path-based pe dou niveluri cu pattern > 0 informaia de
confiden corespunde mai degrab fiecrui path, dect fiecrui branch,
procesul de selecie (meta-predicie) a target-ului fiind mai rafinat dect n
cazul lui McFarling. Meta-predicia lui Driesen [Dri98a] evit situaii de
genul: n lipsa unei informaii de context (path) un salt indirect la care se
ajunge pe dou ci diferite, s partajeze un acelai numrtor de confiden.
Pentru o tabel 4-way asociativ acurateea optim de predicie obinut cu
un predictor hibrid dual-path variaz ntre 91.02% pentru 1024 intrri i
94.05% pentru 8192 intrri. Simulrile [Dri98a] au dovedit c
numrtoarele de confiden pe 2 bii sunt suficiente pentru o selecie
optim a monopredictoarelor componente, iar cea mai bun performan se
obine cnd un monopredictor folosete o cale scurt (k1{13}) iar cellalt
o cale lung (k2{512}). Predictorul hibrid a dovedit o acuratee de
predicie superioar unui predictor non-hibrid n aceleai condiii de cost
hardware, n ciuda faptului c cele dou monopredictoare sufer mai mult
datorit miss-urilor de capacitate i conflict. Mai mult, pentru predictoare
non-hibride cu asociativitate 2-way sau 4-way de capacitate mai mare de
2048 intrri se obine o acuratee mai mare de predicie prin hibridizare
dect prin dublarea capacitii tabelei. Pentru tabele de dimensiuni reduse
(64512 intrri) efectul creterii gradului de asociativitate rmne mai
puternic dect efectul hibridizrii.




Contribuii la predicia salturilor / apelurilor indirecte 225
5.2.2.4. STRUCTUR DE PREDICIE PENTRU EXPLOATAREA
CORELAIEI VARIABILE.
Din cadrul predictoarelor hibride poate face parte, datorit
mecanismului de clasificare al salturilor pe care l presupune, i schema de
predicie propus de Stark [Sta98] vezi figura 5.17, care, bazat pe
informaii de profil, exploateaz corelaia, variabil ca i lungime, ntre
instruciunea de salt indirect curent i ultimele salturi condiionate sau
indirecte. Implementarea hardware se bazeaz pe un set de funcii de
dispersie care combin un numr variabil de target-uri (de la 1 la N, unde N
reprezint numrul maxim de salturi care sunt corelate cu saltul indirect
curent). Acesta constituie primul nivel de istorie (buffer de istorie global a
target-urilor) i cuprinde ultimele N adrese destinaie (complete sau
comprimate pe k bii) aferente salturilor condiionate, indirecte sau reveniri
din subrutin. Funciile de dispersie genereaz un set de N indici care atac
un multiplexor cu rol de selecie. Multiplexorul este controlat fie de
compilator, n urma unor consistente informaii de profil aferente fiecrui
salt indirect, fie de ctre hardware, sau chiar o combinaie dintre cele dou.
Compilatorul i link-editorul sunt responsabili de comunicarea funciei de
dispersie potrivite structurii hardware de predicie a salturilor, soluie
realizabil prin modificarea arhitecturii setului de instruciuni. Formatul
instruciunii procesorului Alpha AXP asigur un numr de bii care pot fi
utilizai n stocarea indicelui funciei de dispersie necesar la indexarea
structurii de predicie. Predictorul indexat cu un path de lungime variabil
necesit dou accese secveniale la tabelele componente pentru a face
predicie: tabela indicilor funciilor de dispersie adresat cu cei mai puin
semnificativi bii ai PC-ului saltului indirect curent i respectiv tabela de
predicie indexat cu informaia emis la ieirea multiplexorului.


Figura 5.17. Structur de predicie indexat cu un path de lungime variabil
[Sta98]

226 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Simulri laborioase pe 8 programe de test din care 4 SPEC95 (gcc, li,
m88ksim, perl) i respectiv 4 non-SPEC95 (interpretor de Ghostscript - gs,
interpretor de limbaj de programare obiectual Python python, un program
de desenare plot i un procesor de documente groff, ultimele dou sub
GNU) au dovedit o acuratee medie de predicie pentru salturile indirecte de
87%, dar ntr-o plaj de valori de la 71% (python) pn la 99% (perl)
[Sta98]. Comparativ cu Chang [Cha97], la un cost de implementare de 2k
octei predictorul dezvoltat de Stark reduce numrul prediciilor greite cu
36.4% chiar i fr folosirea informaiilor de profil, pentru un N fixat,
determinat ca fiind path-ul optim (furnizeaz cel mai mic numr mediu de
predicii greite pe benchmark-urile mai sus amintite). Contieni de
rezultatele totui inferioare n ceea ce privete acurateea prediciei salturilor
indirecte, proiectanii structurii de predicie cu path de lungime variabil au
propus i cteva idei noi care s vin n sprijinul cercettorilor, pentru
obinerea de performane superioare n domeniul paralelismului la nivelul
instruciunilor i firelor de execuie. O prim posibilitate interesant ar fi
salvarea istoriei, premergtoare unor structuri de control cum ar fi bucle de
program sau apeluri de subrutine, i restaurarea acesteia dup ncheierea
respectivelor structuri. Astfel, naintea fiecrui apel de procedur este
stocat n stiv istoria global a salturilor anterioare apelului. n acest fel,
vechea istorie, preluat din stiv la revenirea din procedur, poate fi
combinat cu istoria recent, obinut pe timpul apelului proceduri, pentru
identificarea de corelaii ntre salturi mai ndeprtate [Tho03]. O alt
ncercare ar putea fi ndreptat spre nlocuirea informaiilor de profiling cu o
euristic generat de compilator pentru selecia funciei de dispersie i
implicit a dimensiunii path-ului, sau utilizarea perceptronului n obinerea
informaiilor de profil.
O soluie proprie, pornit de la premisa c nu toate salturile (indirecte)
sunt corect determinate de pattern-uri de aceeai lungime [Tho03, Sta98], i
preluat din predicia valorilor i a salturilor condiionate [Dri98a], se refer
la nlocuirea unui predictor PPM complet, mai performant dect unul
adaptiv pe dou niveluri n condiii echivalente de cost hardware dar mai
scump de implementat, cu un predictor hibrid a crui componente le
reprezint dou predictoare contextuale cu pattern-uri de lungime fix,
diferite (P1 = Markov(m) i P2 = Markov(n), cu mn). n acest sens a se
vedea subcapitolul de cercetri proprii 5.3.3.2.


Contribuii la predicia salturilor / apelurilor indirecte 227
5.2.2.5. SELECIA DINAMIC A CONTEXTULUI RELEVANT PENTRU
PREDICIE.
Selecia dinamic a caracteristicilor cu adevrat relevante pentru
predicie, bazat pe arbori de decizie evit creterea exponenial a
structurilor de predicie n cazul utilizrii unei bogate informaii la intrare
[Fern03]. Acurateea prediciei obinut de un predictor de salturi bazat pe
arbori de decizie, folosind ca i caracteristici istoria salturior, este
comparabil cu acurateea prediciei furnizat de un predictor convenional,
facilitnd asemeni Perceptronului lui Jimenez [Jim02] utilizarea unui numr
ridicat de caracteristici la un cost liniar. De exemplu, un arbore de decizie de
adncime 0 (un singur bit din 64 de bii de istorie local + global stabilete
predicia) atinge o performan egal sau uor superioar dect cele mai
neperformante versiuni de predictoare (capacitate redus) GAp i PAp cu o
istorie pe 16 bii.
Arborii de decizie frecvent utilizai n aplicaiile de inteligen
artificial (machine learning) sunt utili n domenii n care, acurateea
prediciei poate fi realizat din reguli care implic un numr restrns de
caracteristici, selectate dintr-un set lrgit al acestora. Un arbore de decizie
de adncime d efectueaz predicia bazat pe reguli ce folosesc cel mult d+1
caracteristici pentru fiecare predicie, n timp ce predictoarele adaptive,
corelate pe dou niveluri utilizeaz un numr considerabil mai mare de
caracteristici.
Arborii de decizie sunt constituii din noduri interne de test, care
examineaz cte o caracteristic a obiectului, i frunze, care indic
clasificarea obiectului. Arborii de decizie sunt folosii pentru a clasifica
obiectele prin testarea iniial a caracteristicii specificate n nodul rdcin, i
apoi urmrind direcia indicat de rezultatul testului n jos, ctre urmtorul
nivel al arborelui. Rezultatul testelor de pe fiecare nivel determin o cale
unic pn la o frunz, pentru fiecare obiect. Cnd se atinge un nod frunz,
clasificare asociat respectivei frunze este asignat obiectului.
Caracteristica folosit pentru mprire productoare a celor mai
omogene partiii este utilizat pentru testul nodului rdcin. Deoarece este
posibil ca partiiile astfel rezultate s fie nc neomogene, se creeaz
recursiv sub-arbori pentru fiecare partiie creat prin aplicarea testului
asupra partiiei anterioare. Recursivitatea se oprete n momentul n care
toate partiiile din frunzele arborelui aparin aceleiai clase, cnd nu mai
sunt caracteristici care s fie testate, sau cnd dimensiunea subpartiiilor este
prea mic nct este puin probabil ca o continuare a procesului de separare
s fie util [Cal97].

228 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Exist cteva explicaii poteniale a superioritii predictorului bazat
pe arbori de decizie:
Prima dintre acestea o reprezint abilitatea arborilor de decizie de a
selecta cele mai importante (relevante) caracteristici pentru predicie,
aferente fiecrei instruciuni de salt, coroborat cu faptul c unele
dintre acestea sunt predicionate mai bine pstrnd o istorie global,
altele reinnd o istorie local, iar pentru anumite salturi fiind util
pstrarea unei istorii combinate (local + global).
O a doua explicaie se refer la dimensiunea istoriei folosit pentru
predicie. Dac n cazul predictoarelor adaptive, corelate pe dou
niveluri istoria este limitat la 16 bii datorit costului hardware
exponenial, predictoarele bazate pe arbori de decizie obin o
performan ridicat dac baza de selecie a caracteristicilor este
suficient de mare (32 de bii), la un cost liniar ns.
A treia justificare const n timpul inferior de warm-up aferent
predictorului bazat pe arbori de decizie, datorit abilitii de ignorare
a caracteristicilor irelevante pentru predicie. Prin pstrarea
informaiilor de predicie irelevante n cazul predictoarelor adaptive
corelate pe dou niveluri se dubleaz numrul automatelor care trebuie
aduse ntr-o strare corespunztoare pentru o predicie corect (warm-
up).
Predictorul bazat pe arbori de decizie opereaz ntr-o manier
dinamic n dou etape, similar cu predictoarele clasice:
Prima, o reprezint predicia, realizabil n faza de aducere a
instruciunii i necesit ca informaii la intrare un vector de
caracteristici (istorie local + istorie global) iar la ieire va genera pe
un bit dac saltul curent supus prediciei se va face (1) sau nu se va
face (0).
n a doua etap, se realizeaz actualizarea strii predictorului bazat pe
o pereche format dintr-un vector de caracteristici i rezultatul real al
saltului, pentru mbuntirea prediciilor viitoare bazate pe aceleai
informaii de intrare.
Salvarea de resurse n cazul arborilor de decizie se datoreaz
mecanismului de selecie al vectorilor de trsturi (caracteristici). Astfel,
dect s memoreze cte o predicie pentru fiecare vector de caracteristici,
prin partiionarea mulimii de vectori de caracteristici ntr-un numr mai mic
de subseturi, este stocat cte o predicie pentru fiecare subset. Metoda d
randament maxim cnd un procentaj ridicat de vectori din fiecare subset
predicioneaz acelai rezultat; este mai probabil ca predicia unui subset de
vectori s fie mai uniform dect cea a setului care include respectivul
subset.

Contribuii la predicia salturilor / apelurilor indirecte 229
O definiie sumar a arborilor de decizie este urmtoarea: un arbore
de decizie este un arbore binar ale crui noduri conin o caracteristic (un
bit sau mai multe informaii) sau negaia acesteia. Adncimea unui nod al
arborelui este dat de numrul de arce care traverseaz calea de la
rdcin spre respectivul nod. Adncimea arborelui constituie adncimea
celui mai ndeprtat nod de rdcin. n aceleai condiii primare (dndu-se
un arbore de decizie i un vector de caracteristici) predicia arborelui poate
fi definit recursiv, astfel:
Dac rdcina arborelui este o frunz (arborele este constituit de fapt
dintr-un singur nod) atunci valoarea prezis va fi rezultatul testului
nodului rdcin (1 sau 0), pentru vectorul de caracteristici dat.
n caz contrar, este evaluat nodul rdcin pentru vectorul de
caracteristici dat i funcie de rezultat (1 sau 0), va prezice subarborele
drept sau stng al arborelui.
Predicia hardware bazat pe arbori de decizie presupune antrenarea
acestora folosind un mecanism de selecie dinamic a corelaiei
caracteristicilor (banc de numrtoare cu semn, cte unul aferent fiecrei
caracteristici de intrare). Acest mecanism urmrete alegerea celei mai
corelate caracteristici dintr-un set lrgit al acestora. Spre deosebire de
predictoarele bazate pe tabele n care numrtoarele erau saturate i semnul
acestora indica predicia, n cazul arborilor de decizie este foarte important
i amplitudinea (valoarea absolut), care stabilete gradul de corelaie al
respectivei caracteristici cu rezultatul saltului curent, supus prediciei. Dup
observarea unei perechi de tipul vector de caracteristici / rezultat salt, n
faza de actualizare a predictorului sunt incrementate toate contoarele
aferente caracteristicilor cu valori identice cu cea a rezultatului saltului i
decrementate celelalte (vezi figura 5.18).


Figura 5.18. Actualizarea contoarelor de corelaie

230 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Astfel, dup ntlnirea unui numr ridicat de perechi formate din
vector de caracteristici i rezultat salt, un contor cu amplitudine ridicat
dovedete o puternic corelaie a caracteristicii aferente cu saltul curent
(pozitiv sau negativ, n funcie de semnul contorului).
Caracteristica cu valoarea contorului cea mai mare reprezint cea mai
corelat
1
dintre acestea i va avea un rol hotrtor pentru predicie (vezi
figura 5.19). La finele acestui subcapitol este descris i o alt modalitate de
selecie a caracteristicii optime dup care se face predicia la nivelul fiecrui
nod.


Figura 5.19. Determinarea celei mai predictibile caracteristici
n continuare este descris structura arborelui de decizie datele
componente i funcionalitatea fiecrui nod precum i modul de combinare
al nodurilor individuale ntr-un arbore capabil s furnizeze predicia. Se
disting dou tipuri de noduri: frunze (noduri terminale) i noduri interne,
care au doi copii (subarbore stng respectiv drept) cu rol de predicie
fiecare. Funcionalitatea celor dou tipuri de noduri este aproape identic i
se bazeaz pe cele dou moduri de operare, anterior descrise (predicie i
actualizare). Starea intern a fiecrui nod este ilustrat prin selectorul de
context relevant pentru predicie (corelaia caracteristicilor de intrare), la
care se mai adaug nc dou informaii suplimentare (o caracteristic
constant i predicia provenit de la nivelul copiilor).
Fiecare nod intern realizeaz o funcie de spargere respectiv
combinare a dou predictoare copil pentru a prezice cu o acuratee mai
mare bazat pe irul de perechi vector de caracteristici / rezultate salt,
observate anterior de acel nod. Prin spargere se nelege o divizare a
irului de perechi n dou subiruri, conform caracteristicii celei mai
predictibile (f
split
). Fiecare din cele dou subiruri este transmis predictorului
copil corespunztor; ntruct target-urile (rezultatele salturilor) vor fi mai
uniforme, cele dou subiruri vor fi mai uor de prezis dect irul original.
Nodul printe reine predicia generat de unul din cele dou predictoare
copil i poate s o foloseasc sau s o ignore. La nivelul nodului printe,

1
corelat cu comportamentul saltului (T / NT) pe o lung perioad de timp real

Contribuii la predicia salturilor / apelurilor indirecte 231
pe lng celelalte caracteristici de intrare, se mai adaug una, f
sub
, care
reprezint recomandarea predictorului copil. Dac contorul ataat va avea
amplitudinea mai mare dect a celei mai corelate caracteristici, atunci nodul
printe va ine cont de recomandarea predictorului copil (va folosi
respectiva predicie). Cea de-a doua caracteristic suplimentar celor de
intrare, o reprezint o caracteristic constant f
c
, care identific dac
irului de vectori de caracteristici aferente unui nod, i corespunde target-uri
aproape uniforme. Figura 5.20 ilustreaz cum un nod divide un ir de
perechi vector de caracteristici / rezultate salturi n funcie de
caracteristica cea mai predictibil. Practic, toate perechile de vectori / target-
uri (F
1
F
6
) au fost anterior ntlnite astfel nct la momentul prediciei
fiecare nod i cunoate starea intern a contoarelor de corelaie.


Figura 5.20. Divizarea unui ir de perechi vector de caracteristici / rezultat salt n
funcie de cea mai predictibil caracteristic (f
split
)
n figura 5.21 sunt descrise faza de predicie i informaiile sumare din
nodul intern care concur la aceasta. Pe lng caracteristicile de intrare f
1

f
n
i cele suplimentare f
c
, respectiv f
sub
, pentru realizarea prediciei mai sunt
utile urmtoarele informaii binare, rezultate ca efect al unor funcii
aplicabile caracteristicilor de mai sus:
- sign(f
split
) reprezint semnul corelaiei celei mai corelate
caracteristici (1 dac corelaia este pozitiv, 0 dac corelaia este
negativ).
- best(f
1
,, f
n
) returneaz indicele celei mai corelate caracteristici pe
baza valorilor exprimate de contoarele asociate caracteristicilor.
Astfel, best-index reprezint indicele caracteristicii f
split
.
- use-f
c
:= (f
c
= best(f
c
, f
1
,, f
n
, f
sub
)).
- use-f
sub
:= (f
sub
= best(f
c
, f
1
,, f
n
, f
sub
)).

232 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
- sign(f
c
) indic semnul caracteristicii constante.


Figura 5.21. Informaiile necesare i modul de realizare a prediciei la nivelul unui
nod intern
Rolul multiplexorului din partea superioar a figurii este de a selecta
pe baza valorilor biilor use-f
c
i use-f
sub
care caracteristic va stabili
predicia: f
split
, f
c
sau f
sub
. Algoritmul de predicie poate fi descris prin
urmtoarea secven:
/* se consider o funcie predict care ntoarce o valoare boolean i
care primete ca parametru un nod al arborelui de decizie */
if (use-f
c
= 1) then
predicie = sign(f
c
) /* ntruct f
c
=1 rezult c dac
exist o corelaie pozitiv atunci
predicie = 1, altfel predicie = 0. */
else
if (use-f
sub
=0) then /* se ignor recomandarea
predictorului copil */
predicie = V(f
split
) sign(f
split
)
else
if (V(f
split
) sign(f
split
)=0) then // predicia va fi dat de
// predictorul copil stng
predicie = predict(subarbore_stng)
else // predicia va fi dat de
// predictorul copil drept
predicie = predict(subarbore_drept)

Contribuii la predicia salturilor / apelurilor indirecte 233
Blocul Select genereaz caracteristica cea mai predictibil de indice
Best-index. Rolul celor dou blocuri XOR este de a furniza valoarea
caracteristicii sau negaia acesteia, n funcie de gradul de corelaie existent
(mai precis semnul acesteia). Rolul multiplexorului din partea inferioar a
figurii este de a actualiza caracteristica f
sub
cu predicia subarborelui stng
sau drept n funcie de caracteristica f
split
i semnul acesteia.
n faza de actualizare, pe baza perechii curente vector de
caracteristici / rezultat salt, sunt modificate contoarele de corelaie
(incrementate / decrementate), aferente fiecrei caracteristici. n plus, nodul
curent activeaz predictorul copil doar cel care furnizeaz caracteristica
f
sub
, pentru actualizarea contoarelor aferente caracteristicilor acestuia.
Actualizarea trebuie s aib loc chiar dac n procesul de predicie, nodul
printe ignor recomandarea predictorului copil. Cu noile contoare se
trece la actualizarea informaiilor sumare (sign(f
split
), sign(f
c
), best-index,
use-f
c
i use-f
sub
). De asemenea, trebuie specificat c actualizarea se aplic
n paralel tuturor nodurilor de-a lungul cii formate din nodurile copil
selectate de la rdcin pn la frunze, dar nu i celorlalte noduri.
n acest moment sunt cunoscute toate informaiile i funcionalitatea
unui nod intern. Spre deosebire de acestea, nodurile terminale (frunze) difer
prin faptul c nu rein i actualizeaz caracteristica f
sub
, neexistnd
predictoare copil care s o genereze. Nodurile interne i cele terminale
sunt conectate ntr-un arbore de decizie cu rol de predictor hardware
dinamic. Conexiunile realizate nu altereaz operaiile de baz ale fiecrui
nod, cu o singur excepie: divizarea nodurilor trebuie fcut de fiecare dat
dup o alt caracteristic. Un nod nu trebuie spart dup o caracteristic
care a fost anterior folosit la divizarea unui nod strmo.
n continuare este descris modul de implementare hardware, la
nivel de cip, a structurilor de date arborescente, anterior prezentate. Cheia
implementrii realiste a predictorului hardware bazat pe arbori de decizie
este de a organiza informaiile colectate n nodurile arborelui sub forma
unor tabele care ocup un spaiu acceptabil i necesit timpi de acces redus.
n figura 5.22 este prezentat structura de predicie, compus din
logica de decizie (arborele DDT), o tabel de predicie care stocheaz
informaiile sumare aferente fiecrui nod al arborelui i tabela de contoare
de corelaie aferente caracteristicilor din fiecare nod.


234 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 5.22. Implementarea predictorului hardware bazat pe arbori de decizie -
DDT
Tabela de corelaii este un masiv bidimensional, indexat dup o
dimensiune cu cei mai puin semnificativi bii ai adresei instruciunii de salt
(PHF prediction hash function) iar dup cealalt dimensiune cu nodul
arborelui. Practic, n cazul unei instruciuni de salt sunt selectate toate
contoarele de corelaie aferente caracteristicilor din fiecare nod, pentru a
putea fi procesate la nevoie, n paralel de logica de decizie. Contoarele de
corelaie sunt incrementate / decrementate la cunoaterea rezultatului real al
saltului n faza de actualizare.
n faza de predicie, PC-ul instruciunii de salt i valorile vectorului de
caracteristici constituie informaia de intrare n structura hardware de
predicie. Tabela de predicie este indexat cu cei mai puin semnificativi
bii ai PC-ului i sunt selectate informaiile sumare aferente fiecrui nod al
arborelui de decizie. Acestea, folosite n conjuncie cu caracteristicile de
intrare, permit fiecrui nod s emit decizia: fie s predicioneze bazat pe o
singur caracteristic (constant, sau cea mai predictibil), fie s preia
predicia generat de predictorul copil cel mai potrivit. Cu toate c selecia
(decizia) poate fi fcut n paralel de ctre toate nodurile, predicia global
(a arborelui) se obine din combinarea deciziei tuturor nodurilor pentru a
selecta o cale prin arbore practic un proces secvenial n adncimea
arborelui. Dup stabilirea deciziei la nivelul fiecrui nod, informaia circul
n sens invers, dinspre frunze spre rdcin, pe o singur cale anterior

Contribuii la predicia salturilor / apelurilor indirecte 235
stabilit, pentru a genera predicia ntregului arbore. Timpul de
execuie a acestei operaiuni este proporional cu adncimea arborelui.
Pentru evitarea complexitii structurii de predicie, o parte din
mecanismele implementate la nivelul fiecrui nod (determinarea contorului
de corelaie maxim, folosirea multiplexorului pentru selecia caracteristicii)
sunt partajate ntre mai multe noduri (ntruct se alege o singur cale de la
frunze la rdcin) i de asemenea, partajeaz caracteristicile de intrare.
Logica pentru determinarea contorului de corelaie maxim trebuie
multiplicat astfel cu adncimea arborelui de decizie.
n continuare este realizat o estimare a dimensiunii celor dou tabele
hardware, ca o funcie de adncimea arborelui (fie d), numrul de
caracteristici de intrare monitorizate (fie n) i numrul de bii pe care sunt
reprezentate contoarele de corelaie (fie b). Astfel, dimensiunea fiecrei
intrri n tabela de corelaie este dat de formula 5.4:
SizeOfCTentry = nr_frunzenr_bii_per_frunz +
nr_noduri_internenr_bii_per_nod_intern =
2
d
[nr_contoare_per_frunzb] + (2
d
-1)[nr_contoare_per_nod_internb] =
2
d
[(n+1)b] + (2
d
-1)[(n+2)b] (5.4)
n estimarea fcut s-a inut cont c n nodurile terminale exist (n+1)
contoare de corelaie aferent caracteristicilor f
c
, f
1
,, f
n
, iar nodurile interne
mai adaug cte un contor pentru caracteristica f
sub
predicia subarborelui
copil.
Dimensiunea fiecrei intrri n tabela de predicie este dat de
formula:
SizeOfPTentry = nr_frunzenr_bii_per_frunz +
nr_noduri_internenr_bii_per_nod_intern =
2
d
nr_bii_info_sumare_per_frunz+(2
d
-1)
nr_bii_info_sumare_per_nod_intern = 2
d
(n+2) + (2
d
-1)(n+4) (5.5)
n aceast ultim estimare s-a inut cont c fiecare informaie
privitoare la frunze din tabela de predicie conine pe lng caracteristicile
de intrare f
1
,, f
n
i un bit care indic dac va fi folosit caracteristica
constant f
c
sau caracteristica cea mai predictibil f
split
, precum i un bit
pentru semnul caracteristicii alese. Se observ c dimensiunea unei intrri n
tabela de predicie este mai mic dect dimensiunea unei intrri n tabela de
corelaii cu un factor egal cu b, favoriznd timpi de acces foarte rapizi,
eseniali n faza critic de predicie.
Cu toate c articolul lui Fern [Fern03] este criticabil, ntruct nu
prezint care ar fi limita superioar a adncimii arborelui de decizie pentru
ca ideea s rmn fezabil, i de asemenea nu expune ctigul global de
performan al unei microarhitecturi speculative care nglobeaz predictorul

236 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
hardware bazat pe arbori de decizie fa de una standard, articolul este
remarcabil prin faptul c ofer perspectiva utilizrii n procesul de predicie
a unui bogat numr de caracteristici (context amplu) la un cost hardware
liniar. Rmne ns de explorat dac latena de predicie este comparabil cu
cea a predictoarelor moderne utilizate n implementrile comerciale.
Dac mecanismul de predicie propus de Fern [Fern03] se bazeaz pe
contoare asociate fiecrei caracteristici de intrare pentru a determina
caracteristica optim dup care se face predicia la nivelul fiecrui nod, n
[Des04a] se propune folosirea unei metrici (indexul Gini) pentru a
determina caracteristicile individuale sau pattern-uri (informaii statice
sau dinamice aferente instruciunilor de salt condiionat) cu bune capaciti
discriminatorii, utile apoi n procesul de predicie bazat pe arbori de
decizie. Indexul Gini pentru un set de date S se definete astfel:

=
=
1
0
2
1 ) (
c
i
i
p S Gini (5.6)
unde,
c numrul de clase posibile,
C
i
clasa pentru i=0, , c-1,
s
i
numrul de exemple n C
i
,
S
s
p
i
i
= frecvena relativ a clasei i n setul S
Suma ptratelor probabilitilor este cunoscut n literatur
sub numele de energie informaional noiune introdus de
matematicianul romn Octav Onicescu pentru aprecierea calitii, capacitii
i eficienei unui mediu informaional [Oni66].

=
1
0
2
c
i
i
p
Practic metrica Gini indic puritatea (omogenitatea) partiiilor n setul
de date S. n cazul prediciei salturilor se disting dou clase
(corespunztoare salturilor care se fac, respectiv care nu se fac); rezult c
indexul Gini ia valori n intervalul [0, 0.5]. Dac toate datele din S aparin
aceleiai clase, Gini(S) ia valoarea minim 0, ceea ce nseamn c toate
salturile care formeaz setul S au comportament similar: taken sau nottaken
clase pure. Dac Gini(S) este egal cu 0.5, salturile sunt distribuite uniform
ntre clasa salturilor care se fac, respectiv clasa salturilor care nu se fac. Cu
ct valoarea lui Gini este mai mic cu att capacitatea sa discriminatorie este
mai mare.
Calitatea de split (divizare) [Des04a] dup o anumit caracteristic n
k subseturi S
i
se calculeaz ca o medie ponderat a indicilor Gini afereni
subseturilor:

Contribuii la predicia salturilor / apelurilor indirecte 237

=
=
1
0
) (
k
i
i
i
split
S Gini
n
n
Gini (5.7)
unde,
n
i
este numrul de exemple din subsetul S
i

=
=
1
0
k
i
i
n n (5.8)
n cercetrile sale Desmet calculeaz metrica Gini pe baza unor
prealabile execuii a programelor de test folosind o serie de predictoare
clasice din literatur (bimodal, GAg, PAg, Gshare) [Bur97], furniznd la
ieire statistici laborioase referitoare la comportamentul salturilor (Taken /
NotTaken) pentru fiecare din pattern-urile de caracteristici aprute.
Pentru o mai bun nelegere, n continuare se prezint detaliat
metodologia de calcul a metricii Gini. Considerndu-se un pattern de
caracteristici alctuit din 10 bii de istorie global rezult un numr de
k=2
10
=1024 seturi distincte de caracteristici (situaii ce pot s apar n
execuia programelor). Astfel, fcnd referire la formula 5.7 rezult c:
n = numrul total de instruciuni dinamice de salt din benchmark-ul
analizat
i{01023} indicele subsetului
n
i
= numrul de salturi care apar n contextul de istorie global
avnd codificarea binar valoarea i. ntruct este posibil ca unele
contexte din totalul de 1024 s nu apar pe parcursul execuiei
programului de test atunci valorile n
i
corespondente sunt nule.
Pentru restul de pattern-uri (la care n
i
0) se calculeaz
unde = proporia de instruciuni
Taken aprute n respectivul context (pattern) respectiv =
procentajul de instruciuni NotTaken aprute n acelai context.
2
2
2
1
1 ) (
i i i
p p S Gini =
1
i
p
2
i
p
n final se determin Gini
split
ca fiind suma ponderat a indicilor
Gini(S
i
) afereni tuturor subseturile care apar, conform formulei 5.7.
Funcia Gini
split
este calculat pentru toate caracteristicile posibile
(folosind un singur bit de istorie, apoi 2 bii, amd), iar caracteristica avnd
Gini
split
minim este aleas ca fiind cea dup care se poate face predicia n
nodurile arborelui de decizie [Des04a].
n implementrile sale Desmet analizeaz mai multe tipuri de
caracteristici: dinamice istoria global, local, o dispersie a adresei
salturilor cu istoria global i respectiv statice direcia saltului (nainte /
napoi), tipul saltului (bne, bge, blt, etc.). Rezultatele obinute, din punct de

238 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
vedere al indicelui Gini, pentru istoria local sunt superioare celor calculate
pentru restul tipurilor de caracteristici, oarecum firesc ntruct istoria local
este reinut per branch. Relativ la acest tip de istorie, un numr redus de bii
determin o capacitate de discriminare ridicat, adugarea de bii
suplimentari neducnd la o mbuntire a indicelui Gini. n ce privete ns
celelalte caracteristici, o cretere a numrului de bii conduce la un Gini mai
performant (cu o capacitate discriminatorie mai bun). n fine, o ultim
concluzie desprins din [Des04a] exprim faptul c schemele de predicie
care folosesc ca intrri caracteristicile amintite anterior avnd valori foarte
mici pentru indicele Gini sunt caracterizate de acuratei ridicate de predicie,
dovedind c respectiva metric constituie un bun indicator pentru studiul
caracteristicilor de predictibilitate ale salturilor.
O idee relativ interesant o reprezint utilizarea arborilor de decizie
pentru mbuntirea prediciei statice a branch-urilor. n [Des04],
extinznd ideea originar a lui Ball i Larus [Ball93] de predicie static
bazat pe euristici, Desmet arat cum arborii de decizie pot fi folosii pentru
a mbunti respectivul mecanism de predicie, pe dou ci: determinnd n
mod automat o ordine optim de aplicare a euristicilor, i gsind n mod
automat euristici suplimentare.
Practic, avnd un salt caracterizat de un vector de caracteristici, se
urmrete determinarea crei clase aparine respectivul salt: clasa taken
(clasa salturilor care se fac) sau clasa not taken (clasa salturilor care nu se
fac), bazat pe clasificarea anterioar a unor salturi similare din setul de
antrenament. Arborii de decizie pot fi folosii pentru determinarea
apartenenei salturilor la o clasa sau alta.
Algoritmul lui Ball i Larus [Ball93] folosete n cadrul euristicilor lor
informaii privitoare la opcode-ul salturilor, operanzi ai acestora testai n
condiia de salt precum i caracteristici ale basic block-urilor succesoare
instruciunii de salt supus prediciei. Respectivul algoritm poate fi
mbuntit prin utilizarea arborilor de decizie pentru clasificarea salturilor,
optimiznd secvena de aplicare a euristicilor i adugnd dou noi
informaii euristice: una bazat pe relaia de post-dominare dintre basic-
block-ul curent i succesorul lui, i respectiv, una bazat pe distana dintre
instruciunea de salt i cea de care aceasta depinde (instruciunea care
definete operandul testat n opcode-ul respectivului salt) [Des04].
Modelul propus de Ball i Larus[2] ncepe prin a clasifica salturile ca
fiind salturi de tip loop, respectiv non-loop. Spre exemplu, instruciunile
repetitive de tip for, while sunt prezise foarte bine de euristica de tip loop,
predicia fiind c saltul (napoi) se face (se reia bucla, iar condiia de ieire

Contribuii la predicia salturilor / apelurilor indirecte 239
forat din bucl nu se face). n continuare sunt prezentate euristicile se
ocup de salturile non-loop:
- euristica pointer prezice c, n majoritatea cazurilor, pointerii sunt ne-
nuli, i c doi pointeri sunt egali doar ocazional; astfel, dac un branch
compar un pointer cu null, sau doi pointeri ntre ei, se prezice c saltul
se face pe condiia false.
- euristica opcode pleac de la premiza c multe programe folosesc
numere negative pentru a codifica valori de eroare; astfel, un branch care
testeaz dac un ntreg este mai mic sau egal cu zero, este prezis taken
(saltul se face) pe condiie false.
- euristica de tip nceput de bucla (Loop Header) prezice c buclele sunt
mai degrab executate dect evitate.
- euristica call prezice c un salt mai curnd evit un apel de funcie
dect s-l execute. Dei surprinztor, un basic block succesor unui
branch, care nu este post-dominant i care conine un Call, are tendina
de a nu fi executat. Apelurile de cele mai multe ori sunt necondiionate i
apar din funcii de bibliotec (printf, qsort, DLL-uri).
- euristica store prezice c saltul nu se face dac blocul succesor care nu
este post-dominant conine o instruciune de tip Store. Introdus mai mult
din curiozitate [Ball93], respectiva euristic i-a dovedit utilitatea mai
ales n cazul benchmark-urilor n virgul mobil.
- euristica return prezice c un succesor care conine un Return nu va fi
executat. S-a observat c aceste basic block-uri sunt fie reveniri forate
din recursivitate, condiii de eroare mai rar ntlnite, ntreruperi sau
excepii i atunci de cele mai multe ori este mai probabil s nu se ajung
n aceste basic bloc-uri.
O metric folosit n evaluarea performanei fiecrei euristici o
reprezint acoperirea (coverage). Aceasta constituie numrul de salturi
dinamice crora li se aplic respectiva euristic. Tabelul urmtor prezint
acoperirea i rata de miss aferente fiecrei euristici obinute de Ball n
simulrile proprii realizate pe o arhitectur MIPS [Ball93]:

Euristica Acoperirea Rata de miss
Loop 35% 12%
Pointer 21% 40%
Opcode 9% 16%
Loop Header 26% 25%
Call 22% 22%
Return 22% 28%
Store 25% 45%
Tabelul 5.2. Statistici privind performana euristicilor propuse de Ball i Larus
[Ball93]

240 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
n cazul n care se pot aplica mai multe euristici, apare o problema
cnd prediciile generate de respectivele euristici nu coincid. O ordonare n
aplicarea euristicilor rezolv aceast problem: de ndat ce o euristic se
aplic, saltul este prezis de ctre aceasta i toate celelalte euristici care mai
pot fi aplicate se ignor. Dac nu se aplic nici o euristic, se face o
predicie aleatoare. Ordonarea euristicilor poate avea un impact important
asupra ratei de miss global. Ball i Larus au determinat urmtoarea ordine
fix de aplicare a euristicilor: Loop Pointer Call Opcode Return
Store LoopHeader [Ball93]. Pentru identificarea ordinii optime, s-au
evaluat toate combinaiile posibile, procedeu ns mare consumator de timp.
n plus, chiar dac se determin ordinea optim pentru o anumit
arhitectur a setului de instruciuni (ISA), compilator i limbaj de
programare, nu nseamn c pe o alt ISA ordinea optim este aceeai
[Ball93, Flo03a]. Pentru a determina ordinea optim n [Des04] se propune
folosirea arborilor de decizie.
Este necesar un proces de nvare al arborilor de decizie. Pentru
aceasta, Desmet [Des04] propune utilizarea unui instrument software creat
de J. Quinlan [Qui93], numit C4.5 o aplicaie de machine learning
scris n limbajul C pentru Linux (aproximativ 8800 linii). Algoritmul
folosit de C4.5 este urmtorul: se pornete de la un set mare de cazuri (de
antrenament) care aparin unor clase cunoscute. n clase, care sunt descrise
de anumite proprieti, sunt cutate patern-uri care permit separarea lor.
Clasele sunt exprimate apoi ca modele, sub form de arbori de decizie sau
seturi de reguli if-then, care pot fi folosite s clasifice noi cazuri, cu scopul
de a face modelele inteligibile i precise. Sistemul a fost aplicat cu succes n
procese care implica zeci de mii de cazuri, descrise de sute de proprieti
[Qui93]. Ca intrare n acest proces, se propune evaluarea fiecrei euristici
pentru fiecare salt static, mpreuna cu direcia cel mai des urmat de acesta
(T/NT) [Des04]. Aplicnd apoi algoritmul de nvare C4.5 asupra acestui
set de date, se obine urmtoarea ordine: Loop Opcode Call Return
LoopHeader Store Pointer. Cnd nici o euristic nu poate fi
aplicat, se alege calea NotTaken. Noua ordine e superioar cu 2.5% fa de
ordinea iniial propus de Ball i Larus [Ball93]. O euristic neamintit aici
(Guard) i care avea cea mai mic prioritate n schema propus de Ball este
complet ignorata de arborele de decizie [Des04].
Avnd o metod automat de alegere a euristicilor, se pot investiga
dac euristici suplimentare ar ajuta la mbuntirea acurateii de predicie.
n acest sens, s-au evaluat cteva noi elemente de informaie disponibile la
nivelul structurii programului. n urma acestei evaluri a rezultat c exist 2
euristici care, adugate la setul propus anterior pot crete acurateea de
predicie. Prima dintre acestea privete relaia de post-dominare dintre basic

Contribuii la predicia salturilor / apelurilor indirecte 241
block-ul succesor i respectiv cel curent. Cel mai simplu exemplu n care
aceast euristic predict non-postdominating-successor se aplic este o
instructiune if, fr un bloc else; n acest caz, euristica prezice c
instruciunile aflate n blocul if se vor executa. A doua euristic este bazata
pe distana dintre un branch i instruciunea productoare a operandului
testat n condiia de salt numrul de instruciuni dintre generarea valorii
unui registru i folosirea acesteia de ctre un branch dependent. Euristica
bazat pe distana de dependen susine c o distana mic se manifest
printr-o probabilitate mai mare a saltului de a fi fcut [Des04]. Figura
urmtoare ilustreaz arborele de decizie final pentru setul extins de euristici.


Figura 5.23. Arborele de decizie final, pentru setul extins de euristici [Des04]
Adugnd euristica predict non-postdominating successor metrica
IPM (numr mediu de instruciuni per branch greit predicionat) crete de
la 31.3 la 34.7; euristica bazat pe distana de dependen mbuntete i
mai mult IPM-ul, pn la 37.1 ceea ce nseamn de fapt o cretere de 18.5%
peste modelul propus de Ball i Larus [Des04].

242 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
5.2.3. PREDICTOARE CASCADATE PE DOU SAU MAI
MULTE NIVELURI.
Predictoarele cascadate pe dou niveluri [Dri98b,c] (vezi figura
5.24) clasific dinamic salturile / apelurile indirecte prin observarea
comportamentului acestora pe un predictor simplu de prim nivel (BTB
[Dri98b], LastValue [Flo03]). Doar cnd acest predictor eueaz n a
prediciona salturile corect, un predictor mai puternic de pe al doilea nivel
permite stocarea informaiei de predicie (target-ului) pentru pattern-urile
noi de istorie ale aceluiai branch. Prin faptul c previne ocuparea (inutil) a
spaiului n tabela de target-uri de pe nivelul 2 pentru salturile uor de
prezis, predictorul de pe primul nivel funcioneaz practic ca un filtru.
Astfel, tabela de target-uri de pe nivelul 2 nu se satureaz la fel de repede ca
i n cazul n care n-ar exista filtru, reducndu-se practic miss-urile de
capacitate i crescnd implicit acurateea prediciei. Spaiul tabelei de target-
uri aferent predictorului de pe al doilea nivel este utilizat doar n procesul de
predicie al salturilor care necesit reinerea unui pattern de istorie
(polimorfe). Figura 5.24 descrie modul de funcionare (predicie i
actualizare) al unui predictor cascadat.


Figura 5.24. Structur de predicie n cascad pe dou niveluri [Dri98c]
Dac ambele predictoare ar furniza o predicie (nu exist miss n nici
una din cele dou tabele de target-uri) atunci se va utiliza valoarea generat
de ctre predictorul path-based (cel de pe nivelul 2), motiv pentru care
tabela de target-uri aferent acestuia trebuie s conin un cmp de tag
necesar la detectarea acceselor cu miss.

Contribuii la predicia salturilor / apelurilor indirecte 243
Diferena principal dintre predictoarele hibride i cele cascadate
const n modul de actualizare al tabelelor de target-uri aferente
monopredictoarelor componente. n cazul predictoarelor cascadate, dac
structura de pe primul nivel genereaz o predicie corect, atunci
predictorului de pe nivelul 2 nu i este permis s insereze n tabela sa de
target-uri o (nou) intrare pentru acest salt. Cu toate acestea, dac intrarea
respectiv este deja prezent n tabela de target-uri atunci target-ul va fi
actualizat. n schimb, tabela predictorului de pe primul nivel va fi
ntotdeauna actualizat.
n experimentul propus de Driesen [Dri98c] predictorul de pe primul
nivel este un BTB (fr istorie practic i suficient pentru predicia salturilor
monomorfe), n timp ce al doilea nivel, necesar n cazul salturilor polimorfe
este constituit dintr-un predictor path-based, optimul determinat n
simulrile anterioare [Dri98a] din punct de vedere al lungimii pattern-ului i
al gradului de asociativitate. Au fost studiate dou tipuri de predictoare
cascadate, n funcie de regula de actualizare folosit n implementarea
efectului de filtrare:
Cu filtrare strict (etan) care permit predicia branch-urilor cu
structura de pe nivelul 2 doar cnd predictorul de pe primul nivel a prezis
greit (nu la miss-uri de start rece). Altfel spus, salturile indirecte
avanseaz spre nivelul 2 doar dac se dovedesc a fi polimorfe.
Predictoarele cascadate cu filtrare strict devin eficiente abia pentru
tabele de target-uri, aferente primului nivel, de dimensiuni ridicate.
Pentru capaciti mai mici sau egale cu 16 intrri acurateea prediciei
este inferioar celei obinute cu un predictor cascadat fr filtrare
(salturile sunt inserate n ambele predictoare iar la hit n ambele, prezice
cel de pe nivelul 2) n aceleai condiii de cost hardware. n cazul filtrrii
stricte, predictorul de pe nivelul 1 recunoate branch-urile polimorfe doar
dac acestea rmn suficient timp n tabela de target-uri pentru a fi
sesizat o modificare de target-uri (i astfel o predicie greit). Dar
pentru tabele de capaciti reduse, multe salturi polimorfe sunt nlocuite
nainte de a aprea o predicie greit (target-ul nu coincide) i astfel ele
nu vor putea accesa niciodat predictorul de pe al doilea nivel i nu vor fi
inserate n tabela de target-uri aferente acestuia. Evident c, odat cu
creterea capacitii tabelei de pe primul nivel vor fi evitate majoritatea
miss-urilor de capacitate, efectul de filtrare devine eficient conducnd la
creterea acurateii de predicie. Simulri efectuate pentru 3 predictoare
de nivel 2 de capaciti diferite (256, 1k, 4k) intrri, au demonstrat c
filtrarea strict genereaz rezultate mai bune comparativ cu un predictor

244 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
cascadat fr filtrare, pentru tabele de target-uri aferente primului nivel
de dimensiuni mai mari sau egale cu 256 intrri.
Cu filtrare mai puin etan (leaky) care permite inserarea salturilor,
la miss n tabela de target-uri de pe primul nivel, n tabelele ambelor
structuri de predicie. Astfel, tabela de pe nivelul 2 poate conine intrri
aferente salturilor monomorfe, dar doar dac acestea nu se regsesc n
BTB (pe primul nivel). Pentru a preveni problemele legate de miss-urile
de capacitate aprute n cazul predictoarelor cascadate cu filtrare strict,
filtrele mai puin etane (leaky) insereaz cte o intrare n tabelele de
target-uri aferente ambelor predictoare. Fiecare salt este introdus cel
puin o dat n predictorul de pe nivelul 2. Salturile corect predicionate
sunt reinute prin filtrare astfel nct o nou inserare n tabela de pe
nivelul 2 va putea avea loc doar la un miss n primul nivel (fie saltul a
fost evacuat din tabela de target-uri fie target-ul difer posibil i datorit
faptului c s-a ajuns la salt pe o alt cale).
Spre deosebire de filtrarea strict, filtrarea mai puin etan furnizeaz
rezultate satisfctoare din punct de vedere al acurateii prediciei pentru
toate dimensiunile de tabele de target-uri aferente primului nivel.
Predictoarele cascadate cu filtrare mai puin etan ating acurateile de
predicie obinute prin schemele anterior descrise (BTB, Two-Level,
hibride) dar la jumtate cost hardware (tabele de target-uri de dimensiuni
njumtite) [Dri98b,c]. n timp ce predictoarele necascadate necesit
tabele de target-uri de cel puin 1024 de intrri pentru a atinge acuratei
de predicie de 91%, un predictor cascadat cu filtrare mai puin etan
compus dintr-o tabel BTB cu 32 intrri pe primul nivel i un predictor
hibrid dual-path de 512 intrri situat pe nivelul 2 obine o performan
echivalent. Pentru un filtru BTB cu 64 intrri, 4 way asociativ i un
predictor adaptiv pe dou niveluri situat pe nivelul 2 de 1024 intrri
acurateea prediciei este de 92.2%, aproximativ aceeai performan
obinut cu un monopredictor, necascadat, two-level, de capacitate de 4
ori mai mare. Prin combinarea aceluiai tip de filtru cu un predictor de pe
nivelul 2 dual-path cu 1024 intrri acurateea prediciei crete pn la
92.7% superioar unui predictor necascadat hibrid dual-path cu 2048
intrri.
U Predictoarele cascadate pe mai multe niveluri (n3) au fost introduse
de Driesen [Dri99] i reprezint o generalizare a schemei de predicie n
cascad pe dou niveluri [Dri98b] (figura 5.24). Fiecare nivel este
constituit dintr-un predictor adaptiv de tip Two-Level [Dri98a] cu tabel
de predicie i istorie proprie. Pe msur ce se adncete nivelul (n 7)
corelaia cu celelalte salturi indirecte crete (path-ul 7) vezi figura

Contribuii la predicia salturilor / apelurilor indirecte 245
5.25. Prin folosirea separat a resurselor este permis predicia n paralel
a fiecrui nivel (predictor aferent). n caz de hit n toate tabelele de
predicie va fi folosit speculativ target-ul generat de structura cu calea
cea mai lung (istoria cea mai bogat) reinut. Analiznd dup
rezultatele exprimate de cercettori la ora actual n ceea ce privete
acurateea prediciei salturilor indirecte, un predictor cascadat pe 3
niveluri (vezi figura 5.25) genereaz un maxim de predicie de 94.8%
folosind o tabel de predicie cu 4096 intrri, iar cu o tabel de doar 1536
intrri acurateea obinut este de 94%, maximul obinut de o schem
ipotetic de predicie adaptiv corelat pe dou niveluri, nelimitat ca i
capacitate. Predictoarele cascadate multinivel constituie o variant
fezabil din punct de vedere hardware (n contextul unui buget limitat de
tranzistori asigur o acuratee de predicie superioar schemelor adaptive
corelate pe dou niveluri la un sfert din costul de implementare al
acestora) [Dri99].


Figura 5.25. Predictor cascadat pe trei niveluri: componentele sunt predictoare
path-based cu path diferit (1, 3, 8) [Dri99]
Un predictor cascadat multinivel care are drept componente, pe fiecare
nivel, predictoare adaptive de tip two-level cu path-uri de cutare succesive
ncepnd de la 0 se numete predictor cascadat complet [Dri99]. Una din
concluziile generate n urma simulrilor laborioase [Dri99] a fost c
predictoarele cascadate sunt superioare din punct de vedere al acurateii
prediciei celor adaptive pe dou niveluri (two-level), n aceleai condiii de
cost hardware, indiferent de dimensiunea istoriei pstrate. n studiul efectuat
Driesen a verificat i fezabilitatea implementrii hardware a predictoarelor
cascadate multinivel. Pornind de la structuri ideale de predicie (tabele de
capaciti nelimitate) sunt adugate pe rnd constrngeri privitoare la
capacitile tabelelor, grade reduse de asociativitate i respectiv un numr
limitat (optim) de niveluri de predicie. Pentru acurateea maxim de

246 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
predicie (94.2%) obinut de un predictor ideal de tip two-level folosind o
istorie de 6 target-uri anterioare, este necesar utilizarea unei tabele de
predicie care s rein pn la 13210 de pattern-uri aferente salturilor
indirecte supuse prediciei. Cum stocarea fiecrui pattern poate fi fcut pe
aproximativ 60 de bii (24 de bii tag-ul, 32 de bii adresa destinaie vezi
figura 5.25) costul total se ridic la 100k octei de memorie [Dri99], prea
mult pentru capabilitile tehnologice actuale. Astfel, eforturile
cercettorilor au fost canalizate pe reducerea costului memoriei, timpi
rezonabili de cutare n tabele grade de asociativitate limitate care s
permit implementarea n Siliciu dar pstrarea acurateii de predicie la
valori ct mai apropiate de 100%.
Aa cum s-a precizat anterior, tabelele de predicie aferente fiecrui
nivel sunt separate n caz contrar fiind necesar suportarea unui numr
ridicat de accese simultan (complexitate sporit). Se pune problema: cum
este mai eficient s fie folosite mai multe niveluri cu tabele de capaciti
reduse sau mai puine niveluri cu tabele de dimensiuni mai mari ? n prima
variant rezult un numr crescut de miss-uri de capacitate care, similar cu
predictorul cascadat pe dou niveluri cu regul strict de filtrare i tabele de
dimensiuni reduse, diminueaz din eficiena filtrrii pattern-urilor (ntruct
doar pattern-urile corect predicionate nu ocup spaiul tabelelor aflate pe
nivelurile superioare) ocupndu-se de multe ori inutil locaiile nivelurilor
ulterioare chiar i pentru salturi monomorfe sau duomorfe, dar evacuate
prematur (nainte de a fi accesate cu hit din nou) din tabela de pe primul
nivel. Aceast presupunere s-a concretizat n practic ntruct rezultatele
simulrilor lui Driesen au artat c un predictor cascadat complet cu 9
niveluri (path-uri de lungime de la 0 pn la 8) cu tabele de 128 intrri per
nivel (buget total de 1152 intrri) atinge o acuratee de predicie de 92.3% n
timp ce un predictor cascadat cu doar dou niveluri (path-uri de lungime 1 i
8), cu tabele de 512 intrri per nivel (buget total 1024 intrri) obine o
acuratee de 93.2% [Dri99]. Concluzia cercettorilor a fost c, n condiiile
unui buget limitat de intrri ale tabelei de predicie, un predictor cascadat
multinivel cu un numr de niveluri ntre 3 i 8 (probabil mai apropiat de
limita inferioar) se dovedete a fi optim din punct de vedere al acurateii de
predicie i superior celorlalte structuri dezvoltate n literatura de specialitate
n aceleai condiii de complexitate hardware. Diferena dintre un predictor
cascadat cu dou i respectiv unul cu trei niveluri este destul de mic:
acurateea unui predictor cu trei niveluri avnd un buget total de intrri egal
cu 3X este egal sau uor superioar celei obinute de predictorul cascadat
pe dou niveluri avnd un buget total de 4X intrri, pentru X512. Cu toate
acestea, ctigul de acuratee obinut pare s nu justifice complexitatea

Contribuii la predicia salturilor / apelurilor indirecte 247
hardware suplimentar introdus de nc un nivel de predicie. O alt
concluzie cert ar fi c bugetul total de intrri s fie mprit echitabil (n
pri egale) ntre tabelele aferente fiecrui nivel.
n cadrul predictoarelor pe mai multe niveluri ar putea fi ncadrat i
predictorul PPM (partial prefix matching) complet, implementat de
Kalamatianos [Kal98], cu rezultate optime din punct de vedere al acurateii
prediciei de 90.53%. Predictorul PPM complet cuprinde N+1 predictoare
Markov (contextuale) de la ordinul 0 la ordinul N. Ordinul fiecrui predictor
reprezint dimensiunea pattern-ului de cutare n tabelele de predicie
aferente fiecrui nivel. Dac predictorul Markov de ordinul N produce un
rezultat valid atunci procesul se termin dac nu se activeaz predictorul de
ordin imediat inferior. n [Kal98] capacitatea tabelei de predicie de pe
fiecare nivel (privind descresctor de la ordinul N la 0) este dublul celei
aferente nivelului imediat inferior. Dei exist unele preri c un predictor
Markov de ordin 0 nu i are sensul ntruct ultimul target al saltului
dinamic nu se regsete n istoria memorat, neexistnd deci practic repetiie
de context pentru a putea prediciona pe baze rezonabile ce va urma dup
acesta, n cercetrile efectuate Kalamatianos a implementat un predictor
PPM complet de ordinul 3 avnd drept componente predictoare Markov de
ordin 3 pn la 0 inclusiv [Kal98].
Cu toate c funcionarea mecanismului de predicie este asemntoare
cu regula de filtrare folosit n cadrul predictoarelor cascadate multinivel,
exist i deosebiri ntre cele dou structuri de predicie. Prima dintre acestea
se refer la faptul c predictoarele cascadate folosesc buffer-e de istorie a
salturilor diferite, cte unul aferent fiecrui nivel. Numrul de niveluri este
independent de lungimea pattern-ului de cutare iar tabelele aferente
fiecrui nivel pot avea orice capacitate. mbuntirea performanei obinut
prin predictorul PPM complet fa de scheme clasice (BTB, Two-Level)
poate fi datorat i modului de clasificare dinamic a salturilor indirecte.
Astfel, ntr-o clas se regsesc salturile care sunt ntr-o mai bun corelaie
att cu branch-urile condiionate ct i cu target-urile salturilor indirecte iar
n a doua clas sunt clasificate salturile aflate n corelaie doar cu target-urile
salturilor indirecte anterioare. Predictoarele cascadate multinivel pstreaz
n registrul de istorie global a salturilor doar adresele destinaie aferente
salturilor indirecte anterioare (vezi figura 5.25).
O concluzie ce se desprinde att din cercetrile efectuate de Driesen
ct i ale altor cercettori [Kal98] este c lupta este extrem de aprig, la
nivel de procent n ncercarea de a prediciona cu acuratee salturile
indirecte, n sensul c fiecare ctig potenial (introdus de o nou tehnic sau

248 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
mbuntiri aduse structurii de predicie), orict de mic (1, 2%) trebuie
exploatat. Dac adugm la acestea i faptul c, ntr-un procesor superscalar
care poate lansa simultan 4 instruciuni independente n execuie, o predicie
greit a salturilor de doar 2.3% fa de ideal conduce la o diminuare a
performanei procesorului cu pn la 40% [Vin00], rezult i mai mult
importana fiecrui procent suplimentar de predicie corect i necesitatea
stringent de a gsi i implementa mecanisme de predicie eficiente cu
acuratei de aproape 100%, reducndu-se astfel din efectul defavorabil al
ramificaiilor de program asupra performanei procesoarelor avansate. O
critic ns, ce poate fi adus activitii lui Driesen const n faptul c,
rezultatele sale remarcabile n ceea ce privete acurateea prediciei
salturilor / apelurilor indirecte i respectiv costul hardware al implementrii
schemelor de predicie propuse, nu sunt dublate de informaii legate de
timpul total de execuie, rat de procesare i speed-up-ul obinut prin
implementarea predictoarelor cascadate i hibride. Bazat pe rezultatele
excelente obinute [Dri98a,b] se impune introducerea i exploatarea
predictoarelor cascadate i n alte domenii de cercetare n vederea creterii
paralelismului la nivelul instruciunilor i a firelor de execuie: predicia
salturilor condiionate i predicia valorilor instruciunilor.
5.3. CERCETRI PROPRII PRIVITOARE LA
PREDICIA SALTURILOR / APELURILOR
INDIRECTE.
5.3.1. PREDICTORUL PPM COMPLET.
Multe din predictoarele existente, dei capabile s prezic cu acuratee
direcia salturilor condiionate (BTB, adaptive corelate pe dou nivele
GAg, PAg) pn la 97,7% [Yeh92], sunt ineficiente n determinarea corect
a target-urilor salturilor n mod de adresare indirect (datorit modificrii
adreselor destinaie cu fiecare instan dinamic a aceluiai salt static).
Acurateea prediciei este deosebit de sczut la ora actual (cca. 75.1%)
[Dri98]. n [Cha97] se arat bazat pe simulri laborioase c o schem de
predicie de tip Branch Target Buffer cu automat de predicie pe doi bii a
mbuntit acurateea de predicie pentru benchmark-urile SPEC95

Contribuii la predicia salturilor / apelurilor indirecte 249
compress, gcc, ijpeg i perl, n acelai timp nrutind acurateea de
predicie pentru m88ksim, vortex i xlisp (li).
Trebuie specificat faptul c, exceptnd situaiile cnd se precizeaz
explicit, afirmaiile, simulrile i rezultatele grafice se refer doar la
instruciuni de salt indirect pure, nu la instruciuni de revenire din subrutin
return. Dei tehnic i acestea din urm sunt salturi indirecte, ele pot fi
tratate folosind alte structuri hardware: stive de tip CALL/RETURN.
Rezultatele simulrilor pe benchmark-urile SPEC95 au evideniat c o
pereche de stive de tip CALL/RETURN cu 5 intrri fiecare, ataat unei
structuri de predicie de tip BTB reduce numrul prediciilor incorecte cu
31.5% fa de situaia cnd nu s-ar folosi stivele [Kae97].
Pentru determinarea acurateii de predicie n cazul instruciunilor de
salt indirecte s-a implementat un predictor PPM complet (vezi figura 5.26)
[Vin02, Kal98].


Figura 5.26 Predictor contextual PPM (Prediction by Partial Matching)
Valoarea predicionat este aceea care a urmat cu cea mai mare
frecven contextului considerat. Dup cum se observ n figura 5.26, ea
este funcie i de contextul considerat, un context mai bogat (lung)
conducnd adeseori la o acuratee mai ridicat a prediciei (nu ntotdeauna
ns vezi rezultatele simulrilor din capitolul 7.1.1 i 7.2). n exemplul
considerat, abia predictorul Markov de ordinul 3 genereaz o predicie
corect. Dac predictorul Markov de ordinul N produce un rezultat valid
atunci procesul se termin dac nu se activeaz predictorul de ordin imediat
inferior. n figura 5.27 se prezint schema bloc a unui predictor contextual
de valori (Markov de ordinul k) implementat n cadrul simulatorului sim-
vpred.exe folosit la predicia target-urilor instruciunilor de salt indirect.


250 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 5.27. Schema unui predictor contextual de ordin k (Markov_K)
Tabela JVPT (Indirect Jump Value Prediction Table) care cuprinde
ultimele history adrese destinaie aferente fiecrei instruciuni de salt
indirect (contextul), este indexat cu PC-ul instruciunii, pe timpul fazei de
aducere. Pe baza unui pattern de cutare (ultimele k valori din context)
predictorul Markov complet de ordinul k va prediciona noul target. Se
verific de fapt, n lista de history valori generate de ctre respectiva
instruciune de salt indirect ce valori urmeaz respectivului context cu o
frecven mai mare. Valoarea prezis va fi folosit n execuie (stabilind
practic noul PC) doar dac automatul de clasificare aferent instruciunii de
salt indirect (vezi figura 5.28) de la respectiva adres (PC-ul curent) se va
afla n starea predictibil. n cazul n care respectivul pattern a aprut n
context cel puin o dat, atunci lista de valori nu va fi vid, valoarea prezis

Contribuii la predicia salturilor / apelurilor indirecte 251
fiind cea cu frecvena maxim, n caz contrar fiind necesar activarea
predictorului Markov de ordin k-1. n funcie de rezultatul comparaiei
dintre valoarea real (target-ul rezultat dup execuie) i ceea ce a
predicionat predictorul contextual Markov de ordin k se va actualiza
corespunztor automatul de clasificare.
Practic, schema predicioneaz pe baza probabilitii statistice ca o anumit
valoare s urmeze unui anumit context dinamic, comportndu-se excelent
pentru secvene repetitive de valori.


Figura 5.28. Automatul de clasificare aferent unei intrri n tabela JVPT
Simulatorul dezvoltat este de tip execution-driven i extinde mediul
SimpleScalar 3.0 cu structuri noi de date respectiv funcii specifice
vecintii i prediciei valorilor. Vecintatea valorii pentru un benchmark
este calculat ca o medie a numrului de instruciuni de salt indirect care vor
efectua saltul la o aceeai adres ca i una din anterioarele k instane ale
respectivei instruciuni de salt i totalul de instruciuni de salt indirect
dinamice existente n benchmark. ntruct este necesar memorarea adresei
fiecrei instruciuni de salt indirect (jal $reg sau j $reg) din acel benchmark,
deci capaciti mari de memorare, am folosit n implementare structuri
dinamice de date (liste simplu nlnuite). Pentru determinarea localitii
valorilor sunt folosite aceleai structuri de date pentru toate tipurile de
instruciuni (salt indirect, ALU, Load).

Tabela de predicie este similar cu cea aferent instruciunilor Load
(vezi subcapitolul 6.1.1), cu mici completri.

typedef struct JVPTelement *JVPTvalueList;
struct JVPTelement
{
sword_t value;
JVPTvalueList nextValue;

252 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
int count; /*reine frecvena de apariie a
respectivei valori dup
contextul dat*/
};

typedef struct JVPTlocation *JVPTaddrList;
struct JVPTlocation
{
md_addr_t addr;
JVPTaddrList nextAddress;
JVPTvalueList values;
int automat;
};

Identificarea cmpurilor din structur este urmtoarea:
addr adresa (PC) instruciunii de salt indirect (jal $reg sau j $reg);
values reprezint lista ultimelor k valori dinamice pentru saltul
respectiv (practic ultimele k target-uri aferente instruciunii de salt
indirect);
automat este un automat cu patru stri (vezi fig. 5.28). Iniial un salt
indirect este nepredictibil dac automatul acestuia se afl n starea 0
sau 1 i este predictibil dac automatul se afl n starea 2 sau 3. n
subcapitolul 5.3.2 va fi studiat comportamentul unui automat cu rol de
confiden pe un numr variabil de bii (2).

Ali parametri importani ai simulatorului care pot fi modificai de
ctre utilizator, sunt: tipul simulrii (1: determinarea localitii sau 0:
predicia valorilor: -pred), adncimea istoriei: -history, tipul tabelei de
predicie (0: mapat direct sau 1: asociativ: -assoc), dimensiunea tabelei de
predicie (numrul de locaii: -jvpt), tipul predictorului utilizat (-contextual;
0: TargetCache sau 1: PPM complet) i dimensiunea contextului (-pattern)
n cazul predictoarelor contextuale de tip Markov.
Indiferent de tipul tabelei utilizate (mapat direct sau asociativ), n
cazul n care se obine un hit n tabela JVPT, se face o predicie. n funcia
predictValue din programul vpred.c este implementat predictorul contextual
de tip PPM (Prediction by Partial Matching) complet. n aceast funcie
este folosit predictorul definit prin parametrii introdui de ctre utilizator. n
cazul n care automatul de clasificare aferent unei intrri din tabela JVPT se
afl ntr-o stare de tip predictibil, se nainteaz valoarea prezis (practic
noul PC) i aceasta este preluat prin bypassing i ncrcat n registrul de
adres a urmtoarei instruciuni (PC), salturile indirecte fcndu-se

Contribuii la predicia salturilor / apelurilor indirecte 253
necondiionat. La determinarea valorii reale a registrului care codific
adresa pentru instruciunea de salt indirect, n urma fazei de
decodificare/execuie, aceasta este comparat cu valoarea prezis, i
instruciunile dependente executate speculativ fie urmeaz parcursul normal
pn la nivelul Write Back al structurii pipeline - fie sunt retrimise spre
execuie. Tabela JVPT este actualizat prin incrementarea automatului n
cazul unei predicii corecte sau decrementarea acestuia n cazul unei
predicii incorecte i introducerea valorii reale a registrului surs aferent
instruciunii de salt n noul context de la intrarea corespunztoare din JVPT,
evacund din locaia respectiv cea mai veche valoare printr-un algoritm de
tip FIFO (First In First Out).
Exemplificm n continuare prezentnd antetele principalelor funcii
ce intervin n cadrul predictorului JIndirValue: predictValue,
foundAssociativeJVPTAddress, insertJVPTValue,
foundAddress_INDIR, foundValue_INDIR. Descrierea complet a
acestor funcii poate fi regsit att n referatul de doctorat nr. 2 [Flo03a] ct
i pe CD-ul cu surse i simulatoare n format executabil ce nsoete aceast
lucrare. Pentru nceput am descris nucleul de execuie al simulatorului
(fazele Fetch instruciune, Decodificare i Execuie aferente
instruciunilor de salt indirect) rezident n rutina sim-main din modulul sim-
vpred.c. Funciile apelate n interiorul acestei rutine au fost definite n
modulul vpred.c.

/**************************sim-main***********************/
MD_FETCH_INST(inst, mem, regs.regs_PC); /* extragerea instruciunilor din
cache/memorie */
MD_SET_OPCODE(op, inst); /* decodificarea instruciunii */

/* execuia instruciunii */
switch (op){
#define DEFINST(OP,MSK,NAME,OPFORM,RES,FLAGS,O1,O2,I1,I2,I3)
\
#define DEFLINK(OP,MSK,NAME,MASK,SHIFT)
#define CONNECT(OP)
}

// tratarea funciilor indirecte pure n faza de execuie
if((MD_OP_FLAGS(op)& F_INDIRJMP)&& !MD_IS_RETURN(op))
{
sim_indir_refs++;
if(predict == 1) /* JIndir value prediction */
{
if(isAssoc) // Tabela JVPT asociativ
{

254 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
if(!foundAssociativeJVPTAddress(regs.regs_PC, regs.regs_R[in1], history, &jvpt,
JVPTdim, contextual, pattern))
{
jvpt = pushJVPTAddress(jvpt, regs.regs_PC);
insertJVPTValue(jvpt, regs.regs_R[in1], history, contextual);
}
}
else // Tabela JVPT mapat direct
insertIntoDirrectMappedJVPT(regs.regs_PC, regs.regs_R[in1], history, &jvpt,
contextual, JVPTdim, pattern);
}
else /* JIndir value locality verification */
{
if(l_INDIR == NULL)
{
l_INDIR = pushAddress(l_INDIR, regs.regs_PC, regs.regs_R[in1]);
nr_salturi_statice_indir++;
fprintf(stderr,"\n PC:%x op:%d %-10s in1:%d in2:%d out1: %d \n",
regs.regs_PC,op,MD_OP_NAME(op),in1,in2,out1);
}
else if(!foundAddress_INDIR(l_INDIR, regs.regs_PC, regs.regs_R[in1], history))
{
l_INDIR = pushAddress(l_INDIR, regs.regs_PC, regs.regs_R[in1]);
nr_salturi_statice_indir++;
fprintf(stderr,"\n PC:%x op:%d %-10s in1:%d in2:%d out1: %d\n",
regs.regs_PC,op,MD_OP_NAME(op),in1,in2,out1);
}
} // de la localitate
}
/************************************************************/
sword_t predictValue(JVPTaddrList p, int history, int contextual, int pattern);
- Identific structura de predicie corespunztoare prin intermediul
parametrilor de intrare i prezice valoarea pentru resursa n cauz (target-
ul saltului indirect).
int foundAssociativeJVPTAddress(md_addr_t addr, sword_t value, int history,
JVPTaddrList *jvpt, int JVPTdim, int contextual, int
pattern);
- Stabilete dac instruciunea curent de salt indirect a mai fost sau nu
prezis anterior i returneaz rezultatul corespunztor. n caz afirmativ
verific dac valoarea prezis de structur este chiar cea rezultat n urma
execuiei instruciunii de salt indirect i actualizeaz automatul de
clasificare conform rezultatului prediciei. De asemenea, noua adres
destinaie este inserat n lista de target-uri cu ajutorul funciei
insertJVPTValue. Dac instruciunea respectiv nu a fost supus
prediciei anterior atunci ea este inserat n structura de predicie prin
intermediul funciei pushJVPTAddress.

Contribuii la predicia salturilor / apelurilor indirecte 255
void insertJVPTValue(JVPTaddrList ad, sword_t value, int history, int contextual);
- Insereaz un target n JVPT la o adres (PC) pe prima poziie n lista de
valori. Se determin dac lista are exact history valori n acest caz fiind
nevoie de eliminarea ultimei valori din list (implementarea FIFO a listei
de valori cea mai recent valoare se afl n faa listei iar cea mai demult
introdus valoare se afl pe ultima poziie n list). Dac n list nu exist
nc history valori nu se va elimina nici o locaie din list.
void insertIntoDirrectMappedJVPT(md_addr_t addr, sword_t value, int history,
JVPTaddrList *jvpt, int contextual, int
JVPTdim, int pattern);
- n cazul structurii Target Cache determin locaia unde se va efectua
inserarea. n caz de miss n JVPT se actualizeaz adresa cu valoarea
corespunztoare (noul PC), se terge fizic lista de valori de la respectiva
adres i se iniializeaz automatul de predicie. n caz de hit se verific
dac predicia este corect (target-ul prezis coincide cu adresa real de
salt obinut n urma execuiei) i se incrementeaz contoarele
corespunztoare. Dup efectuarea prediciei are loc inserarea noului
target n lista de valori.
int foundAddress_INDIR(addrList l, md_addr_t addr, sword_t value, int history);
- Este utilizat n determinarea gradului de localitate existent pe resursele
folosite. Se verific apariia anterioar a instruciunii de salt indirect. n
caz afirmativ se verific prin intermediul funciei foundValue_INDIR
dac n lista de target-uri se afl i noua valoare (value). Dac noua
valoare nu a existat atunci este inserat ca i ultim target n respectiva
list cu ajutorul funciei pushValue.
int foundValue_INDIR(addrList l, sword_t value, int history);
- Funcia este apelat i pentru actualizarea statisticilor privind localitatea
valorilor aferent target-urilor instruciunilor de salt indirect. Caut target-
ul curent n lista de valori deja reinute.
Rezultatele simulrii mpreun cu parametrii arhitecturii vor fi scrii
ntr-un fiier (simout.res) din directorul curent. Dintre rezultatele ce
caracterizeaz localitatea valorii se amintesc:
U sim_indir_refs numrul total de salturi indirecte executate dinamic
dintr-un benchmark.
U sim_num_jumps numrul total de instruciuni de salt executate.
U sim_num_statice_indir numrul total de salturi indirecte statice gsite
ntr-un program surs asamblare i librriile
aferente.
U sim_num_statice numrul total de branch-uri statice aflate ntr-un
program surs asamblare i librriile aferente.
U JindirValueLocality numrul de instane dinamice aferente
instruciunilor de salt indirect care au avut ca target

256 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
aceeai valoare ca una din precedentele history
instane dinamice ale aceluiai salt indirect static.
Rezultate ce exprim ct de eficient a fost automatul implementat:
U valuePrediction numrul total de adrese (target-uri) prezise corect de
ctre automat: (automatul a clasificat valoarea
predictibil iar valoarea propus de automat a fost
exact cea care a rezultat n urma decodificrii /
execuiei instruciunii), practic rezultat n urma
prediciei.
U classifiedPred numrul de instruciuni de salt indirect clasificate
predictibile de ctre automat.
U classifiedUnpred numrul de instruciuni de salt indirect clasificate
nepredictibile de ctre automat.
U wpredicted numrul de instruciuni de salt indirect greit predicionate
(automatul a clasificat valoarea ca nepredictibil iar
valoarea propus a fost ntr-adevr diferit de cea care a
rezultat n urma decodificrii / execuiei instruciunii).

Cunoscnd aceste informaii, se poate determina acurateea prediciei
pentru arhitecturile simulate, precum i gradul de ncredere al automatului
de clasificare.
5.3.2.MBUNTIREA PERFORMANEI PREDICTORULUI
TARGET CACHE. IMPLEMENTAREA UNUI MECANISM DE
CONFIDEN.
n prim faz, rezultatele obinute cu predictorul PPM au fost
comparate cu cele generate de predictorul TargetCache, schem propus de
Chang n 1997 (vezi figura 5.13) [Cha97].
n [Cha97] sunt descrise trei modaliti de indexare ale Target Cache-
ului: HistoryXOR, Address i HistoryConcatenate dintre care au fost
implementate primele dou. Att prima schem ct i cea de-a doua
utilizeaz cei mai puini semnificativi bii ai adresei instruciunii de salt
indirect pentru identificarea setului. n timp ce la schema Address cei mai
semnificativi bii ai adresei i istoria global a salturilor condiionate sunt
dispersai printr-o funcie XOR (sau exclusiv) formnd Tag-ul emis pentru
comparare, la schema HistoryConcatenate aceste informaii sunt
concatenate.

Contribuii la predicia salturilor / apelurilor indirecte 257
La un grad de asociativitate redus, prima schem genereaz un numr
semnificativ de miss-uri de conflict n TargetCache ntruct toate intele
aferente unui salt indirect static sunt mapate ntr-un acelai set. Creterea
gradului de asociativitate conduce ns la mbuntiri ale performanei
Target Cache-ului prin reducerea unui procentaj semnificativ de miss-uri de
conflict.
Pentru un target cache cu tag, numrul de bii care memoreaz istoria
instruciunilor de salt nu este limitat de dimensiunea structurii ntruct biii
suplimentari de istorie pot fi stocai n cmpul de tag. Utiliznd o istorie
bogat poate fi identificat cu uurin apariia instruciunii de salt indirect
n cadrul fluxului de instruciuni. Cu toate acestea, pentru target cache-urile
cu asociativitate sczut performana se degradeaz (pierderea datorat
miss-urilor de conflict depete ctigul realizat printr-o mai bun
identificare a salturilor indirecte).
Complexitatea arhitectural a procesoarelor actuale dar i tehnologic
agraveaz impactul negativ asupra performanei cauzat de o predicie
greit. Pentru predictoarele de capacitate redus (16Ko [Tho03]) a cror
acuratee este n principal limitat de interferene destructive, o mic
cretere n dimensiune determin o mbuntire substanial a acurateii.
Predictoarele globale de salturi mbuntesc acurateea prediciei prin
corelarea comportamentului saltului curent (T / NT) cu istoria celor mai
recente salturi dinamice precedente acestuia, o cretere liniar a lungimii
istoriei (vezi n continuare parametrul HRgLength) cauznd o cretere
exponenial a capacitii predictorului. Din fericire, chiar i aceste structuri
imense de predicie pot fi implementate n Siliciu, bugetul de tranzistoare
existent la ora actual permind acest lucru, singurul neajuns constituindu-l
ntrzierea prediciei.
Un argument de bun sim n favoarea pstrrii i utilizrii unei
istorii ct mai lungi (ndeprtate) n procesul de predicie aferent
instruciunilor de salt se refer la faptul c unele salturi corelate pot aprea
la o distan considerabil n irul de instruciuni dinamice. Acest lucru se
poate ntmpla dac dou salturi corelate sunt desprite (separate) de ctre
un apel de funcie care conine multe branch-uri. La momentul prsirii
funciei, o istorie global redus poate conine doar comportamentul
salturilor din cadrul funciei, n timp ce o istorie global extins poate reine
i rezultatul saltului corelat, anterior apelului funciei.
Se nasc astfel dou ntrebri: i) Ct de departe trebuie cutate
salturi corelate ? (HRgLength - maxim) i ii) Ce modalitate optim pre /
performan permite utilizarea unei istorii vaste n procesul de predicie ?
n ce privete rspunsul la prima ntrebare, la ora actual (2003) n
majoritatea cercetrilor lungimea istoriei globale se presupune a fi log
2
din

258 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
numrul de intrri n tabela de predicie. La a doua ntrebare, pe lng
soluia evident (dar nu ntotdeauna acceptabil) de cretere corespunztoare
(HRgLength) a tabelei de predicie, ar mai exista posibilitatea dispersiei
istoriei globale n vederea accesrii unei tabele de predicie de dimensiune
acceptabil (64ko [Tho03]). De asemenea, unii cercettori au propus
pstrarea unei istorii variabile ca lungime pentru fiecare instruciune de salt
dinamic [Sta98].
Cu privire la modificrile aduse structurii de predicie Target Cache n
vederea mbuntirii acurateii prediciei aferente instruciunilor de salt
indirect o prim etap a constituit-o studiul influenei istoriei globale
(globalHR) a salturilor condiionate asupra prediciei. Au fost folosite
dou moduri de indexare a structurii de predicie Target Cache:
a1) modul XOR
Nr set=LeastSignificantBits of (PC_instr xor globalHR)=(PC_instr
xor globalHR) mod nr_seturi;
Tag = MostSignificantBits of (PC_instr xor globalHR)=(PC_instr xor
globalHR) div nr_seturi
a2) modul Address
Nr set=LeastSignificantBits of PC_instr=PC_instr mod nr_seturi;
Tag = (MostSignificantBits of PC_instr) xor globalHR=(PC_instr div
nr_seturi) xor globalHR

Schema Address utilizeaz cei mai puini semnificativi bii ai adresei
instruciunii de salt indirect pentru identificarea setului. Cei mai
semnificativi bii ai adresei i istoria global a salturilor condiionate sunt
dispersai printr-o funcie XOR (sau exclusiv) formnd Tag-ul emis.
Studiind cele dou moduri de indexare se poate intui superioritatea schemei
de predicie TargetCache adresat n modul XOR fa de aceeai structur
dar indexat n modul Address, din punct de vedere al acurateii prediciei
instruciunilor de salt indirect. O explicaie ar putea fi urmtoarea: la un
grad de asociativitate redus, schema Address genereaz un numr
semnificativ de miss-uri de conflict n TargetCache ntruct toate intele
aferente unui salt indirect static sunt mapate ntr-un acelai set (indiferent de
contextul globalHR - din care el apare 100, 010 etc).
Urmtorul pas fcut pentru a crete acurateea de predicie a structurii
TargetCache a constat n extinderea informaiei de corelaie prin asocierea
fiecrui bit din globalHR cu PC-ul aferent saltului condiionat respectiv i
determinarea prediciei pe baza acestei informaii mai complexe [Nai95,
Vin99] vezi figura 5.29.
O critic general ce poate fi adus schemelor de predicie adaptive
corelate pe dou niveluri (aplicate att salturilor condiionate ct i celor

Contribuii la predicia salturilor / apelurilor indirecte 259
indirecte) const n faptul c folosesc insuficient informaie de corelaie
pentru identificarea cu precizie a contextului de apariie a saltului de prezis
(globalHR pe HRgLength bii). Exist situaii n care dou pattern-uri
diferite de salturi condiionate dar cu comportament identic conduc la
aceeai instruciune de salt indirect, target-urile acesteia fiind ns diferite de
la un caz la altul vezi i anexa 1 de la sfritul lucrrii. n continuare am
dezvoltat un predictor bazat pe calea pn la saltul indirect care folosete
drept informaie de predicie pe lng PC-ul saltului indirect i istoria
global a salturilor condiionate i PC-urile corespondente acestor salturi, n
vederea reducerii coliziunilor n tabela Target Cache determinnd creterea
acurateii prediciei salturilor indirecte. Extinznd informaia de corelaie
rezult c la contexte diferite de apariie a unui salt indirect (PC
1
, PC
2
, PC
3

vs. PC
4
, PC
5
, PC
6
caracterizate de acelai comportament - 110), se vor
accesa seturi diferite din cadrul structurii Target Cache, asociate corect
contextelor, reducndu-se astfel o parte din interferene. Comprimarea
acestui complex de informaie este posibil i chiar necesar, avnd n
vedere necesitatea unor costuri rezonabile pentru aceste scheme. Funcia de
dispersie utilizat este simpl (XOR). S-au pstrat cele dou modaliti de
indexare ale structurii (XOR i Address) descrise anterior. n subcazul XOR
rezult cele dou formule de identificare a setului i tag-ului, astfel:
Nr set=LeastSignificantBits of (PC_instr xor PC(1) xor xor PC(k) xor
globalHR) = (PC_instr xor PC(1) xorxor PC(k) xor globalHR)
mod nr_seturi;
Tag = MostSignificantBits of (PC_instr xor PC(1) xor xor PC(k) xor
globalHR) = (PC_instr xor PC(1) xor xor PC(k) xor globalHR)
div nr_seturi


Figura 5.29. Extinderea informaiei de corelaie pentru o structur de tip Target
Cache

260 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Pentru benchmark-urile caracterizate de un procentaj ridicat de salturi
indirecte extinderea informaiei de corelaie (PC
1
, PC
2
, , PC
HRgLength
), la
costuri identice de implementare (structur Target Cache de aceeai
capacitate) determin creterea acurateii prediciei acestora. Efectul pozitiv
apare practic pe acele programe de test pentru care istoria salturilor
condiionate influeneaz predicia (pentru detalii a se vedea capitolul de
rezultate 7.1.1).
Cu toat mbuntirea adus de extinderea corelaiei, acurateea
prediciei instruciunilor de salt indirect este totui inferioar celei obinute
cu un predictor PPM complet (89.83%), n ciuda unor rezultate realmente
extraordinare, care de fapt reprezint excepia care confirm regula. Astfel,
acurateea obinut pe hydro2d.ss este 99.74% egal cu cea obinut cu
predictorul PPM complet. Un exemplu care evideniaz limitarea
avantajului introdus de tehnica de extindere a informaiei de corelaie pentru
pattern-uri de salturi condiionate de istorie redus este prezentat n Anexa1
de la sfritul lucrrii. De asemenea, n urma simulrilor se observ
incapacitatea tehnicii de extindere a informaiei de corelaie de a depi
efectul negativ al miss-urilor de conflict, pentru un grad sczut de
asociativitate a tabelei Target Cache, n modul de indexare Address.
n continuare se exemplific structurile de date noi introduse, opiunile
de simulare, principalele modificri aplicate funciei sim-main din modulul
sim-vpred.c, care descriu funcionarea predictorului TargetCache
(modalitatea de indexare XOR sau Address, precum i pstrarea istoriei
globale, respectiv a contextului - PC
1
, PC
2
, , PC
HRgLength
). Pentru nceput
am descris nucleul de execuie al simulatorului (fazele Fetch instruciune,
Decodificare i Execuie aferente instruciunilor de salt indirect) rezident
n rutina sim-main din modulul sim-vpred.c. Funciile apelate n interiorul
acestei rutine au fost definite n modulul vpred.c. Dintre acestea insertPC
insereaz n coada de PC-uri adresa fiecrei instruciuni de salt condiionat
ntlnit naintea instruciunii de salt indirect. Funcia hash_1 realizeaz
dispersia printr-o instruciune de SAU Exclusiv ntre PC-urile salturilor
condiionate anterior reinute n list cu ajutorul funciei InsertPC.


/* Coada cu PC-uri extins */
typedef struct PClocation *ExtendPC;
struct PClocation{
md_addr_t addr;
ExtendPC nextPC;
};


Contribuii la predicia salturilor / apelurilor indirecte 261
Dintre parametrii importani ai simulatorului (sim-vpred)
suplimentari celui prezentat la predictorul PPM complet, i care pot fi i
modificai de ctre utilizator, sunt: numrul de seturi din TargetCache (-
dimcache), dimensiunea listei de adrese destinaie aferente unei instruciuni
de salt indirect (gradul de asociativitate: -poscache), -HRgLength
reprezentnd numrul de bii pentru reprezentarea istoriei globale a
salturilor condiionate, -XOR o opiune pentru stabilirea modului de
indexare a structurii TargetCache {0 - Address mode | 1 - XOR mode}, -
Extend stabilete utilizarea (1) sau nu (0) a informaiei de corelaie
extinse reprezentat de PC-urile ultimelor HRgLength salturi condiionate.
Pentru fiecare instruciune de salt indirect ntlnit, se construiete un
Index cu care se va ataca tabela de predicie (identificarea setului) i
respectiv un Tag care va fi cheia de cutare pe nivelul pointat prin Index
(vor avea loc cel mult poscache cutri pe nivel). De fapt, Indexul reprezint
restul mpririi dintre PC-ul instruciunii i numrul de seturi din tabela
TargetCache (dimcache), iar tag-ul reprezint ctul aferent acestei mpriri.
n funcia TCpredictValue din modulul VPred.c este implementat
procesul de cutare a valorii care va fi prezis (destinaia instruciunii de salt
indirect). Dac n respectivul set se gsete o locaie cu tag-ul cutat (hit n
TargetCache), se nainteaz valoarea prezis (practic noul PC) i aceasta
este preluat prin bypassing i ncrcat n registrul de adres a urmtoarei
instruciuni (PC) - salturile indirecte fcndu-se necondiionat. La
determinarea valorii reale a registrului care codific adresa pentru
instruciunea de salt indirect, n urma fazei de decodificare/execuie, aceasta
este comparat cu valoarea prezis, i instruciunile dependente executate
speculativ fie urmeaz parcursul normal pn la nivelul Write Back al
structurii pipeline - fie sunt retrimise spre execuie de la adresa corect. n
situaia unui hit n TargetCache dac predicia a fost eronat, target-ul
de la TAG-ul emis prin PC (i eventual HRg) va fi actualizat cu noua adresa
destinaie. n caz de miss n TargetCache tabela este actualizat prin
introducerea valorii reale a registrului surs aferent instruciunii de salt
indirect, evacund din lista de target-uri de la respectiva adres (identificat
prin set) cea mai veche dintre acestea, printr-un algoritm de tip FIFO.
/***************************sim-main*************************/
MD_FETCH_INST(inst, mem, regs.regs_PC); /* extragerea instruciunilor din
cache/memorie */
MD_SET_OPCODE(op, inst); /* decodificarea instruciunii */

/* execuia instruciunii */
switch (op){
#define DEFINST(OP,MSK,NAME,OPFORM,RES,FLAGS,O1,O2,I1,I2,I3) \

262 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
#define DEFLINK(OP,MSK,NAME,MASK,SHIFT)
#define CONNECT(OP)
}

/* introducerea istoriei globale a salturilor conditionate in indexarea tabelei Target
Cache */
if (MD_OP_FLAGS(op) & F_COND){
/*fprintf(stderr, "\n PC: %x NPC: %x op: %d %-10s in1: %d in2: %d \n",
regs.regs_PC, regs.regs_NPC, op, MD_OP_NAME(op), in1, in2);*/
isTaken=(regs.regs_NPC != (regs.regs_PC + sizeof(md_inst_t)));
globalHR = (globalHR*2) % putere(2, HRgLength) + isTaken;
/*fprintf(stderr," HR = %d ",globalHR);*/
/* inserare PC in coada de PC-uri (FIFO) */
queue_PC = insertPC(queue_PC, regs.regs_PC,HRgLength);
}
// tratarea funciilor indirecte pure n faza de execuie
if((MD_OP_FLAGS(op)& F_INDIRJMP)&& !MD_IS_RETURN(op)){
sim_indir_refs++;

if(contextual == 0) /*target cache predictor*/
{
if(XORfunction) /* indexarea TC este XOR mode */
{
if(HRgLength == 0) /* nu tin cont de context */
adresa_emisa = regs.regs_PC;
else{
/*show(queue_PC);*/
if(Extend)
{/* utilizarea istoriei extinse din PC-urile branch-
urilor conditionate */
PC_rezultat = hash_1(queue_PC);
adresa_emisa = PC_rezultat ^ regs.regs_PC ^
globalHR;
}
else
adresa_emisa = regs.regs_PC ^ globalHR;
}
}
else /* indexarea TC este Address mode */
{
if(HRgLength == 0)
adresa_emisa = regs.regs_PC; /* PClow - setul; PChigh -
tagul*/
else /* HRgLength > 0 */
{
if(Extend) /* Folosesc informatie de corelatie extinsa */
{
PC_rezultat = hash_1(queue_PC);
adresa_emisa = PC_rezultat ^ regs.regs_PC;

Contribuii la predicia salturilor / apelurilor indirecte 263
adresa_emisa_low = adresa_emisa & masca_nesem;
adresa_emisa_high = ((adresa_emisa &
masca_sem)>>biticache) ^ globalHR;
}
else /* Exista istorie dar nu folosesc informatie
extinsa */
{
adresa_emisa_low = regs.regs_PC & masca_nesem;
adresa_emisa_high = ((regs.regs_PC &
masca_sem)>>biticache) ^ globalHR;
}
}
}
if(!XORfunction && (HRgLength > 0))
/*mod de indexare Address, si pattern de salturi
conditionate > 0 */
insertIntoDirrectMappedTargetCache(regs.regs_R[in1],
adresa_emisa_high,
adresa_emisa_low, dimcache,
nposcache);
else /* Fie mod de indexare XOR fie nu exista istorie */
insertIntoDirrectMappedTargetCache(regs.regs_R[in1],
(adresa_emisa & masca_sem) >>
biticache, adresa_emisa &
masca_nesem, dimcache,
nposcache);
}
/************************************************************/
sword_t TCPredictValue(IVPTCache p,md_addr_t tag ,int nposcache);
- Funcia de predicie folosit n cazul structurii Target Cache. n cazul n
care exist o singur locaie per set, aceasta nefiind nul, i cu tag
corespunztor se efectueaz predicia, returnndu-se valoarea target-ului
instruciunii. n cazul unui grad de asociativitate ridicat se parcurge lista
target-urilor, comparndu-se tagul din cache cu cel construit din PC-ul
instructiunii; n cazul n care se gsete un tag corespunztor se
efectueaz predicia, altfel este considerat o predicie greit.
Poate modificarea cea mai nsemnat i original n acelai timp
referitoare la structur TargetCache a reprezentat-o ignorarea selectiv a
efecturii unor predicii cu scopul de a mbunti acurateea prediciei.
Structura de predicie a fost mbogit (vezi figura 5.30) prin introducerea
unui grad de confiden aferent fiecrei locaii, folosindu-se i un mecanism
de inserare / evacuare n / din set bazat pe:
i. LRU(least recently used).
ii. Confiden

264 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
iii. Mecanism adaptiv ce se bazeaz pe superpoziia celor dou
anterioare (MPP minim de performan potenial).


Figura 5.30. mbuntirea structurii TargetCache cu un mecanism de confiden
Insuficiena informaiei de predicie poate conduce la costuri
suplimentare n cazul unei predicii eronate, datorate refacerii contextului
procesorului i reexecuiei unui eventual lan de instruciuni dependente de
cea greit predicionat, de multe ori fiind preferabil chiar s nu se fac
predicia (evitndu-se astfel execuia speculativ). Bazat pe simulare se va
demonstra c acurateea prediciei valorilor poate fi influenat pozitiv
printr-o ignorare selectiv a efecturii unor predicii. Pentru realizarea
acestei selecii este asociat fiecrei predicii un grad de ncredere sau
confiden, stocat n tabela de predicie corespunztor fiecrei locaii. O
confiden ridicat semnific ncredere n predicie. n situaia n care, unei
intrri aferente predictorului de valori i este asignat o confiden ridicat,
valoarea prezis va fi folosit. Dac ncrederea este ns sub un prag
prestabilit (threshold) se renun la predicie, execuia fcndu-se
nespeculativ.
Exist n literatura de specialitate [Des02] trei tipuri de informaie de
confiden: numrtoare saturate, identificare de tag-uri i respectiv
recunoaterea pattern-urilor. Dintre acestea am implementat software i
simulat doar numrtoarele saturate. Am propus trei variante de mecanism
de inserare / evacuare n / din set: prima bazat pe LRU, a doua determinat
de confiden respectiv o a treia adaptiv, dinamic numit minim de
performan potenial i bazat pe superpoziia celor dou informaii
ortogonale amintite la variantele 1 i 2 (LRU respectiv confiden). Se
determin practic crui target din set i corespunde cea mai mic valoare
determinat de produsul LRU*Confiden. Revenind la numrtorul saturat,
trebuie remarcat c dac pragul (threshold) este mai mare atunci
mecanismul de confiden devine mai selectiv. Fr a depinde de confidena

Contribuii la predicia salturilor / apelurilor indirecte 265
deja asignat starea n care se afl numrtorul, acesta este actualizat
imediat ce valoarea calculat (target-ul n cazul instruciunilor de salt
indirect) devine disponibil n urma fazei de execuie. Astfel, numrtorul
este incrementat (cu 1 n general, dar pot exista i variaii) n cazul unei
predicii corecte i decrementat dac predicia este greit. Se poate afirma
c printr-o mediere, numrtoarele saturate exprim istoria recent a
prediciei. Exist i variante care, n cazul unei predicii greite, reseteaz
numrtorul sau decrementeaz cu 2 etc.
n [Des02] sunt propuse dou metrici utile de comparare a
mecanismelor de confiden: acurateea prediciei i senzitivitatea.
Fiecare predicie n parte, poate proveni dintr-una din strile mecanismului
de confiden: ncredere ridicat (high-confident) sau ncredere
sczut.(low-confident). n acest sens, poate fi fcut urmtoarea clasificare
a proceselor de predicie (vezi tabelul 5.3).

Corect prezise Incorect prezise
ncredere ridicat HCcorr HCntcorr
ncredere sczut LCcorr LCntcorr
Tabelul 5.3. Clasificarea proceselor de predicie
Un mecanism perfect de confiden ar avea completate doar celulele
(HCcorr respectiv LCntcorr). n realitate ns, datorit limitrilor
mecanismului de confiden, toate cele 4 celule ale tabelului 5.3 sunt
completate (chiar i LCcorr respectiv HCntcorr). Trebuie observat c cele
dou clase nefavorabile, tocmai amintite, nu sunt echivalente din punct de
vedere al impactului creat asupra funcionrii microarhitecturii, deosebirea
dintre ele constnd n faptul c prima poate genera o cretere de performan
prin predicie corect iar cea de-a doua - o penalitate prin refacerea
contextului procesorului. Performana scade drastic, fiind mult mai
dezavantajos n cazul unei predicii fcute greit (HCntcorr) dect atunci
cnd se rateaz (nu se face o predicie din lips de ncredere care ar fi
totui corect). Tehnologia hyper-pipeline a microarhitecturii Intel NetBurst
determin creterea n adncime a structurii pipeline asigurnd o sporire a
performanei, frecvenei i scalabiliti procesorului. Mecanismul de
refacere a contextului procesorului i structurii pipeline implementat la
procesorul Intel Pentium 4 consum 31 de perioade de tact n tehnologie de
90 nm comparativ cu 20 de perioade de tacte n tehnologie 0.13 microni.
Dup unii cercettori [Cal99, Rych98], un aspect important n
creterea performanei procesoarelor prin predicia valorilor l constituie
eficiena. Astfel, se consider c doar prediciile corecte de pe calea critic
de program (data-flow) pot mbunti performana n timp ce prediciile

266 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
greite nu sunt dramatice dac nu apar n acest graf al dependenelor de date,
dar i invers, o predicie corect care nu aparine cii critice nu se dovedete
esenial din punct de vedere al creterii performanei. ntruct cazul nostru,
al prediciei valorilor aplicate instruciunilor de salt indirect predicia
target-urilor, se refer la fluxul de control al programului (control-flow), se
poate spune c eficiena intervine i aici cu consecinele sale pozitive dar
mai ales negative.
Revenind la metricile propuse n [Des02] acurateea prediciei (Ap)
reprezint probabilitatea ca predicia generat de o stare ridicat de
ncredere s fie corect.

ntcorr corr
corr
p
HC HC
HC
ridicata) Incredere corecta predictia ( Prob A
+
= =
(5.9)

Dup prerea autorului acestei lucrri, un singur neajuns ar fi referitor
la aceast metric, i anume, n ce msur este relevant o predicie
foarte mare (de exemplu 99% - vezi rezultatele grafice din capitolul 7.1.1)
atunci cnd procentajul cazurilor n care se face predicie confiden
ridicat (vezi ecuaia 5.10) este, spre exemplu, mai puin de 50% din
totalul salturilor indirecte din program. n acest sens, a fost introdus- o
metric proprie, vezi ecuaia 5.11.


e_salt ructiuni_d Total_inst
HC HC
) predictiei a realizare de (grad
ntcorr corr
+
= Usage (5.10)

Definim ca performan global al predictorului produsul:
P = A
p
Usage (5.11).
Din (5.9), (5.10) i (5.11) rezult c:

e_salt ructiuni_d Total_inst
HC

corr
= P . (5.11)

Senzitivitatea [Des02] reprezint fraciunea de predicii corecte
identificate printr-o confiden ridicat.

corr corr
corr
LC HC
HC
prezise) corect valorilor Totalul ridicata Incredere ( Prob
+
= = atea Senzitivit

Avnd n vedere cele descrise anterior, se poate spune c un
mecanism de confiden bun este caracterizat prin tendina celor dou
metrici (acurateea prediciei i performan global) astfel: cu ct mai
mari cu att mai bine.

Contribuii la predicia salturilor / apelurilor indirecte 267
Cmpul Confidena reprezint un numrtor saturat pe un numr de
bii (parametrizabil) i care va fi incrementat de cte ori predicia s-a dovedit
corect sau decrementat de fiecare dat cnd predicia s-a dovedit eronat. O
stare de confiden ridicat (peste un anumit prag threshold,
parametrizabil) ndreptete procesorul s fac predicie dovedind practic
predictibilitatea corect continu ntr-o istorie dat a respectivei
instruciuni de salt indirect. n caz contrar nu se face predicie.
Concretiznd, rezult c o confiden mic semnific un salt indirect
nepredictibil, nefiind necesar s-l rein n tabele.
Se pune problema, n condiiile existenei cmpului de confiden,
dac este necesar prezena cmpului LRU, i nu cumva confidena s
substituie sau s preia din sarcinile LRU-ului, existnd astfel o oarecare
dependen ntre ele. Rspunsul este unul afirmativ i exemplificm printr-o
situaie ce poate aprea: Fie un salt indirect (cu target-ul aferent) ajuns la o
confiden ridicat i care ulterior nu mai este accesat. Fr a exista cmpul
LRU, rezult c acest salt nu ar fi evacuat din structura Target Cache
niciodat (absurd!) pe viitor, evident, cu toate c el nu va fi de nici un
folos i datorit gradului de asociativitate sczut sunt necesare nlocuiri n
setul respectiv - miss. Se poate ca aceast situaie ipotetic s nu apar n
practic niciodat, n funcie de pattern-urile urmate de benchmark-uri.
Rezultatele exacte vor fi determinate ns abia dup simulare.
Cmpul LRU, este caracterizat tot printr-un numrtor saturat pe un
numr de bii (parametrizabil i independent de reprezentarea confidenei) i
reprezint gradul de activitate al saltului respectiv. Cu fiecare hit n
structura Target Cache (coincide tag-ul instruciunii de salt indirect cu unul
din cele poscache existente n setul determinat) este incrementat cmpul
LRU al respectivei locaii (salt) i decrementat pentru toate celelalte salturi
din setul respectiv. La un miss n structur, se va insera noul salt n tabel
avnd tag-ul i target-ul corespunztoare execuiei iar cmpurile LRU i
Confidena vor fi 0. Inserarea se va face conform principiului LRU: dac
mai exist locaii libere n set atunci se va insera pe prima poziie liber, n
caz contrar fiind necesar nlocuirea locaiei avnd cmpul LRU cel mai mic
cu valorile actuale ale cmpurilor Tag, Adr (Target), iar LRU i Confidena
vor fi 0. n cazul n care a fost hit n tabela Target Cache, dar Confidena a
fost sub pragul impus, nu s-a folosit predicia. Dac n urma execuiei s-a
dovedit c predicia dac s-ar fi fcut ar fi fost greit atunci respectivei
locaii i vor fi substituite cmpurile Adr (target-ul rezultat), Confidena (0)
i LRU-ul (0). Rezult astfel c, cel puin la nivel teoretic, rezultatele vor fi
slabe pe benchmark-uri cu o dispersie foarte mare a target-urilor (dac
acelai salt schimb target-urile unul dup altul fr a cpta o oarecare
ncredere); astfel, de fiecare dat se va substitui vechiul target cu noul target,

268 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
scznd practic n final acurateea prediciei - fapt ce se ntmpl i n cazul
"fr confiden".
Avnd n vedere toate aceste informaii privind mecanismul de
funcionare al schemei de predicie Target Cache modificat consider c se
poate afirma c cele dou cmpuri care intervin n procesul de predicie
(Confidena i LRU) sunt practic ortogonale. Mai mult, n cadrul
modificrile fcute se va introduce i un mecanism adaptiv de inserare
(evacuare a locaiilor conflictuale) n tabel. Astfel, evacuarea poate fi
fcut i dac LRU este mic slab activitate n ultimul timp, comparativ
cu celelalte salturi, dar confiden ridicat, respectiv i dac LRU este mare
foarte activ respectivul salt dar confidena sczut (a prezis greit de prea
multe ori).
Practic acurateea prediciei [Des02] crete substanial prin
restrngerea cazurilor n care se face predicie. Bazat pe simulare se observ
c pragul (threshold) reprezint obstacolul care determin selecia i cu ct
acesta este mai mare acurateea prediciei tinde spre absolut, dar procentajul
cazurilor n care se face predicie din totalul instruciunilor de salt indirect
scade semnificativ. Este de dorit totui ca un procentaj ct mai ridicat de
instruciuni de salt indirect s fie supuse prediciei i acurateea acestora s
fie foarte mare. Rezult c, ar fi ideal dac s-ar putea printr-o metod
oarecare s reducem pragul dar s pstrm acurateea de predicie ct mai
ridicat. n acest sens se va extinde informaia de corelaie pentru indexarea
structurii Target Cache. Adresarea unei scheme de predicie de tip Target
Cache mbogit cu mecanism de confiden (figura 5.30) cu informaie de
corelaie extins i dovedete i de aceast dat eficacitatea att din punct
de vedere al acurateii prediciei ct i din punct de vedere al performanei
globale a predictorului (vezi formula 5.11) obinndu-se rezultate
comparabile cu cele furnizate de un predictor PPM complet (vezi
subcapitolul 7.1.1).
5.3.3. PREDICIA SALTURILOR INDIRECTE:
5.3.3.1. IMPLEMENTAREA PREDICTORULUI HIBRID CU SELECIE
BAZAT PE ARITATE.
innd cont de experimentul lui Driesen dar mai ales de rezultatele
limitate, din punct de vedere al acurateii prediciei salturilor indirecte pe o
serie de benchmark-uri indiferent de mbuntirile arhitecturale aduse, pe
baza comportamentului dinamic am realizat o statistic (vezi capitolul de

Contribuii la predicia salturilor / apelurilor indirecte 269
rezultate 7.1.1) privind aritatea salturilor (monomorfe genereaz dinamic
un singur target, duomorfe genereaz dinamic 2 target-uri distincte,
respectiv polimorfe salturile se efectueaz la mai mult de dou adrese
destinaie distincte).
Mediile aritmetice obinute pe benchmark-urile SPEC (95, 2000)
bogate n salturi indirecte sunt n concordan cu rezultatele obinute de
Driesen i exprim faptul c dei salturile monomorfe sunt prezente ntr-o
proporie covritoare din punct de vedere static comparativ cu cele
duomorfe i respectiv polimorfe, ele reprezint doar aproximativ o treime
din totalul branch-urilor indirecte dinamice executate. Salturile polimorfe,
dei puine din punct de vedere static (dup cum s-a putut observa i n
subcapitolul 4.2), dinamic constituie aproape jumtate din total.
Pornind de la predictoarele cascadate pe mai multe niveluri i
respectiv hibride [Dri98b, Dri98c], am implementat software i simulat o
structur hibrid de predicie (vezi figura 5.31), compus dintr-un predictor
de tip LastValue i cel mai bun predictor contextual determinat n urma
simulrilor cu istorie i pattern fix, n dou ipostaze: (istorie redus 32 i
pattern 3, sau istorie bogat 256 i pattern 6) selecia fcndu-se pe baz
de aritate, dup cunoaterea n prealabil a informaiilor de profil aferente
fiecrui salt indirect.


Figura 5.31. Predictor hibrid cu selecie bazat pe aritate.
Tabela informaiilor de profil este complet asociativ i reine
informaii privind aritatea fiecrui salt indirect, determinate n urma unei
anterioare simulri privind studiul localitii valorilor. Predictorul
Contextual P2 este similar celui din subcapitolul 5.3.1 (vezi figura 5.27) iar
P1 este identic cu cel folosit n predicia valorilor i va fi descris n
subcapitolul 6.1.1. Ambele predictoare au un grad parametrizabil de
asociativitate i sunt indexate cu ajutorul adresei instruciunii de salt indirect
(PC).

270 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Predictorul hibrid o singur structur face predicie la un moment
dat - (LastValue+Contextual), cu selecie bazat pe aritate
mbuntete acurateea prediciei salturilor indirecte cu procentaje
cuprinse ntre 2.44% i 5.42% n funcie de structura de predicie cu care se
face comparaia (cel mai performant predictor contextual sau respectiv
structur de predicie de tip TargetCache mbogit cu mecanism de
confiden i indexat cu informaie de corelaie extins). n medie
aritmetic pe benchmark-urile SPEC95 acurateea maxim de predicie
obinut este de 93.77%, apropiat de valorile maxime raportate n literatura
de specialitate (94.8% cu predictor cascadat pe 3 niveluri). Procentajul
substanial de salturi polimorfe dinamice i dispersia ridicat a target-urilor
anumitor salturi vezi subcapitolul 4.3 st la baza limitrii acurateii
prediciei. Rezultatele excelente obinute oblig la introducerea i
exploatarea predictoarelor hibride i cascadate i n alte domenii de
cercetare n vederea creterii paralelismului la nivelul instruciunilor i a
firelor de execuie: predicia salturilor condiionate i predicia valorilor
instruciunilor.
n continuare se exemplific structurile de date noi introduse, opiunile
de simulare, principalele modificri aplicate funciei sim-main din modulul
sim-vpred.c precum i celorlalte funcii (foundValue_INDIR,
aritate_Address din vped.c), care descriu funcionarea predictorului cu
selecie bazat pe aritate.
n implementare s-au folosit urmtoarele trei structuri, extinse din
modelul implementrii pentru localitatea valorii:

typedef struct element *valueList;
struct element
{
sword_t value;
int freq; /* a fost adugat pentru determinarea aritii
fiecrui salt indirect */
valueList nextValue;
};

typedef struct location *addrList;
struct location
{
md_addr_t addr;
addrList nextAddress;
valueList values;
};

Contribuii la predicia salturilor / apelurilor indirecte 271
typedef struct typelocation *addrType;
struct typelocation
{
md_addr_t addr;
addrType nextAddress;
int type; //4-monomorfe;2-duomorfe;1-polimorfe
};
Identificarea cmpurilor din structur este urmtoarea:
addr adresa (PC) instruciunii de salt indirect (jal $reg sau j $reg);
values reprezint lista ultimelor k valori dinamice pentru saltul
respectiv (practic ultimele k target-uri aferente instruciunii
de salt indirect);
Prezentm n continuare principalele funcii ce intervin n cadrul
procesului de determinare a aritii: foundValue_INDIR, aritate_Address,
definite n modulul vpred.c.

int foundValue_INDIR(addrList l, sword_t value, int history);
- Funcia foundValue_INDIR anterior descris la seciunea 5.3.1 este
mbogit cu numrtoare de frecven necesare n calculul aritii
fiecrui salt indirect.
void aritate_Address(addrList l);
- Parcurge lista de adrese de salturi indirecte i preia informaiile de aritate
anterior calculate stabilind procentajul de instruciuni statice i dinamice
monomorfe / duomorfe / polimorfe existent n benchmark-ul respectiv.
De asemenea, adresa i aritatea fiecrei instruciuni de salt indirect este
nscris ntr-un fiier care va fi folosit ulterior pe post de informaii de
profil n procesul de predicie.
n continuare este prezentat modificarea adus nucleului de execuie
al simulatorului (fazele Fetch instruciune, Decodificare i Execuie
aferente instruciunilor de salt indirect) rezident n rutina sim-main din
modulul sim-vpred.c. Primul pas este constituit din preluarea informaiilor
de aritate din fiierul PCType.txt, avnd rolul tabelei informaiilor de profil
(obinute prin simularea pe acelai benchmark cu flagul pred pe 0) i
introducerea acestora n lista PCType.

/***************************sim-main*************************/
if (predict == 1)
{
/* Se creeaz o list dinamic cu informaiile de aritate stocate n fiier pentru a reduce
accesul la discul magnetic pe msur ce se ntlnete fiecare instruciune de salt
indirect i trebuie prezis */

272 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
....
n caz c nu sunt colectate aceste informaii sunt afiate mesaje de eroare care impun
mai nti generarea acestora.
}

MD_FETCH_INST(inst, mem, regs.regs_PC); /* extragerea instruciunilor din
cache/memorie */
MD_SET_OPCODE(op, inst); /* decodificarea instruciunii */
/* execuia instruciunii */
switch (op){
#define DEFINST(OP,MSK,NAME,OPFORM,RES,FLAGS,O1,O2,I1,I2,I3) \
#define DEFLINK(OP,MSK,NAME,MASK,SHIFT)
#define CONNECT(OP)
}

// tratarea instruciunilor de salt indirecte pure n faza de execuie
if((MD_OP_FLAGS(op)& F_INDIRJMP)&& !MD_IS_RETURN(op)){
sim_indir_refs++;

artateType = PCtype;
bContinua = 1;
nContor = 0;
while ((artateType != NULL) && (bContinua) ){
if(artateType->addr == regs.regs_PC){
arietate = artateType->type;
bContinua = 0;
}
artateType = artateType->nextAddress;
}
....
if((arietate == 4) || (arietate == 2)) //pentru monomorfe i duomorfe
{
history = 1; /* salturile monomorfe i duomorfe sunt predicionate de un
predictor LastValue */
auxvpt = lvpt;
}
else{
auxvpt = jvpt; /* salturile polimorfe sunt predicionate de un
predictor contextual */
history = historyBackup;
}
/************************************************************/
5.3.3.2. PREDICTOR HIBRID CU SELECIE BAZAT PE CONFIDEN.
n continuare sunt prezentate modificrile aduse pentru implementarea
predictorului hibrid cu selecie bazat pe confiden (numrtoare saturate).

Contribuii la predicia salturilor / apelurilor indirecte 273
Arhitectura predictorului este similar cu cea prezentat n figura 5.15. Se
disting urmtoarele etape n realizarea prediciei:
- Accesarea tabelei de tip selector pentru determinarea predictorului
utilizat (cel cu confidena mai mare).
- Simularea (generarea prediciei) cu predictorul determinat.
- Actualizarea tabelei Selector n funcie de rezultatul simulrii.
n aceast versiune de simulator sunt disponibile urmtoarele
combinaii pentru cele dou tipuri de predictoare componente:
- P1 TargetCache ; P2 LastValue
- P1 Contextual (Markov ordin m); P2 - Contextual (Markov ordin n), cu
m > n.
- P1 TargetCache ; P2 Contextual (Markov ordin k).
- P1 - Contextual (Markov ordin k); P2 LastValue.

Selectorul este implementat sub forma unei liste nlnuite, avnd ca
elemente obiecte din structura urmtoare:

typedef struct _SELaddrList{
md_addr_t addr; //adresa instructiunii de salt indirect
sword_t counter1; //numrtorul aferent primului predictor (P1).
sword_t counter2; /*numrtorul aferent celui de-al doilea
predictor (P2).*/
struct _SELaddrList *nextAddress;
}SELaddrList;
Pentru implementarea selectorului s-au folosit funciile
foundAssociativeSELAddress, pushSELAddress, updateSelector,toate
implementate in fisierul vpred.c.

int foundAssociativeSELAddress(md_addr_t addr, SELaddrList* sel);
- Se determin dac instruciunea a mai fost anterior predicionat i n caz
afirmativ se preia confidena fiecruia (care din cele dou a prezis cu
succes mai mult timp). Valoarea prezis de componenta cu confidena
cea mai ridicat va fi cea folosit n continuare.
SELaddrList* pushSELAddress(SELaddrList* sel, md_addr_t addr);
- Dac instruciunea nu a mai fost anterior predicionat atunci este
inserat n lista de confidene i sunt asignate grade de ncredere egale
ambelor predictoare folosite.
void updateSelector(SELaddrList* sel, md_addr_t addr, int predNr, int predOk),

274 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
- Funcia se apeleaz dup verificarea prediciei, penaliznd n cazul unei
predicii greite predictorul care a generat valoarea prezis, sau mrindu-i
confidena acestuia n cazul unei predicii corecte.
5.3.4. JIndirSim SIMULATOR FUNCIONAL PENTRU
PREDICIA SALTURILOR INDIRECTE.
5.3.4.1. ARHITECTURA APLICAIEI.
n acest subcapitol se va prezenta structura bazei de date dezvoltate i
utilizate, modul de acces la aceasta, modul de desfurare al simulrii din
punct de vedere al firelor de execuie folosite, precum i tehnica folosit
pentru raportare.
Pentru salvarea parametrilor i rezultatelor simulrilor s-a folosit o
baz de date Microsoft Access 2000, i anume JindirPred.mdb. Aceast
baz de date conine dou tabele: SimCaract, n care se memoreaz
caracteristicile simulrilor realizate (tipul predictorului, tipul
benchmarkului, benchmarkul, parametrii de simulare, ... etc); SimResult, n
care sunt memorate rezultatele simulrilor (timpul n care a fost realizat
simularea, numrul de salturi indirecte, numrul de salturi indirecte
predicionate corect). Cele dou tabele sunt legate prin cmpul Id, avnd
proprietatea autonumber n SimCarat i necesar n SimResult.
Ca modalitate de conectare la baza de date s-a ales tehnologia ODBC,
pe de o parte pentru a face mai accesibil conectarea (nu mai este nevoie de
scrierea stringului de conectare), iar pe de alt parte pentru transparena
serverului de baze de date. Open Database Conectivity (ODBC) este o
component a Microsoft Windows Open Services Architecture (WOSA).
Interfeele ODBC fac posibil accesul din aplicaii la aproape orice date
relaionale stocate in aproape toate sistemele de gestiune a bazelor de date
(DBMS). ODBC este larg acceptat ca API (application programming
interface) pentru accesul la bazele de date. Se bazeaz pe specificaia Call-
Level Interface (CLI) din X/OPEN i ISO/IEC pentru API-uri de baze de
date i folosete SQL ca limbaj de acces la bazele de date. Interfaa ODBC
utilizeaz drivere pentru conversia sintaxei SQL de la un produs la altul.
Microsoft a implementat un numr de drivere ODBC pentru a accesa
diverse date stocate (Access, Foxpro, MS SQL Server, Oracle, Paradox).


Contribuii la predicia salturilor / apelurilor indirecte 275

Figura 5.32. Interfaa ODBC cu aplicaia.
Pentru procesul de simulare, dup colectarea datelor necesare, se
creeaz un fiier sim.bat n cadrul cruia este nregistrat comanda de
execuie pentru simulatorul solicitat, mpreun cu toi parametrii acestuia
din linia de comanda. Se creeaz un proces care s ruleze acest fiier
(sim.bat). Apoi este creat un fir de execuie care, din timp n timp (iniial
este setat la o secund, dar, pentru simulri mai laborioase este recomandat
mrirea acestui interval) verific daca simularea s-a ncheiat (vezi figura
5.33).


Figura 5.33. Firul de execuie pentru monitorizare.
Aceast verificare este realizat prin captarea numelor i
identificatorilor proceselor care ruleaz la acel moment, iar apoi cutarea
procesului cu acelai identificator (ID) cu procesul care ruleaz fiierul
sim.bat. n cazul n care procesul s-a ncheiat, tot n cadrul firului se preiau
datele din fiierul rezultat n urma simulrii (simout.res) i se introduc n
baza de date. nainte de introducerea datelor rezultate n baza de date, se
lanseaz urmtoarea simulare, dac aceasta exist. Deoarece cele dou
tabele sunt legate printr-un ID cu proprietatea autonumber, s-a folosit

276 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
metoda AddNew, care adaug o nregistrare goal n setul de nregistrri
(RecordSet), care se actualizeaz cu valorile dorite. n acest fel este posibil
obinerea Identity-ului ID, fr a fi n pericol de a pointa rezultatele la alt
simulare, cum s-ar fi ntmplat n cazul n care ID-ul s-ar fi preluat cu
funcia Max(ID). Apoi se scriu valorile rezultate n tabela SimResult.
Pentru obinerea statisticilor s-a folosit mediul de raportare Seagate
Crystal Reports, mediu capabil s creeze rapoarte i din baze de date prin
conexiune ODBC. Crystal Reports este o modalitate rapid i eficient de a
ordona datele, de a evidenia anumite caracteristici etc. n ultima vreme,
Crystal Reports este tot mai ntlnit n rndul aplicaiilor, de la soluii ERP
pn la softuri de dezvoltare precum Visual Studio .Net. Pentru integrarea
rapoartelor n cadrul aplicaiei s-a folosit unul dintre utilitarele de
vizualizare (view-er) existente, ncorporat n componentele CRPE. S-a creat
clasa CrapView derivat din CView, clasa ce va fi suportul pentru raportul
de afiat. Afiarea raportului se face prin funcia AfxRaport(CString
szRaport, CString szWhere), funcie ce permite filtrarea datelor din raport i
din program, nu numai din design-ul raportului. Un exemplu de clauz SQL
folosit este urmtorul: WHERE Simulator = Markov AND
DimensiuneTabel = 256 AND Istorie = 256. Se configureaz apoi datele
care se doresc afiate sub forma grafic: Acuratee, AVERAGE(Acuratee),
rezultatul putnd fi urmrit n figura 5.41.
n ceea ce privesc dezvoltrile viitoare asupra aplicaiei, s-ar putea
avea n vedere extinderea domeniului de statistici prin crearea de noi
rapoarte care sa evidenieze diverse situaii, cum ar fi determinarea ordinului
optim aferent predictoarelor Markov din cadrul predictorului hibrid cu dou
predictoare Markov. O alt direcie de dezvoltare ar fi implementarea unei
strategii de introducere dinamic n aplicaie a unui nou predictor, fr a fi
necesar scrierea de cod. O idee n aceast direcie ar fi stocarea datelor
caracteristice predictoarelor ntr-o tabel (executabilul cu care se execut,
parametrii de care are nevoie, parametrii pe care nu i folosete etc.), din
care s se colecteze datele nainte de simulare. n acest caz, operaia de
adugare a unui predictor s-ar reduce la adugarea unei linii ntr-o tabel.
De asemenea, implementarea de noi statistici s-ar putea implementa
dinamic, aproximativ prin aceleai metode. Alt direcie de dezvoltare este
filtrarea datelor corespunztoare simulrilor din aplicaie, proces nceput dar
adus doar n stadiul n care datele pot fi ordonate dup orice cmp, coloanele
pot fi rearanjate dup preferinele utilizatorului. Ar putea urma
implementarea posibilitii de tergere a articolelor din lista caracteristicilor
simulrilor. Avnd funcia AfxRaport care afieaz raportul cu posibilitatea
introducerii unei clauze SQL (cel mai des folosit este WHERE), pn la
implementarea unui mecanism de filtrare dinamic a datelor din rapoartele

Contribuii la predicia salturilor / apelurilor indirecte 277
existente mai este doar un mic pas, respectiv crearea unui ecran care s
permit filtrarea datelor i apoi reorganizarea datelor din ecran ntr-o clauz
Where de exemplu. Poate cea mai important dezvoltare ulterioar care
poate fi realizat n scopul eficientizrii procesului de simulare pe
benchmark-urile actuale existente (SPEC 2000 nglobeaz instruciuni
dinamice de ordinul sutelor de miliarde vezi tabelul 3.2) se refer la
distribuirea proceselor de predicie n cadrul unei reele. Avantajul evident
ar consta n generarea mult mai rapid a acurateii medii de predicie pentru
simulrile multiple, utile n statisticile care stau la baza emiterilor de
concluzii privind eficiena schemelor hardware implementate.
5.3.4.2. JIndirSim. INTERFA GRAFIC. GHID DE UTILIZARE.
Privind din punctul de vedere al utilizatorului, se consider imperios
necesar o interfa vizual prietenoas, bazat pe meniuri, ferestre de
dialog, imagini grafice edificatoare etc. Avantajul utilizrii imaginilor i a
butoanelor grafice, const n caracterul internaional al imaginilor, spaiu
redus de stocare fa de echivalentele textuale. Principalul scop al utilizrii
imaginilor grafice este s ajute utilizatorul s recunoasc un program sau o
funcie mai rapid dect prin parcurgerea unui text descriptiv. Interfaa
trebuie s fie simplu de utilizat, s permit utilizatorului manevrarea uoar
a simulatorului, interpretarea i prelucrarea eficient a rezultatelor,
extinderea ulterioar cu noi opiuni de meniu sau salvarea diverselor
rezultate sub diferite forme.
Implementarea interfeei simulatorului n mediul Developer Studio din
Visual C++ (versiunea 6.0) s-a fcut datorit faptului c limbajul C++ ofer
un suport puternic pentru programarea orientat pe obiecte: ncapsulare,
moteniri multiple, redefinirea operatorilor, funcii i clase prieten etc.
Conceptele de motenire i polimorfism creeaz premisele dezvoltrii
ulterioare (extinderii) a variantei actuale de simulator. De asemenea,
implementarea trebuie realizat n aa maniera nct, orice modificare
(adugare) n hardware sau software s fie fcut cu minim de efort. Pe
lng compilator, pachetul Visual C++ conine biblioteci, exemple i
documentaia necesar pentru crearea aplicaiilor n sistemele de operare
Windows 9x, Windows 2000 sau Windows XP.
Pentru a porni simulatorul este nevoie de un sistem pe care s fie
instalat un sistem de operare pe platforma NT (Windows NT 4.0, Windows
2000, Windows XP, Windows 2003) i s existe benchmark-urile
(subdirectoarele) SPEC95 i 2k cu programele de test aferente n locaia
stabilit (iniial C:\Benchmark\). Datorit incompatibilitilor dintre

278 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
sistemele de operare pe platforma NT i sistemele Windows 9x (funcii
precum EnumProcesses, folosite n aplicaie, nu au corespondent pe sisteme
de operare Windows 9x) aplicaia nu funcioneaz corect, neputnd
surprinde momentul n care simularea a luat sfrit (vezi subcapitolul
anterior). Pentru funcionarea corect a aplicaiei "JIndirSim" procesul care
st n spatele aplicaiei (sim-vpred.exe) i care este vital acesteia, poate fi
compilat/asamblat/linkeditat att sub sistemul de operare Windows
NT/Windows 2000/Windows XP ct si sub Windows 9x.
Aplicaia este alctuit din punct de vedere al interfeei dintr-un
formular (FormView) ce conine ecranul i dou ferestre dockabile, menite
sa ofere utilizatorului posibilitatea adaptrii interfeei n funcie de
preferinele proprii. (vezi figura 5.34).


Figura 5.34. Selecia tipului de simulare
Pentru ca zona vizibil a aplicaiei s cuprind ct mai multe controale
i ferestre necesare unei simulri chiar i la rezoluii mai mici, att fereastra
de configurare a tipului simulrii sau a statisticii dorite ct i fereastra ce
conine caracteristicile simulrilor anterioare pot fi pliate pe oricare din cele
patru margini a aplicaiei, sau chiar nchise. Aceste ferestre pot fi nchise sau
vizualizate din meniul principal View->ControlPanel (pentru fereastra de

Contribuii la predicia salturilor / apelurilor indirecte 279
configurare) sau View->SimCaract (pentru fereastra ce conine
caracteristicile simulrilor). Din aceleai considerente, pentru a evita
ncrcarea ecranului cu controale nefolosite la acel moment, controalele
necesare simulrii au fost separate de cele necesare vizualizrii statisticilor
prin folosirea unui control cu foi de proprieti.
n continuare sunt prezentai paii necesari procesului de simulare i
de vizualizare a rezultatelor:
Se alege tipul simulatorului dorit din fereastra ControlPanel (simulatorul
implicit cu care pornete aplicaia este de tip TargetCache) (vezi figura
5.35); n funcie de tipul predictorului ales, n ecran se ncarc controalele
corespunztoare parametrilor acestuia, cu eventuale valori prestabilite (de
exemplu, la predictorul de tip LastValue parametrul history este
ntotdeauna 1). Sunt disponibile urmtoarele tipuri de predictoare:
TargetCache, LastValue, Stride, Contextual (Markov de ordin (k)),
predictor hibrid alctuit din dou predictoare Markov (unul de ordin mai
mare, iar dac acesta nu reuete s predicioneze, se ncearc cu unul de
ordin mai mic), PPM complet, cu selecie bazat pe confiden
(combinaii ntre TargetCache, Markov i LastValue), precum si
predictor cu selecie bazat pe aritate.


Figura 5.35. Fereastra de alegere a tipului de simulator
Se aleg valorile parametrilor corespunztori simulatorului ales n
fereastra ecran (vezi figura 5.36)


280 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 5.36. Ecranul cu parametrii simulatorului
Se aleg benchmark-urile pentru care se dorete simularea prin dublu
click pe numele acestora din lista Benchmark, sau prin selectarea mai
multor benchmarkuri n lista i apsarea tastei Enter; n urma acestei
operaii, benchmark-urile selectate vor fi introduse n lista SelBenchmark.
Daca se dorete renunarea simulrii pe unul sau mai multe benchmarkuri
selectate, se marcheaz acestea n lista SelBenchmark i se apas tasta
Delete.
Se apas butonul Simulate pentru a ncepe simularea. Daca se dorete
oprirea simulrii, se poate apas butonul StopSimulate , disponibil pe
durata n care simularea este n curs de desfurare.
Pentru a vizualiza rezultatul simulrii, se selecteaz linia dorit n lista
simulrilor efectuate SimCaract (figura 5.37). n urma acestei operaii va
aprea n locul ecranului cu parametri raportul corespondent simulrii
selectate (vezi figura 5.38)

Figura 5.37. Lista parametrilor pentru simulrile anterioare


Contribuii la predicia salturilor / apelurilor indirecte 281

Figura 5.38. Raportul afiat dup simulare
Dup efectuarea mai multor simulri pot fi vizualizate diverse statistici,
disponibile dup activarea foii de proprieti Statistici din ControlPanel
(vezi figura 5.39). Aceste statistici sunt mprite n funcie de tipul de
benchmark, respectiv SPEC95 i SPEC2k; exist statistici exprimate n
funcie de tipul de predictor folosit, respectiv evidenierea performanelor
acestuia pe anumite benchmark-uri (vezi figura 5.40); exist i statistici
pe mai multe benchmark-uri, cum ar fi gsirea ordinului optim al
predictorului Markov (vezi figura 5.41).


Figura 5.39. Statisticile disponibile n versiunea curent de simulator

282 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 5.40. Raport statistic pentru un tip de predictor (TargetCache)


Figura 5.41. Raport statistic pentru determinarea ordinului optim al predictorului
Markov

Contribuii la predicia salturilor / apelurilor indirecte 283

Problema salturilor indirecte este de mare actualitate, cu precdere n
contextul programelor obiectuale, legat mai ales de implementarea
polimorfismelor. n acest caz, pe baza adreselor de nceput ale diferitelor
obiecte vizate se determin iniial adresa tabelei metodelor virtuale apoi
adresa funciei (metodei virtuale) care va fi nscris dinamic n registrul de
indirectare al saltului implementndu-se astfel polimorfismul [Roth99].
Pe baza schemelor de predicie descrise n acest subcapitol (5.3) i
totodat implementate software se pot urmri n capitolul 7.1 rezultatele
obinute n urma simulrilor pe programe de test reprezentative, sub form
grafic sau tabele, ajutnd la nelegerea particularitilor fiecrei scheme n
parte dar i la determinarea unei configuraii optime din punct de vedere al
performanei (acurateea prediciei n acest caz).
6. CERCETRI CU PRIVIRE LA PREDICIA
DINAMIC A VALORILOR INSTRUCIUNILOR
6.1. PREDICIA VALORILOR INSTRUCIUNILOR
(LOAD, ALU).
6.1.1. DESCRIEREA SIMULATORULUI VALUE
PREDICTOR.
Pentru extinderea setului de instrumente SimpleScalar cu modulul
VPred.c (Value Predictor care exploateaz gradul de localitate existent
n programele de calcul pe tipuri de instruciuni, pe regitri etc. i
implementeaz o mulime de 4 predictoare de la simple la ct mai
complexe) s-a pornit de la scheletul simulatorului funcional sim-bpred.c.
Dup descrcarea de pe Internet de la adresa
"http://www.cs.wisc.edu/~mscalar/simplescalar.html" a fiierului
simplesim-3.0b.tar.gz, funcia myrand() din misc.c a fost modificat pentru
eliminarea erorii aprute la compilare; astfel apelul funciei random() a fost
condiionat i de defined(_CYGWIN32_). Pentru compilarea surselor s-a
folosit aplicaia Cygwin (comanda make), acesta fiind un emulator de
Linux, care permite generarea executabilului pentru sistemul Windows.
Pentru implementarea noului simulator VPred (Value Predictor), a fost
necesar modificarea fiierului Makefile astfel nct la comanda make s fie
compilat i acesta. Structurile utilizate, precum i declaraiile funciilor se
afl n fiierul vpred.h, iar definiiile funciilor pot fi gsite n vpred.c.
Motorul simulatorului l reprezint funcia sim_main() din sim-vpred.c, aici
sunt folosite att structurile ct i funciile amintite.
Fa de arhitectura clasic a unui procesor superscalar implementat n
simulatorul sim-bpred, se introduc structurile de date necesare pentru
determinarea localitii valorilor existent la nivelul instruciunilor
Load/ALU sau a regitrilor din benchmark-urile SPEC. Localitatea
(vecintatea) valorilor descrie probabilitatea statistic de referire a unei
Cercetri cu privire la predicia dinamic a valorilor instruciunilor 285
valori anterior folosite i stocat n aceeai resurs (locaie de memorie,
registru). Localitatea valorii pentru un benchmark este calculat ca raport
dintre numrul de instruciuni Load dinamice care regsesc o aceeai
valoare n memorie ca i precedentele k accese i numrul de instruciuni
Load dinamice existente n benchmark-ul respectiv, lucru ce presupune
memorarea adresei fiecrei instruciuni Load dinamice din acel benchmark.
Au fost abordate dou moduri de exploatare a localitii valorilor din
programele de calcul. Una, propus de Lipasti, n care s-a forat puin n
obinerea localitii, prin pstrarea n istoria de valori aferente unei
instruciuni doar a valorilor distincte, care pot apare nu neaprat la fiecare
instan a respectivei instruciuni [Lip96] i a doua, n care, n lista de valori
rezultate pentru o anumit instruciune s-au pstrat ultimele valori,
indiferent dac unele dintre acestea s-au repetat.
De asemenea se introduc i structurile necesare pentru implementarea
tehnicilor de predicie a valorilor prezentate n subcapitolul 2.2.2. Utiliznd
aceast tehnic hardware speculativ [Lip96] se urmrete exploatarea
redundanei existente n programe prin comprimarea dinamic a
dependenelor de date. Tehnica Load Value Prediction predicioneaz
rezultatele instruciunilor Load la expedierea spre unitile funcionale de
execuie exploatnd corelaia dintre adresele respectivelor instruciuni (sau
date) i valorile citite din memorie de ctre acestea, permind deci
instruciunilor Load/ALU etc. s se execute nainte de calculul adresei i
mbuntind astfel performana. Ca i consecin a prediciei valorilor se
reduc efectele defavorabile ale hazardurilor RAW, prin reducerea
ateptrilor instruciunilor dependente ulterioare. Este evident c acest ctig
este mult mai mare atunci cnd predicia se face pe calea critic de program
[Cal99].
Un alt deziderat al cercetrii l-a constituit exploatarea gradului de
localitate exprimat i de alte tipuri de instruciuni (aritmetico-logice ALU
i de salt indirect - JIndir). Asupra acestora din urm s-a insistat pe
parcursul subcapitolelor 5.25.3. Avantajele prediciei valorii pentru
instruciunile ALU (rezultatele acestora) constau att n reducerea timpului
de execuie pentru instruciunile consumatoare de timp (DIV, MULT) dar i
n reducerea efectelor defavorabile ale hazardurilor RAW, prin reducerea
ateptrilor instruciunilor dependente ulterioare.
Pentru determinarea localitii / prediciei valorilor sunt folosite
urmtoarele structuri:





286 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
typedef struct VHTelement *VHTvalueList;
struct VHTelement
{
sword_t value;
VHTvalueList nextValue;
int count; // este folosit doar de ctre predictorul contextual
};

typedef struct VHTlocation *VHTaddrList;
struct VHTlocation
{
md_addr_t addr;
VHTaddrList nextAddress;
VHTvalueList values;
int automat;
sword_t stride[2]; // este folosit doar de ctre predictorul incremental
};

Fiecare locaie din VHT (tabela de predicie) conine urmtoarele cmpuri:
addr adresa instruciunii sau adresa datei;
values reprezint lista celor mai recente valori regsite de respectivul
Load n memorie;
automat este un automat cu patru stri. Un Load este nepredictibil dac
automatul acestuia se afl n starea 0 sau 1 i este predictibil
dac automatul se afl n starea 2 sau 3;
stride reprezint dou cmpuri n care sunt memorai cei doi pai
utilizai n predicia incremental.

Presupunnd c pe lng corelaia dintre adresele instruciunilor Load
i valorile citite din memorie de ctre acestea, exist o corelaie i ntre
adresele datelor aferente instruciunilor Load i valorile de la acele adrese,
simulatorul a fost proiectat n aa fel nct s permit utilizarea n predicie
att a adresei instruciunii ct i a adresei datei (flag-ul -memaddr). Ali
parametri importani ai simulatorului care pot fi modificai de ctre
utilizator, sunt: tipul simulrii (-pred - determinarea localitii (0) pe tipuri
de instruciuni / regitrii procesorului MIPS sau predicia valorilor (1)),
gradul de localizare (-history istoria folosit), tipul tabelei de predicie (-
assoc - mapat direct (0) sau asociativ (1)), dimensiunea tabelei de
predicie exprimat n numr de locaii (-lvpt), tipul predictorului utilizat:
contextual (incremental - 0, contextual - 1 sau hibrid - 2) i dimensiunea

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 287
contextului (-pattern) n cazul predictoarelor contextuale i hibride. Selecia
tipului de predictor LastValue se face impunnd parametrul history pe 1.
Datorit similitudinilor dintre ntre principalele funcii ce intervin n
cadrul predictorului Value Predictor i cele aferente predictorului PPM
prezentat n cadrul subcapitolului 5.3.1 referitor la salturi indirecte:
predictValue, foundAssociativeLVPTAddress i insertLVPTValue, s-a
renunat la prezentarea coninutului acestora.
La citirea unei instruciuni Load din cache sau memoria central, n
cazul unei tabele VHT (Value History Table) mapat direct, cu cei mai puin
semnificativi bii ai adresei instruciunii Load (PC
LOW
) se adreseaz tabela
VHT (vezi figurile 2.14, 2.17, 2.18). Maparea se face dup urmtoarea
formul:
index = addr mod VHTdim,
unde addr reprezint adresa instruciunii sau adresa datei, iar VHTdim
reprezint dimensiunea tabelei de predicie. Se verific dac addr este egal
cu adresa de la indexul respectiv, caz n care avem hit. n cazul n care
valorile nu sunt egale vom avea miss n VHT, nu se poate face predicie, iar
locaia corespunztoare indexului calculat va fi actualizat cu noua adres i
cu valoarea adus din memorie de instruciunea Load.
Dac se folosete o tabel VHT asociativ, addr este comparat cu
adresa din fiecare locaie a tabelei i va fi hit n cazul n care adresa este
gsit. Dac avem miss n VHT, pe baza algoritmului LRU (Least Recently
Used) implementat, se evacueaz din tabel cel mai puin recent accesat
Load i se introduce noua adres i valoarea citit din memorie. S-a dorit
evaluarea performanelor diferitelor predictoare n condiiile utilizrii unui
algoritm LRU perfect, care e mai greu de implementat n hardware.
Tabela VHT poate fi privit ca o list n care cele mai recent accesate Load-
uri se afl la nceput, iar cele mai puin recent accesate Load-uri se afl la
sfrit. n cazul unui hit n VHT Load-ul gsit trece pe prima poziie din
list. n cazul unui miss n VHT, se evacueaz Load-ul aflat pe ultima
poziie, iar noul Load se insereaz la nceputul listei.
Indiferent de tipul tabelei utilizate (mapat direct sau asociativ), n
cazul n care avem hit n VHT se face predicie. n funcia predictValue din
vpred.c sunt implementate: predictorul de tip Last Value (vezi figura
2.14), predictorul incremental de tip 2-delta (vezi figura 2.17), predictorul
contextual de tip PPM complet (vezi figura 2.18) i predictorul hibrid
(incremental, contextual figura 2.20). n aceast funcie este folosit
predictorul corespunztor parametrilor introdui de ctre utilizator. n cazul
n care automatul din locaia VHT se afl n starea predictibil, se nainteaz
valoarea prezis i aceasta este preluat prin bypassing de ctre
instruciunile dependente aflate n ateptare n staiile de rezervare. La

288 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
returnarea datei reale din memorie, aceasta este comparat cu valoarea
prezis, i instruciunile dependente executate speculativ fie urmeaz
parcursul normal - nivelul Write Back al structurii pipe - fie sunt retrimise
spre execuie. Tabela VHT este actualizat prin incrementarea automatului
n cazul unei predicii corecte respectiv decrementarea acestuia n cazul unei
predicii greite i introducerea datei citite din memorie, evacund din
locaia respectiv cea mai veche valoare. Lista valorilor implementeaz o
structur de tip coad (pentru reinerea celor mai recente history valori). n
cazul predictorului Last Value, istoria fiind egal cu 1, se evacueaz de fapt
ultima valoare.
Rezultatele simulrii (gradul de vecintate al valorii, acurateea
prediciei) mpreun cu parametrii arhitecturii vor fi scrii ntr-un fiier
(simout.res) n directorul curent (unde se afl programele de test i
simulatorul sim-vpred.exe). n cazul simulrii unui predictor de valori este
afiat numrul Load-urilor a cror valoare a fost prezis corect. Alte date
care arat eficiena automatului implementat sunt (ncrederea oferit de
acesta): numrul Load-urilor clasificate predictibile - generate de automatul
de predicie, numrul Load-urilor clasificate nepredictibile - generate de
automatul de predicie, numrul Load-urilor predictibile care au fost
prezise corect (automatul a clasificat valoarea predictibil iar valoarea
propus de automat a fost exact cea care se aducea din memorie). Analog
pentru cele nepredictibile prezise greit (n sensul c automatul a clasificat
valoarea ca nepredictibil iar valoarea propus a fost ntr-adevr diferit de
cea adus din memorie).
n ce privete interfaa grafic a simulatorului, pentru lansarea acestuia
n execuie este nevoie de un sistem pe care s fie instalat Windows 9x sau
Windows 2000 i s existe benchmark-urile SPEC (programele de test). Din
motive ce in de sistemul de operare Windows 9x (preluarea
identificatorului unui proces printe - lucru care se face diferit n Windows
NT) aplicaia nu poate fi rulat pe Windows NT. Aceasta se datoreaz
funciilor API folosite (CreateToolhelp32Snapshot - care creeaz o list cu
toate procesele aflate n execuie n momentul respectiv, Process32First -
care determin primul proces din lista anterior creat i Process32Next -
care determin urmtorul proces din list ce respect o anumit condiie),
funcii care nu au corespondent n Windows NT. Pentru funcionarea
corect a aplicaiei "Value Predictor" procesul care st n spatele aplicaiei
(sim-vpred.exe), de importan vital, poate fi compilat / asamblat / link-
editat att sub sistemul de operare Windows NT / Windows 2000 ct i sub
Windows 9x. Practic toate opiunile de simulare aferente procesului sim-
vpred.exe i au corespondent n controalele de tip editare, checkbox, list
din aplicaia vizual. De asemenea, rezultatele generate de sim-vpred.exe

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 289
sunt preluate din fiierul simout.res n controalele aplicaiei Value Predictor
pentru a nlesni nelegerea i prelucrarea ulterioar a acestora. Trebuie
specificat c, din punct de vedere cronologic, cercetarea aferent acestui
capitol a fost fcut anterior celei din subcapitolul 5.3; se observ astfel o
mbuntire a instrumentelor, modului de simulare i exploatare a
rezultatelor n cazul salturilor indirecte.
La lansarea n execuie a aplicaiei, pe ecran apare o fereastr de
configurare nzestrat cu un meniu principal (figura 6.1) i se poate trece la
introducerea parametrilor simulrii.


Figura 6.1. Fereastra de configurare a simulatorului Value Predictor
Unul din cei mai importani parametri este benchmark-ul simulat. La
apsarea butonului Browse, se deschide o fereastr de dialog obinuit
(similar cu OpenFile la Microsoft Word) care permite selecia i
deschiderea unui benchmark. Limitarea duratei simulrii sau a numrului de
instruciuni care s fie executate se poate face prin introducerea unui numr
maxim de instruciuni. n cazul n care aceast limitare nu este fcut,
simularea poate dura mai multe ore, sau chiar zile, n funcie de configuraia
calculatorului pe care se lucreaz, pn la execuia tuturor instruciunilor din
benchmark-ul selectat. Utilizatorul poate s aleag tipul de simulare
(determinarea localitii valorilor sau predicia valorilor), adresa care s fie

290 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
utilizat (adresa instruciunii sau adresa datei), adncimea istoriei, tipul
tabelei de predicie (mapat direct sau asociativ) i dimensiunea acesteia.
n cazul n care se face predicie fr istorie, predictorul simulat este de tip
last value. Dac predicia se face cu istoria valorilor utilizatorul trebuie s
aleag tipul predictorului care poate fi incremental, contextual sau hibrid. n
cazul unei predicii contextuale sau hibride, trebuie aleas dimensiunea
pattern-ului de cutare. Trebuie precizat c predictorul incremental
implementat este de tip 2-delta, iar cel contextual este de tip PPM complet
(Prediction by Partial Matching).
Bazat pe simulri laborioase se poate observa c, rezultatele obinute
prin predicie sunt mai slabe dect cele generate prin localitate i datorit
faptului c tabelele de predicie sunt limitate dar i datorit modului de
implementare al arhitecturilor de predicie (mapate direct, asociative).
6.1.2. IMPLEMENTAREA TIMING-ULUI N CADRUL
SIMULATORULUI.
n acest subcapitol se propune dezvoltarea unui model teoretic i
practic de evaluare a performanei arhitecturilor pipeline cu execuii
multiple, bazat pe implementarea schemelor de predicia valorilor. Practic se
urmrete determinarea ctigului de performan obinut (speed-up) de
ctre o microarhitectur speculativ care nglobeaz tehnica de predicie a
valorilor instruciunilor de tip Load. S-a ales acest tip de instruciune
datorit latenei sale ridicate de execuie n condiiile accesului la memoria
principal. Pentru obinerea speed-up-ului sunt parcurse urmtoarele etape:
Este simulat execuia unui numr N (foarte mare) de instruciuni (poate
fi chiar numrul total de instruciuni de pe un anumit benchmark), pe o
arhitectur standard (generic) i se determin numrul total de cicli de
execuie fie acesta T
1
. Rata de procesare (performana global a
arhitecturii) este dat de ecuaia:
1
1
T
N
IR = .
Este simulat execuia aceluiai numr de instruciuni (N), pe acelai
benchmark, ns pe o microarhitectur speculativ care implementeaz
predicia valorilor aferent instruciunilor Load. Evident c prin predicia
cu acuratee a unui procentaj din instruciunile Load (n funcie de tipul
de predictor folosit acesta este mai mult sau mai puin semnificativ)
timpul total de execuie al instruciunilor, de aceast dat T
2
, este cu
siguran mai mic dect T
1
. Rezult c rata de procesare devine

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 291
1 2
2
T
N
T
N
IR > = i deci o mbuntire a performanei globale de
procesare.
Speed-up-ul obinut este: [%] 100 [%] 100
2
2 1
1
1 2

=
T
T T
IR
IR IR
S
Tipurile de predictoare de valori folosite (Last Value, Incremental 2-
delta, PPM complet i hibrid) au fost cele prezentate n subcapitolul 2.2.2 i
implementate n modulul Value Predictor descris n subcapitolul anterior
(6.1.1). Unul din obiectivele cercetrii l-a constituit determinarea corelaiei
existente ntre acurateea de predicie a valorilor i speed-up prin
implementarea predictoarelor mai sus menionate, i de asemenea, stabilirea
tipului de predictor (configuraie optim) pentru care se obine cel mai mare
ctig de performan.
Din punct de vedere al parametrilor din linia de comand, fa de cei
prezentai n subcapitolul 6.1.1 se mai introduce o singur opiune de
simulare (-speedup), care indic dac este 0 o arhitectur standard iar
dac este 1 o arhitectur care nglobeaz predicia valorilor.
Principalele modificri n implementare fa de modulul Value
Predictor s-au realizat la sfritul modulului sim-main.c n momentul n care
simularea s-a ncheiat i devin cunoscute numrul total de instruciuni Load,
proporia de Load-uri corect i respectiv greit predicionate. Sunt introdui
civa parametrii care reflect realismul implementrii. Astfel, este
binecunoscut faptul c o structur asociativ este mai complex, deci
impune un timp de cutare mai mare dect n cazul celor mapate direct. n
acest sens, s-a convenit ca timpii de cutare n orice tip de predictor
asociativ s fie dublul timpilor de cutare n predictoarele cu arhitectur
mapat direct. De asemenea, ntruct complexitatea predictorului
incremental este inferioar celui contextual, care la rndul su este
inferioar complexitii celui hibrid rezult c i timpii necesari furnizrii
prediciei de ctre fiecare structur n parte, respect aceeai relaie de
ordine. Valorile implicite pentru aceti timpi sunt 2 pentru incremental, 5
pentru contextual i 7 (2+5) pentru cel hibrid. n cazul predictorului hibrid
am ales ca implicit cazul cel mai defavorabil, ntruct n realitate predictorul
hibrid nu chiar serializeaz cei doi timpi (T
1
=2 i T
2
=5). Timpul de acces la
memoria principal, i el parametrizabil, preia ca valoare implicit 18.

Factor_Complexitate_Arhitectura { 1, 2 }
T
acces_DRAM
=18;
T
acces_incremental
= Factor_Complexitate_Arhitectura * 2;
T
acces_contextual
= Factor_Complexitate_Arhitectura * 5;

292 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
T
acces_hibrid
= Factor_Complexitate_Arhitectura * 7;
T
acces_predictor
{ T
acces_incremental
, T
acces_contextual
, T
acces_hibrid
}

/*s-a simulat execuia n ntregime a benchmark-ului s-au a cel puin a
max_inst instruciuni*/
if (max_insts && sim_num_insn >= max_insts)
{
if(isAssoc) /********** Structur asociativ de predicie *************/
Factor_Complexitate_Arhitectura = 2;
else /******** Structur de predicie mapat direct ************/
Factor_Complexitate_Arhitectura = 1;
/* Indiferent dac este vorba despre simularea microarhitecturii standard fr
predicia valorilor sau despre microarhitectura speculativ care nglobeaz
modulul de predicie trebuie calculat timpul de referin T1 */
npenload=sim_num_loads* T
acces_DRAM
; /* execuia instruciunilor Load presupune
acces la memoria principal, celelalte instruciuni
fiind executate ntr-un timp unitar */
T1=(sim_num_insn - sim_num_loads) * 1 + npenload;

if(vspeedup) /* simularea microarhitecturii speculative predicia valorilor
instruciunilor de tip Load */
{
/* Determinarea timpului de acces per instruciune n funcie de tipul
arhitecturii mapat direct sau asociativ i respectiv n funcie de
tipul de predictor selectat */
if(contextual==0)
T
acces_predictor
=T
acces_incremental
=Factor_Complexitate_Arhitectura*2;
else
if(contextual==1)
T
acces_predictor
=T
acces_contextual
=Factor_Complexitate_Arhitectura*5;
else
T
acces_predictor
= T
acces_hibrid
= Factor_Complexitate_Arhitectura * 7;
npenload=0;
if (notfoundA!=0) /* numrul instruciunilor Load care au accesat cu miss
tabela de predicie */
npenload=npenload+notfoundA* T
acces_DRAM
;
if(foundA!=0) /* numrul instruciunilor Load gsite n tabel i
predicionate corect */
npenload=npenload+foundA * T
acces_predictor
;
if(foundA_miss!=0) /* numrul instruciunilor Load gsite n tabel i
greit predicionate */
npenload=npenload+foundA_miss * T
acces_DRAM
;
T2=(sim_num_insn-sim_num_loads)*1+ npenload;
S=(T1-T2)/T2*100;
}
}


Cercetri cu privire la predicia dinamic a valorilor instruciunilor 293
Algoritmul descris anterior face posibil calcularea latenelor de
execuie T1 i T2 eseniale n determinarea speed-up-ului S i implicit
generarea concluziilor privitor la fiecare tip de predictor, arhitectur.
Se poate afirma c, cercetarea efectuat reprezint mai mult dect o
estimare teoretic ntruct se bazeaz att pe calcul analitic ct i pe
simulare, ns metodologia este doar n parte realist. Practic, timpul total de
execuie se bazeaz pe simularea unei microarhitecturi speculative, care
nglobeaz un predictor de valori, i determinarea acurateii de predicie, a
numrului de accese cu miss la tabela VHT (vezi figurile 2.14, 2.17, 2.18), a
numrului de Load-uri care acceseaz cu hit tabela dar sunt greit
predicionate. Fiecruia dintre aceti parametri li se asigneaz cte un timp
estimativ de execuie (n caz de hit sau recovery) conform tipului de
predictor (contextual / incremental / hibrid) i modelului arhitectural (mapat
direct / asociativ) implementat cu care contribuie la timpul total de execuie.
Evident c astfel, predictorul cel mai performant din punct de vedere al
acurateii prediciei se va dovedi optim i din punct de vedere al ratei
globale de procesare. Rezultatele simulrilor (dup cum se va putea vedea n
capitolul 7.2) indic, indiferent de tipul arhitecturii, superioritatea
predictorului hibrid i din punct de vedere al ctigului de performan
obinut (pn la 20% speed-up).
n finalul acestei modeste cercetri referitoare la introducerea timing-
ului la nivelul simulatorului Value Predictor trebuie ca, toate concluziile
teoretice s fie comparate cu cele obinute pe baz de simulare complex
(prin folosirea ca baz de cercetare a simulatorului superspeculativ i cu
execuie aut-of-order i nu a unuia funcional sim-bpred, cum a fost cazul de
fa vezi justificarea n capitolul 3). Astfel, se va avea un control asupra
acestor metode teoretice dar se va putea stabili i pn la ce punct rmn ele
realiste.
6.2. VECINTATEA I PREDICIA VALORILOR
CENTRAT PE CONTEXTUL CPU.
O evaluare original, prezentat iniial n [Flo02] pune n eviden
conceptul de vecintate a valorilor asociate regitrilor generali afereni
procesorului MIPS. Rezultate statistice bazate pe simulare au artat c
programele de uz general sunt caracterizate de repetiia valorilor [Lip96,
Sod00]. Principalele cauze ale acestui fenomen le constituie: redundana

294 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
datelor i codului, constantele din program, subrutinele compilatorului
destinate rezolvrii apelurilor virtuale de funcii, alias-urilor de memorie.
Localitatea valorilor regitrilor este frecvent ntlnit n programe i
exprim raportul dintre numrul situaiilor n care un registru este scris cu o
valoare care a fost stocat anterior (ntr-o istorie dat) n acelai registru i
numrul total de instruciuni care au acest registru ca destinaie. Ecuaia
urmtoare (6.1) descrie metrica VL (localitatea valorii) utilizat n
simulrile efectuate:

=
=
=
n
1 i
k
n
1 i
k
j
k j
) i ( f Re V
) i ( VL
) R ( VL (6.1)

n = numrul de benchmark-uri utilizate n simulare (8 for SPEC95
respectiv 7 for SPEC2000)
j = lungimea istoriei (4, 8, 16 respectiv 32)
k = numrul registrului
) i ( VL
k
j
=Numrul situaiilor n care registrul R
k
este scris cu o valoare care a
fost anterior nregistrat (egal cu una din ultimele j valori) n
respectivul registru (pe benchmark-ul i).
) i ( f Re V
k
=Numrul total de instruciuni dinamice care au registrul R
k
ca i
cmp destinaie pe benchmark-ul i.

n [Vin05] autorii extind conceptul de predicie dinamic a valorilor,
pn atunci centrat pe instruciuni sau memorie, introducnd conceptul de
predicie a valorilor focalizat pe regitrii procesorului. Localitatea
valorii pe anumii regitri speciali ai arhitecturii MIPS este remarcabil (cca.
90%), conducnd n mod evident la ideea prediciei valorilor cel puin
pentru aceti regitrii. La baza acestor afirmaii stau caracteristicile setului
de regitri generali ai procesorului MIPS [Flo02].
Arhitectura SimpleScalar este derivat din MIPS-IV ISA. Unitatea
central de procesare a MIPS conine 32 de regitri de uz general numerotai
de la 0 la 31. Registrul n este desemnat ca $n.
Registrul $0 este ntotdeauna cablat la valoarea 0.
Registrul $at (1) este rezervat asamblorului n timp ce $k0 (26) i $k1
(27) sunt dedicai sistemului de operare, neputnd fi folosii n programe
utilizator. Registrul $at este des folosit n calcularea adresei de memorie
pentru diverse structuri de date (instruciunea lui (load upper
immediately)- ncarc doar partea semnificativ a unui cuvnt de 4 octei

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 295
dintr-un registru surs n $at) i genereaz rar mai mult de o valoare
unic (a se vedea harta de memorie a procesorului MIPS din subcapitolul
3.4).
Regitrii $a0-$a3 (4-7) sunt folosii pentru a transmite primele patru
argumente rutinelor apelate (argumentele rmase fiind transmise stivei).
Regitri $v0 i $v1 (2, 3) pstreaz rezultatele returnate de funcii. MIPS
asigur un set redus de servicii ale sistemului de operare prin instruciuni.
Pentru a apela un serviciu, programul ncarc codul apelului n registrul
$v0 i argumentele n registrele $a0-$a1.
Registrul $gp (28) este un pointer global care indic spre mijlocul
blocului de 64k de memorie n segmentul de date statice.
Registrul $sp (29) este pointerul de stiv, care indic spre prima locaie
liber din stiv - variaz ntr-un domeniu redus de valori. Registrul $fp
(30) este "pointer de cadru". Un cadru const n memoria dintre
indicatorul de cadru ($fp), care pointeaz la cuvntul imediat urmtor
ultimului argument transmis pe stiv, i indicatorul de stiv ($sp), care
pointeaz la primul cuvnt liber pe stiv. Tipic pentru sistemele UNIX,
stiva crete n jos de la adrese de memorie mai mari, astfel nct
indicatorul de cadru este deasupra indicatorului de stiv. Instruciunea jal
(jump and link) seteaz registrul $ra (31) cu adresa de revenire dintr-un
apel de procedur fiind predictibil dac apelul din acelai punct se
repet cel puin o dat. Gradul de localitate ridicat al ultimului registru se
datoreaz numrului redus de apeluri de subrutine existent n programele
procedurale de calcul (benchmark-uri) [Flor04] vezi i figurile din
sucapitolul 7.3.1.
Convenia de utilizare a regitrilor MIPS furnizeaz regitri "de
salvare" callee- (apelai) i caller- (apelani), avantajoi n circumstane
diferite.
Regitrii de salvare (callee) $s0-$s7 (16-23) sunt utilizai cu precdere
pentru a reine valori de lung durat care trebuie pstrate de-a lungul
apelului, ca de exemplu variabile globale dintr-un program utilizator.
Aceti regitri sunt salvai n timpul unui apel de procedur doar dac
procedura apelat dorete s utilizeze valorile reinute de acetia.
Pe de alt parte, regitri de salvare (caller) $t0-$t9 (8-15, 24, 25) sunt
utilizai n special pentru a reine valori temporare care trebuie pstrate n
timpul unui apel, ca de exemplu valori imediate n calculul unei adrese,
parametrii efectivi de apel. n timpul unui apel, procedura apelant poate
folosi aceti regitri pentru stocarea valorilor temporare de scurt durat.
Ideea asocierii cte unui predictor de valori pentru anumii regitri
deci predictoare centrate pe regitri i nu pe instruciuni original dup
tiina autorului, ar putea implica tehnici arhitecturale novatoare structuri

296 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
de predicie mult mai simple (32-128 de locaii), i, n consecin,
performane mbuntite i costuri mai reduse ale microarhitecturilor
speculative. Pn acum, prediciile se fceau centrat pe adresa instruciunii
sau adresa datei n cazul instruciunilor de tip Load, cu implicaii
defavorabile asupra costurilor i complexitii. Tehnica de predicie a valorii
regitrilor const n predicia urmtoarei valori a unui registru destinaie, n
timpul celei de a doua jumti a fazei de decodificare, bazat pe valorile sale
anterioare (cele mai recente ntr-o istorie dat). Instruciunile dependente
succesoare folosesc valoarea prezis iar execuia speculativ este validat
cnd valoarea corect (real) a registrului devine cunoscut, dup faza de
execuie (vezi figura 6.2). Dac valoarea prezis este corect atunci calea
critic ar putea fi redus, cu implicaii benefice asupra timpului total de
execuie, respectiv a performanei globale de procesare (IPC). n caz
contrar, instruciunile executate cu intrri eronate trebuie reluate din nou
(proces de recovery).


Figura 6.2. Implementarea mecanismului de predicie a valorilor regitrilor n
structura pipeline aferent unei microarhitecturi generice
n [Vin05] au fost examinate submulimi a regitrilor favorabili
folosindu-se diferite structuri de predicie a valorilor pentru a exploata n
mod optim caracteristicile de predictibilitate a valorilor din benchmark-urile
SPEC (95 i 2000) vezi subcapitolul 6.2.1. Rezultatele obinute
demonstreaz existena unei corelaii dinamice ntre numele regitrilor
folosii ca destinaie i valorile nmagazinate n aceti regitri. Exist ns i
unele dezavantaje: adresarea tabelei de predicie cu numele registrului
destinaie (n timpul fazei de decodificare) n locul adresei instruciunii (PC)
va determina o serie de interferene.




Cercetri cu privire la predicia dinamic a valorilor instruciunilor 297
6.2.1. PREDICTOARE CLASICE (LASTVALUE,
INCREMENTAL, CONTEXTUAL, HIBRID)
Pe parcursul acestui subcapitol vor fi prezentate structurile de
predicie dezvoltate pentru exploatarea conceptului nou introdus. n realitate
respectivele scheme sunt cele utilizate n predicia valorilor centrat pe
instruciuni i prezentate n subcapitolul 2.2.2, fiind doar adaptate la
predicia valorilor regitrilor. Principala deosebire ntre cele dou tipuri de
structuri se refer la capacitatea de memorare a acestora. De asemenea, n
timp ce schemele de predicie a valorii instruciunilor sunt adresate n timpul
fazei de aducere a instruciunilor prin intermediul PC-ului acestora,
schemele de predicie a valorii regitrilor, sunt indexate n cea de-a doua
jumtate a fazei de decodificare, dup cunoaterea numelor regitrilor
destinaie.
Valoarea prezis de o structur de tip Last Value (figura 6.3) pentru un
registru este identic cu ultima valoare stocat n respectivul registru.
Fiecare intrare n tabela de predicie VHT (figura 6.3) deine propriul
automat, care este incrementat cu fiecare predicie corect i decrementat n
caz contrar (istorie local a comportamentului fiecrui registru). Utilitatea
tehnicii de predicie a valorilor este evident doar n cazul unei predicii
corecte, altfel putnd cauza hazarduri structurale cu repercusiuni negative
asupra timpului total de execuie al instruciunilor. Bazat pe
comportamentul dinamic al coninutului regitrilor a fost dezvoltat un
mecanism de clasificare (implementat prin automatul mai sus amintit) a
strii regitrilor: predictibili i nepredictibili. Prin tratarea separat a fiecrui
grup de regitri poate fi evitat costul unor predicii greite. Tranziiile
automatului vor fi realizate n concordan cu rezultatul comparaiei dintre
valoarea prezis de tabela VHT i valoarea real rezultat n urma execuiei.
Dimensiunea tabelei de predicie este egal cu numrul regitrilor logici ai
procesorului.


298 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
State Val
Predicted value
Value History
Table
(VHT)
index
R
dest

Figura 6.3. Predictor de tip Last Value
n cazul predictorului incremental, considernd c v
n-1
i v
n-2
sunt cele
mai recente valori produse, noua valoare v
n
va fi calculat dup formula de
recuren: v
n
= v
n-1
+ (v
n-1
- v
n-2
), unde (v
n-1
- v
n-2
) este pasul secvenei.
Predictorul implementat i prezentat n figura 6.4 este incremental de tip 2
delta (strategia de actualizare a pasului fiind bazat pe histerezis). n
cazul acesteia sunt memorai doi pai (str
1
i str
2
), str
1
= v
n
v
n-1
. Numai
atunci cnd aceiai valoare str
1
a aprut de dou ori consecutiv, se face
transferul str
2
str
1
. Astfel, numrul prediciilor eronate este redus de la
dou, la doar una, n cazul secvenelor incrementale repetitive.

State Val Str1 Str2
+
Predicted
value
Value History
Table
(VHT)
index
R
dest

Figura 6.4. Structur de predicie incremental 2-delta

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 299
Cnd un registru este folosit pentru prima dat ca i destinaie a unei
instruciuni va rezulta un miss n tabela de predicie VHT, i nu se va face
nici o predicie. Valoarea registrului rezultat va fi stocat n cmpul Val al
tabelei iar automatul trece n starea iniial nepredictibil. Automatul de
stare folosit (cmpul State din figura 6.4) este cel descris n cadrul
capitolului referitor la predicia valorilor instruciunilor (vezi figura 2.16).
Dac respectivul registru este folosit din nou ca destinaie nu se face nici o
predicie dar se calculeaz pasul S
1
=V
1
-Val, i se introduc V
1
i S
1
n
cmpurile Val i Str
1
. Dac pasul S
1
este diferit de 0 atunci automatul trece
ntr-o stare tranzitorie, altfel rmne n aceeai stare iniial. Dac acelai
registru este rescris din nou nu se face nici o predicie, dar se calculeaz
pasul S
2
=V
2
-Val. Valoarea din cmpul Str
1
este introdus n cmpul
Str
2
iar V
2
i S
2
n cmpurile Val i Str
1
. Dac pasul nou calculat (S
2
)
coincide cu cel anterior S
1
atunci automatul va trece ntr-o stare de
stabilitate (predictibil), altfel va rmne n starea tranzitorie dar tot
(nepredictibil). Din acest moment, la o nou refolosire a respectivului
registru cu rol de destinaie, dac Str
1
= Str
2
se face predicie, valoarea
prezis fiind calculat ca sum dintre ultimul pas memorat Str
2
i valoarea
din cmpul Val. Automatul rmne n starea de stabilitate atta timp ct
pasul este constant, altfel trecnd n starea de tranziie.
Predictoarele bazate pe context (contextuale) predicioneaz valoarea
care va fi stocat ntr-un registru n funcie de ultimele valori reinute de
ctre respectivul registru. Contextul este reprezentat de o secven finit de
valori cu apariie repetat asemenea unui lan Markov. Predictoarele care
implementeaz algoritmul de predicie prin potrivire parial PPM complet
constituie o important clas de predictoare contextuale. Blocul PPM din
figura 6.5 este identic cu cel descris n figura 5.26 i a fost utilizat cu succes
i n cazul prediciei target-urilor salturilor indirecte (vezi subcapitolele
5.25.3). Predictorul PPM complet cuprinde N+1 predictoare Markov
(contextuale) de la ordinul 0 la ordinul N. Dac predictorul Markov de
ordinul N produce un rezultat valid atunci procesul se termin dac nu se
activeaz predictorul de ordin imediat inferior.
Valoarea prezis reprezint valoarea care urmeaz contextului cu cea
mai mare frecven de apariie. Din acest considerent se poate concluziona
c valoarea prezis depinde de context. Cu ct acesta este mai bogat
(lung) cu att mai mult sunt anse de a obine o acuratee de predicie mai
ridicat. Exist cazuri ns cnd, un context exagerat de mare poate
conduce la diminuarea acurateii de predicie, comportndu-se practic ca
zgomot.
n figura 6.5 este prezentat structura predictorului implementat bazat
pe context. Fiecare intrare din tabela VHT are asignat un automat de

300 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
clasificare, incrementat n cazul unei predicii corecte i decrementat n
cazul unei predicii greite. Cmpurile V
1
, V
2
, , V
4
rein ultimele patru
valori (contextul), asociate registrului cu care se indexeaz structura la un
moment dat. Dac automatul similar cu cel prezentat n figura 5.28 se
afl ntr-una din cele dou stri predictibile, atunci structura va prediciona
valoarea care urmeaz cu cea mai mare frecven contextului.

State V1 V2
Predicted
value
Value History
Table
(VHT)
index
R
dest
V4 V3
PPM

Figura 6.5. Predictor contextual de tip PPM complet de ordin 4

State Str1 LRU V3
Predicted
value
Value History
Table
(VHT)
index
R
dest
V2 V1 V4
PPM
MUX 4:1
+
MUX
2:1
Str2

Figura 6.6. Predictor hibrid (contextual & incremental)

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 301
Studiile cercettorilor din domeniul prediciei valorilor [Wang97], dar
i implementrile comerciale existente la nivelul prediciei salturilor
condiionate [Sez02, Kes99] arat n mod clar c un singur tip de predictor
nu d n general rezultatele cele mai bune. Acest lucru se datoreaz n
primul rnd faptului c anumite tipuri de secvene de valori generate prin
program sunt prezise mai bine de un anumit predictor, iar altele, de ctre un
alt tip de predictor particular [Saz99]. Din acest motiv a aprut ca natural
ideea prediciei hibride, adic dou sau mai multe predictoare de valori s
conlucreze n mod dinamic n procesul de predicie. n figura 6.6 este
prezentat structura unui predictor hibrid compus dintr-un predictor bazat pe
context i unul incremental. Predictorul contextual are ntotdeauna
prioritate, astfel nct predictorul incremental va putea genera o predicie
doar dac cel bazat pe context nu poate realiza acest lucru. Cu toate c,
acurateea prediciei valorilor regitrilor procesorului generat de predictorul
hibrid implementat este superioar celor obinute cu celelalte structuri de
predicie descrise anterior pe parcursul acestui subcapitol, aceast
prioritizare static, neadaptiv, n alegerea tipului de predictor ce urmeaz a
fi folosit, pare a fi neoptimal. O soluie pentru rezolvarea acestei probleme
ar putea consta n implementarea unor metapredictoare (vezi subcapitolul
urmtor 6.2.2), care selecteaz dinamic, bazat pe diverse grade de
ncredere, structura care s fie utilizat la un moment dat pentru predicie.
O exemplificare convingtoare pe o secven de program MIPS,
nsoit de un predictor de tip "LastValue" modificat astfel nct s
memoreze ultimele (2 sau 4) valori ale fiecrui registru este realizat n
Anexa 2.
Ecuaia urmtoare (6.2) descrie metrica VP (acurateea de predicie a
valorii) utilizat n simulrile efectuate:

=
=
=
n
1 i
k
n
1 i
k
k
) i ( f Re V
) i ( CPV
) R ( PA (6.2)

n = numrul de benchmark-uri utilizate n simulare (8 for SPEC95
respectiv 7 for SPEC2000)
k = numrul registrului
) i ( CPV
k
= Numrul valorilor corect predicionate ale registrului R
k
(pe
benchmark-ul i).
) i ( f Re V
k
= Numrul total de instruciuni dinamice care au registrul R
k
ca
i cmp destinaie pe benchmark-ul i.

302 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Utilizndu-se predictorul cel mai performant dintre toate cele descrise
n cadrul acestui subcapitol, i anume, cel hibrid, s-a realizat o selecie a
regitrilor procesorului n funcie de un anumit prag de acuratee (60%
respectiv 80%). Prin acest mecanism s-a ncercat o reducere a numrului de
regitri asupra crora poate fi aplicat conceptul de predicie dinamic a
valorilor. Acest lucru este justificat n principal de posibile i probabile
interferene ale mai multor instruciuni la un anumit registru ceea ce
determin o vecintate sczut a valorilor asociate acestuia i, n consecin,
o predictibilitate de asemenea redus.
Bazat pe simulri laborioase, s-a artat c, beneficiind de o istorie
suficient de bogat (ultimele 256 de valori), un predictor hibrid elimin
problema interferenelor i poate atinge acuratei de predicie de 85.44%
(medie aritmetic realizat pe 8 regitrii MIPS folosind pentru test
benchmark-urile SPEC95), existnd i cazuri particulare n care acurateea
ajunge la 96%, i respectiv 73.52% (medie aritmetic obinut pe 16 regitri
MIPS folosind benchmark-urile SPEC 2000). n ciuda rezultatelor relativ
modeste privind acurateea, principalul avantaj al tehnicii de predicie a
valorii centrat pe regitrii procesorului l reprezint deblocarea
instruciunilor dependente de date aflate n coad de ateptare.
6.2.2. PREDICTOR HIBRID CU SELECIE BAZAT PE
METAPREDICTOARE. DESCRIERE SIMULATOR.
Predictoarele hibride implementate pn n prezent (vezi 6.2.1)
acordau ntotdeauna prioritate predictorului contextual, cel incremental fiind
folosit doar atunci cnd acesta nu putea genera predicie, iar cel de tip Last
Value fiind utilizat doar ca ultim soluie. Se poate afirma c funcionarea
acestor tipuri de predictoare se bazeaz pe o prioritizare static, neoptimal,
n alegerea tipului de predictor ce urmeaz a fi folosit n procesul de
predicie. O soluie pentru rezolvarea acestei probleme ar fi implementarea
diferitor metapredictoare (figura 6.7), care selecteaz dinamic, bazat pe
diverse grade de ncredere, structura care s fie utilizat la un moment dat
pentru predicie. Va avea prioritate predictorul care va fi declarat nvingtor
de ctre metapredictor.

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 303
Last Value
Predictor
Stride
Predictor
Contextual
Predictor
Val1 Val2 ...... Valk
METAPREDICTION
U neural
U

with automata
U heuristic
Predicted Value
(winner)
MUX
PREDICTED VALUES
Confidence
Confidence
Confidence
Predictor Selection
Last k values of R
dest
Rule:
Use the predictor with
highest confidence value

Figura 6.7. Arhitectura folosit pentru metapredicie
Astfel, metapredictoarele reprezint un nivel suplimentar n procesul
de predicie, responsabil n alegerea tipului de predictor folosit la un
moment dat n procesul de predicie. Urmtorul paragraf ncearc s explice
noiunea de metapredicie.
Un predictor hibrid de valori centrat pe instruciune combin dou sau
mai multe predictoare componente, care predicioneaz fiecare la rndul su
rezultatul instruciunii curente. Structura hibrid necesit un mecanism de
selecie pentru a alege (prediciona ntruct nu tie n acel moment dac a
fcut alegerea corect) dintre predictoarele componente pe cel mai potrivit
pentru generarea rezultatului instruciunii n fiecare ciclu de aducere a
acesteia. Aceast predicie (selecie / influen asupra) a acurateii de
predicie este denumit n literatur metapredicie.
n acest subcapitol au fost propuse dou tipuri de metapredictoare: ne-
adaptive (statice), prin ataarea unui automat de confiden fiecrui
predictor, i respectiv unul adaptiv (dinamic), care utilizeaz o reea neural
de tip feedforward. Cele trei predictoare de valori componente, fiecare
centrate pe regitrii procesorului sunt: un predictor last value, unul
incremental i unul bazat pe context. Fiecare predictor component genereaz
dou informaii la ieire: valoarea prezis (rezultatul instruciunii care se
nscrie n registrul supus prediciei) i confidena acestuia. Mecanismul de
confiden introdus impune o ignorare selectiv a efecturii unor
predicii de ctre anumite predictoare componente (cele cu confidena mai
mic dect un prag apriori stabilit) i efectuarea prediciei de ctre cel mai
potrivit la momentul respectiv, cu scopul de a mbunti acurateea global

304 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
de predicie. O confiden ridicat semnific ncredere n predicie (anse
mari ca predicia s fie corect ntruct i n precedentele iteraii predictorul
component a prezis corect chiar dac valoarea nu a fost neaprat naintat
instruciunilor dependente favoriznd execuia speculativ). Metapredictorul
reprezint un al doilea nivel n procesul de predicie, responsabil n alegerea
tipului de predictor folosit la un moment dat, bazat pe comportamentul
anterior al fiecruia, ilustrat prin confiden.
Rezultatele experimentale bazate pe simulri laborioase (vezi capitolul
7.3.2) arat c printr-o astfel de structur de metapredicie, aplicat la patru
din cei mai favorabili regitri ai procesorului, se obine o cretere a
acurateii prediciei de 2.27%. Acurateea maxim de predicie obinut pe
regitrii MIPS a fost 95.64% pentru registrul care pstreaz adresa de
revenire din proceduri i funcii ($ra).

Metapredictor empiric neadaptiv
Primul metapredictor neadaptiv care se prezint, numit de autor
empiric, selecteaz unul din predictoarele componente bazat pe
comportamentul fiecruia din ultimele k predicii (corecte respectiv
eronate). Istoria comportrii fiecrui tip de predictor poate fi privit sub
forma unui vector ale crui elemente pot lua valori logice de 0 sau 1
(registru binar de deplasare). Un element de 0 indic faptul c predictorul
care are asociat acest vector a prezis greit, iar un element de 1 arat c
predictorul asociat a prezis corect. Dimensiunea acestui vector reprezint ct
de mult istorie va fi analizat n procesul de predicie.


Figura 6.8. Istoria ultimelor k comportri asociat unui predictor component
Pentru a selecta predictorul component care va face predicia, sunt
comparai dup un anumit criteriu, trei astfel de vectori, cte unul pentru
fiecare tip de predictor: last value, incremental i contextual. Criteriul folosit
n acest caz l constituie numrul maxim de elemente de 1 din cadrul
vectorului de istorie, adic maximul de predicii corecte efectuate. Ctig
astfel predictorul al crui vector asociat conine mai muli de 1. Dup
identificarea vectorului cu numr maxim de 1, predicia propriu-zis se
realizeaz doar dac numrul de 1 este mai mare dect un anumit prag
impus prin program, prag care constituie nivelul de ncredere.


Cercetri cu privire la predicia dinamic a valorilor instruciunilor 305
Metapredictor neadaptiv empiric cu automat pe nivelul doi de
ncredere
Acest tip de metapredictor folosete dou nivele de ncredere. Primul
este identic cu cel prezentat anterior, selectndu-se astfel predictorul care
are vectorul de istorie cu cei mai muli de 1. n acest moment se verific cel
de-al doilea nivel de ncredere pentru predictorul care a fost declarat
nvingtor la pasul precedent. Nivelul al doilea de ncredere l reprezint
automatul de stare asociat fiecrui predictor component selectat, structura
automatului fiind identic cu cea prezentat n figura 5.28. Predictorului ales
anterior i se va verifica starea automatului, urmnd s se efectueze predicie
doar dac aceast stare este mai mare sau egal cu un threshold impus prin
program, cu alte cuvinte dac automatul este ntr-o stare predictibil. Practic
cel de-al doilea nivel de confiden este global, per predictor i nu local per
registru, de unde poate i sursa unor rezultate mai modeste. Cele dou
niveluri de ncredere par s aib rezultatele favorabile n acelai timp i nu
prin completare. Cnd istoria comportamentului unui predictor conine
puini bii de 1 este clar c i starea automatului va fi una nepredictibil, iar
cnd predictorul conine muli de 1 este destul de probabil ca acetia s se
afle pe poziii succesive i atunci i starea automatului s fie una
predictibil. Intuiia autorului este c, un al doilea nivel de ncredere local
(automat per registru) ar mbunti acurateea global de predicie. Exist
situaii cnd un tip de predictor s prezic bine doar anumii regitri i n
rest s prezic eronat. n acest caz numrul de bii de 1 al vectorului asociat
respectivului predictor va fi redus dar starea automatului de predicie asociat
registrelor n cauz s fie predictibil.

Metapredictor neadaptiv cu automat de stare
n cadrul acestui tip de metapredictor fiecare predictor component
(last value, incremental, contextual) are asociat un automat de stare pe 2 bii
(structur identic cu cea descris n figura 5.28). Automatul va avea patru
stri i se va afla iniial n starea 0, fiind incrementat la fiecare predicie
corect a predictorului asociat, respectiv decrementat la fiecare predicie
incorect a acestuia. Pentru nceput se verific starea fiecrui automat i se
alege pentru predicie predictorul care are aceast stare a automatului
maxim. Efectuarea prediciei se va realiza doar dac starea automatului
asociat este mai mare sau egal cu un anumit threshold impus prin program.

Metapredictor adaptiv neuronal
n continuare este prezentat o idee nou, un metapredictor adaptiv,
implementat printr-o reea neural nerecurent (feedforward) care va avea
rolul de a selecta dinamic tipul de predictor care va realiza predicia (last

306 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
value, incremental i contextual). Avantajul major al reelelor neurale const
n capacitatea acestora de a nva din exemple (nvare supervizat). Prin
capacitatea lor de sintez, reelele neurale reuesc ca pe baza exemplelor
anterior nvate s dezvolte i s rezolve un model de problem.
S-a ales tipul de reea Perceptron multistrat (MLP) cu un strat ascuns
i algoritm de nvare back-propagation doar pentru a determina potenialul
de performan al ideii de metapredictor neuronal. Stratul de ieire al reelei
va conine astfel trei neuroni (P = 3) cte unul corespunztor fiecrui tip de
predictor. Valorile de ieire sunt cuprinse n intervalul real [0, 1], predicia
curent realizndu-se de ctre predictorul a crui valoare a neuronului
asociat este maxim, dar doar n condiiile n care aceast valoare depete
un anumit prag apriori stabilit.
Stratul de intrare este format din N neuroni, N = 3*k, unde:
3 - numrul predictoarelor utilizate;
k istoria (ultimele k comportri) aferente predictorului
component respectiv (1 predicie corect, 0 predicie
greit);
Stratul ascuns va conine M neuroni, unde M = N+1, adic 3*K+1
neuroni. S-a ales aceast valoare ntruct n urma a laborioase simulri
efectuate, pentru M=N+1 se obin cele mai bune rezultate din punct de
vedere al acurateii de predicie. Figura 6.9 prezint structura reelei neurale
implementate.

M = N+1
neurons
P = 3
neurons
N = k*3
neurons
Hidden
layer
Output
layer
Input
layer
L1
Lk
I1
Ik
C1
Ck
L (last value predictor)
I (stride predictor)
C (context-based predictor)

Figura 6.9. Structura reelei neuronale
Modelul de nvare backpropagation este un algoritm de nvare
folosit n reelele de tip feedforward. Backpropagation definete doi pai:

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 307
primul (forward) n care informaia trece de la intrare ctre ieire i apoi un
pas de la nivelul de ieire la nivelul de intrare. Pasul de trecere nainte
propag vectorul de intrare n primul nivel al reelei, ieirile din acest nivel
produc un nou vector care vor fi intrri pentru nivelul urmtor, pn cnd se
ajunge la ultimul nivel ale crui ieiri reprezint ieirile reelei. Pasul napoi
(backward) este similar cu cel nainte, exceptnd faptul c erorile sunt
propagate napoi prin reea pentru a determina adaptarea ponderilor.
ntruct caracteristicile algoritmului de nvare backpropagation au
fost descrise n subcapitolul 5.1.2.2 n continuare vor fi prezentate doar
etapele acestuia, adaptate la problema n cauz:

1. Se creeaz o reea feedforward cu N intrri, un singur nivel intermediar
cu M = N+1 neuroni i cu P neuroni n stratul de ieire.
2. Se iniializeaz toate ponderile M j N i W
j i
, 1 ; , 1 ;
1
,
= = i
P j M i W
j i
, 1 ; , 1 ;
2
,
= = cu valori mici aleatoare situate n intervalul [0.3,
0.7]. Funcia de activare utilizat este sigmoida:
x
e
x F

+
=
1
1
) (
.
n continuare termenul t
k
reprezint valoarea dorit la ieire a neuronului
k din stratul de ieire, iar O
k
este ieirea obinut a aceluiai neuron.
3. Until ( ) ( ) : ), (
2
1 2
) (
do threshold T O t W E
P Outputs k
k k
=


3.1. Se plaseaz vectorul X la intrrile reelei i se propag nainte prin
reea, calculndu-se vectorul de ieire O dup formula de produs
matriceal.
2 1
W W X O = (6.3)
3.2. Pentru fiecare neuron din stratul de ieire k, k P , 1 se calculeaz
termenul de eroare
k
:
( )( )
k k k k k
O t O O = 1 (6.4)
3.3. Pentru fiecare nod din stratul intermediar h, h M , 1 se calculeaz
termenul de eroare
h
:
( )

=
) (
2
,
1
P Outputs k
k h k h h h
W O O (6.5)
3.4. Se ajusteaz fiecare pondere
j i
W
,
a reelei:
j i j i j i
W W W
, , ,
+ = (6.6)
j i i j i
X W
, ,
= (6.7)

308 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
unde este pasul de nvare iar reprezint nivelul de intrare
dac se dorete reglarea ponderilor dintre nivelul de intrare i cel
intermediar,
i
fiind
h
, respectiv constituie nivelul intermediar
dac se dorete actualizarea ponderilor ntre nivelul intermediar i
cel de ieire,
i
fiind
k
.
j i
X
,

Alegerea lui influeneaz n mare msur algoritmul de nvare
backpropagation bazat pe minimizarea erorii medii ptratice. Totui
alegerea lui este dependent de specificul problemei. Dei nu exist o
metod universal de alegere a lui ntr-o problem dat se recomand c
acesta s fie subunitar sau, eventual, descresctor odat cu creterea
numrului iteraiei. De regul, cea mai convenabil valoare este aleas dup
laborioase simulri.
Confidena metapredictorului adaptiv neuronal este dat de valoarea
pragului (threshold) impus prin program. Predicia propriu-zis se va
realiza doar dac valoarea maxim de pe ieirile reelei este mai mare sau
egal dect acest prag. n caz contrar se poate afirma c nu se are suficient
ncredere n acest predictor i astfel se va evita o predicie. Nivelul de
ncredere poate lua valori n intervalul real [0, 1], datorit utilizrii funciei
de activare sigmoid.

Metapredictor adaptiv neuronal cu automat pe nivelul doi de ncredere
Reeaua neuronal folosit este identic cu cea descris anterior.
Confidena acestui metapredictor este dat de o structur implementat la
nivel de registru (local per registru i nu global per predictor component).
Structura conine un automat de stare asociat fiecreia din cele 32 de intrri
aferente celor trei predictoare componente: last value, incremental,
contextual. Automatul va avea patru stri i se va afla iniial n starea 0,
fiind incrementat la fiecare predicie corect a predictorului asociat,
respectiv decrementat la fiecare predicie incorect a acestuia. Reeaua
neural indic predictorul cu probabilitatea cea mai ridicat de a prezice
corect fr a impune un anumit prag reelei. Pentru respectivul tip de
predictor se verific starea automatului (nivelul de ncredere) corespunztor
registrului pentru care se realizeaz predicia. Predicia propriu-zis se va
face doar dac starea acestui automat este mai mare sau egal dect un prag
impus prin program. n caz contrar nu se va realiza predicie.

Simulator funcional pentru predicia valorilor centrat pe regitri
S-a considerat c simulatorul sim-vpred, destinat prediciei valorilor
centrate pe instruciuni descris la 6.1.1, este cel mai potrivit pentru a fi

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 309
extins prin implementarea metapredictoarelor propuse n aceast seciune,
pentru creterea acurateii de predicie a regitrilor procesorului. Pentru
compilarea surselor s-a folosit aplicaia Cygwin (comanda make).
Structurile utilizate, precum i declaraiile funciilor se afl n fiierul
vpred.h, iar definiiile funciilor pot fi gsite n vpred.c. Motorul
simulatorului l reprezint aceeai funcie sim_main() din sim-vpred.c, aici
fiind folosite att structurile ct i funciile amintite.
Parametrii importani ai simulatorului care pot fi modificai de ctre
utilizator, sunt adncimea istoriei, dimensiunea contextului (pattern) n
cazul predictoarelor contextuale, hibride, metapredictoarelor neadaptiv cu
automat, neadaptiv cu numr de bii de 1 i adaptiv neuronal. Poate fi
stabilit de asemenea, tipul predictorului utilizat i nivelul de ncredere n
cazul metapredictoarelor (-threshold). n cazul metapredictorului neural
este permis antrenarea: -trainingType (dinamic - 0, static - 1).
Antrenarea static presupune actualizarea ponderilor pn cnd eroarea
medie ptratic scade sub pragul impus predicie n gol. Antrenarea
dinamic se bazeaz pe folosirea unor ponderi iniiale, anterior salvate n
urma execuiei altor benchmark-uri, sau efecturii prediciei asupra altor
regitri. Necesari unei simulri sunt i benchmark-ul, registrul supus
prediciei i eventual numrul de instruciuni executate dac nu se ruleaz n
ntregime programul de test. Se poate stabili ca acurateea prediciei
calculat s fie global, pentru toi regitrii favorabili (vezi subcapitolul
precedent) sau aferent doar unui singur registru.
Predictoarele last value, incremental, contextual i hibrid (descrise n
6.2.1) sunt implementate n fiierul vpred.c prin intermediul funciilor
predictLastValue, predictStride, i respectiv predictContextual, care vor
ntoarce valoarea prezis de fiecare tip de predictor. n momentul execuiei
va fi folosit predictorul corespunztor parametrilor introdui de ctre
utilizator.
ntruct structurile de date i funciile ce descriu predictoarele clasice
de valori (last value, incremental, contextual i hibrid) au mai fost
prezentate, n continuare sunt descrise cele mai importante seciuni de cod
prin care este implementat algoritmul de nvare backpropagation aplicat
problemei de fa precum i structurile de date care intervin n
implementarea perceptronului multistrat din figura 6.9. De asemenea, este
prezentat i modul n care se realizeaz procesul de predicie propriu-zis.
Informaiile care definesc perceptronul multistrat din figura 6.9 sunt:
N Numrul de noduri de pe nivelul de intrare.
M, hidd0[M] Numrul de noduri din nivelul ascuns i valorile
acestora.

310 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
P, out[P] Numrul de noduri de pe nivelul de ieire al reelei
respectiv valorile acestora.

wohi[P][M] Matricea ponderilor conexiunilor dintre nivelul de ieire
i cel ascuns.
bohi[P] Deplasrile de scal pentru neuronii din nivelul de
ieire(bias).
whin[M][N] Matricea ponderilor conexiunilor dintre nivelul ascuns
i cel de intrare.
bhin[M] Deplasrile de scal pentru neuronii din nivelul ascuns.
= Rata de nvare = 0.3; F = funcia de activare

n cadrul metapredictorului adaptiv neuronal cu automat, ntruct
confidena este la nivel de registru, pentru fiecare dintre acetia va exista un
automat (32 de automate per predictor: incremental, contextual i hibrid.
Aceste automate n cod sunt reprezentate sub forma a trei vectori de tip
ntreg: state_lv[32], state_stride[32], state_context[32].
Se consider urmtoarele valori intermediare, care reprezint, pentru
fiecare neuron suma ponderat a tuturor intrrilor sale (vor fi numite valori
net):

neto[i] = *hidd0[j] + bohi[i] i=0P-1. (6.8)

=
1
0
] ][ [
M
j
j i wohi
neth0[j] = bhin[j] j=0M-1. (6.9)

=
+
1
0
] [ * ] ][ [
N
l
l inp l j whin
out[i] = F(neto[i]) i = 0P 1 (6.10)
hidd0[j] = F(neth0[j]) j=0M-1 (6.11)

Funcia de eroare medie ptratic este:
e = = (6.12)
2
2
1
0
]) [ ] [ (

=

P
i
i out i tp
2
1
0
]) [ [ ] [ (

=

P
i
i neto F i tp

n cadrul procesului de antrenare cele mai importante funcii care
intervin sunt forward i respectiv backward. Detalii de implementare pot fi
urmrite pe CD-ul ce nsoete aceast lucrare.

Pasul forward
n acest pas se realizeaz propagarea intrrii spre ieire, nivel cu nivel.
Se aplic intrarea din perechea de antrenament la intrarea reelei. Se

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 311
calculeaz valorile neth0[j] pentru fiecare neuron din primul nivel ca i
sume ponderate ale intrrilor n neuronul respectiv. Valoarea calculat se
transform n ieire a stratului de intrare (hidd0[j]) prin aplicarea funciei de
activare (F) pentru fiecare neuron din primul nivel. n continuare, ieirile
neuronilor din primul nivel servesc ca intrri n neuronii nivelului imediat
urmtor. Procesul descris mai sus se repet nivel cu nivel pn se ajunge la
nivelul de ieire i se determin valorile ieirii reelei (fie out[i])

void forward(int in[], float out[])
{
int j,l;
/* propagarea vectorului de intrare nspre stratul ascuns. Calcularea valorilor din
nodurile stratului ascuns formulele 6.9 i 6.11. */
for(j=0; j<nHiddenLayerNeurons; j++)
{
neth[j] = bhin[j];
for(l=0; l<nInputLayerNeurons; l++)
neth[j] += whin[j][l] * in[l];
hidd[j] = F(neth[j]);
}
/* propagarea informaiei nmagazinate n stratul ascuns spre ieirea reelei.
Calcularea valorilor din nodurile stratului de ieire formulele 6.8 i 6.10. */
for(j=0; j<nOutputLayerNeurons; j++)
{
neto[j] = bohi[j];
for(l=0; l<nHiddenLayerNeurons; l++)
neto[j] += wohi[j][l] * hidd[l];
out[j] = F(neto[j]);
}
}

Pasul backward
n acest pas are loc ajustarea propriu-zis a ponderilor reelei. Se tie
c o pereche de antrenament este format dintr-un vector de intrare(fie inp)
i un vector de ieire(fie tp), care se dorete a fi rspunsul reelei cnd i se
aplic la intrare vectorul inp. Diferena dintre tp si out reprezint eroarea
ieirii reelei la momentul respectiv. Conform acestei erori, cu ajutorul unei
reguli bine stabilite, se ajusteaz ponderile reelei nivel cu nivel astfel ncat
eroarea s tind spre zero, adic la aplicarea vectorului inp din perechea de
antrenament, ieirea obinut out s fie ct mai apropiat (n cazul ideal
identic), de vectorul de ieire tp din perechea de antrenament. Aceast
ajustare a ponderilor se realizeaz printr-un proces iterativ, adic se aplic
secvenial fiecare pereche din setul de antrenament i se reactualizeaz

312 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
ponderile, aceasta de cte ori este necesar pentru ca eroarea s se situeze sub
un anumit prag minim.

void backward(int tp[], int in[], float out[])
{
double deltaout[32];
double deltain[32];
int j,k,l;
/* Actualizeaz ponderile dintre stratul de ieire i cel intermediar folosind formulele
6.4, 6.6 i 6.7 */
for(j=0; j<nOutputLayerNeurons; j++)
for(l=0; l<nHiddenLayerNeurons; l++)
{
deltaout[j] = (tp[j] - out[j]) * dF(neto[j]); echivalent 6.4
wohi[j][l] += learningRate*deltaout[j]*hidd[l]; echivalent 6.6 i 6.7
bohi[j] += learningRate*deltaout[j];
}
/* Actualizeaz ponderile dintre stratul de intermediar i cel de intrare folosind
formulele 6.5, 6.6 i 6.7 */
for(j=0; j<nHiddenLayerNeurons; j++)
for(l=0; l<nInputLayerNeurons; l++)
{
deltain[j] = 0;
for(k=0; k<nOutputLayerNeurons; k++)
deltain[j] += deltaout[k]*wohi[k][j]*dF(neth[j]);
whin[j][l] += learningRate*deltain[j]*in[l];
bhin[j] += learningRate*deltain[j];
}
}

double F(double val)
{
/* Funcia de activare (F) */
return 1/(1 + exp(-1 * val));
}

double dF(double val)
{
/* Derivata funciei de activare (dF) */
return F(val)*(1 - F(val));
}

n continuare sunt prezentate etapele procesului de predicie:
1. Iniializarea ponderilor reelei cu valori mici aleatoare.
n cazurile n care antrenarea este dinamic (nvare n timpul rulrii),
respectiv se dorete o antrenare efectiv n vederea salvrii ponderilor

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 313
rezultate n urma acesteia, se folosete urmtoarea funcie care genereaz
ponderi aleatoare n intervalul [0.3, 0.7], ponderi care vor fi i salvate
ntr-un fiier pe harddisk (RandomWeights.txt).

void generateRandomWeights()
{
int j, k;
Weights = fopen("RandomWeights.txt","w");
for(j=0; j<nHiddenLayerNeurons; j++)
{
bhin[j] = ((rand() % 4000)*1.0)/10000.0 + 0.3;
fprintf(Weights, "%f\t", bhin[j]);
for(k=0; k<nInputLayerNeurons; k++)
{
whin[j][k] = ((rand() % 4000)*1.0)/10000.0 + 0.3;
fprintf(Weights, "%f\t", whin[j][k]);
}
}
for(j=0; j<nOutputLayerNeurons; j++)
{
bohi[j] = ((rand() % 4000)*1.0)/10000.0 + 0.3;
fprintf(Weights, "%f\t", bohi[j]);
for(k=0; k<nHiddenLayerNeurons; k++)
{
wohi[j][k] = ((rand() % 4000)*1.0)/10000.0 + 0.3;
fprintf(Weights, "%f\t", wohi[j][k]);
}
}
fclose(Weights);
}
n cazul n care se dorete salvarea ponderilor rezultate n urma
antrenrii statice pentru a putea fi folosite drept ponderi iniiale n cadrul
unei antrenri dinamice ulterioare se va folosi funcia saveWeights care va
salva aceste ponderi rezultate, ntr-un fiier pe disc(Weights.txt). Pentru a se
ncrca ponderile salvate la o antrenare static anterioar, n vederea
efecturii unei antrenri dinamice se va folosi funcia loadWeights.
Ponderile vor fi ncrcate din fiierul existent pe disc cu numele de
Weights.txt. Cele dou funcii sunt exemple banale de scriere, respectiv
citire de tablouri de numere flotante n fiiere.

2. Pentru fiecare pereche de antrenament sunt executate operaiile:
2.1. Stabilirea vectorului de intrare din perechea de antrenament curent la
intrarea reelei i propagarea acestuia nivel cu nivel pn la nivelul de
ieire; Se consider vectorul in[m] ca fiind vectorul de intrare al

314 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
reelei coninnd m elemente, iar out[3] reprezint vectorul ce conine
valorile nodurilor de ieire.
forward (in, out);

2.2. Se calculeaz valoarea maxim dintre ieirile reelei, reinndu-se
totodat i indexul acesteia.
max_index = 0;
max_val = out[0];
for(t = 1; t<3; t++)
if(out[t]>max_val)
{
max_val = out[t];
max_index = t;
}

2.3. Dac valoarea maxim gasit la pasul anterior este mai mare dect o
valoare de prag impus, atunci se va face predicie, incrementndu-se
i contorul corespunztor.
if (max_val > threshold)
NeuralTotalPrediction ++;

2.4. Dac se realizeaz predicie i aceasta este corect, se va incrementa
contorul aferent prediciilor corecte:
if((max_val > threshold)&&(((max_index == 0)&&(lvalue == 1))||((max_index ==
1)&&(svalue == 1))||((max_index == 2)&&(cvalue == 1))))
neuralValuePrediction ++;

2.5. Se formeaz vectorul cu valorile dorite ale nodurilor de ieire tp[].
if(lvalue == 1) tp[0] = 1;
else tp[0] = 0;
if(svalue == 1) tp[1] = 1;
else tp[1] = 0;
if(cvalue == 1) tp[2] = 1;
else tp[2] = 0;

2.6. Este calculat erorii pe baza ieirii obinute i a celei dorite i
propagarea ei napoi nivel cu nivel pn la intrare ajustndu-se
ponderile astfel nct eroarea s scad:
backward(tp, in, out);

2.7. n cazul n care se dorete antrenare static se repet procesul de
nvare atta timp ct valoarea maxim curent de la ieirea reelei se
situeaz sub un nivel de confiden impus de utilizator. Ca o
dezvoltare ulterioar, durata procesului de nvare poate fi limitat

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 315
prin modificarea numrului de iteraii, printr-o iteraie nelegnd un
ciclu forward-backward.

if( (trainingType == 1)&&(train == 1) ) // antrenare static
{
ct_iterations = 0;
while( (max_val < threshold)&&(ct_iterations<iteratons))
{
forward(in, out);
max_val = out[0];
for(t = 1; t<3; t++)
if(out[t]>max_val)
{
max_val = out[t];
max_index = t;
}
backward(tp, in, out);
ct_iterations ++;
}
}

Rezultatele simulrii mpreun cu parametrii arhitecturali vor fi scrii
ntr-un fiier (simout.res) n directorul curent, de unde pot fi preluai pentru
eventuale prelucrri.

Prezentarea interfeei grafice i a modului de utilizare

Privind din punctul de vedere al utilizatorului s-a considerat necesar
o interfa vizual prietenoas, bazat pe meniuri, ferestre de dialog, imagini
grafice edificatoare etc. Interfaa trebuie s fie simplu de utilizat, s permit
utilizatorului manevrarea uoar a simulatorului, interpretarea i prelucrarea
eficient a rezultatelor. Implementarea simulatorului s-a fcut n limbajul
Visual C++ 6.0.
Pentru a porni simulatorul este nevoie de un sistem pe care s fie
instalat Windows 9x sau Windows 2000 i s existe benchmark-uri
(programe de test). La lansarea n execuie a aplicaiei, pe ecran apare
fereastra de configurare din figura 6.10 i se poate trece la introducerea
parametrilor simulrii.


316 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

Figura 6.10. Fereastra de configurare a simulatorului
Utilizatorul poate s aleag adncimea istoriei i dimensiunea
pattern-ului. n cazul n care se face predicie fr istorie, predictorul simulat
este de tip last value. Dac predicia se face cu istoria valorilor utilizatorul
trebuie s aleag tipul predictorului care poate fi incremental, contextual,
hibrid, metapredictor neadaptiv cu automat, neadaptiv cu numr de bii de 1
sau neuronal. n cazul unei predicii contextuale sau hibride, trebuie aleas
dimensiunea contextului (pattern). Trebuie precizat c predictorul
incremental implementat este de tip 2-delta, iar cel contextual este de tip
PPM complet.
n cazul unei metapredicii neadaptive cu automat, cu numr de bii de
1 sau adaptive neuronale trebuie ales i pragul ncepnd de la care se va
accepta predicia. n cazul unei predicii neuronale se poate alege tipul de
antrenare care poate fi static sau dinamic. Prin antrenarea dinamic se
pornete simularea cu ponderi prestabilite anterior, salvate n urma execuiei
altor benchmark-uri, sau efecturii prediciei asupra altor regitri.
Antrenarea static presupune actualizarea ponderilor pn eroarea medie
ptratic scade sub pragul impus predicie n gol. Prin modificarea

Cercetri cu privire la predicia dinamic a valorilor instruciunilor 317

threshold-ului este limitat mai mult sau mai puin timpul de nvare al
reelei.
Un parametru important care poate fi ales din interfa este registrul
pentru care se dorete a se realiza simularea. Exist posibilitatea alegerii
unui anumit registru dintre cei favorabili (cei care prezint o localitate a
valorii mai mare de 60% sau 80%) sau ca simularea s se realizeze pe toi
aceti regitri. La sfritul simulrii, n partea dreapt a ferestrei (figura
6.10) apar rezultatele: numrul de instruciuni executate, numrul de
instruciuni dinamice executate care au drept destinaie registrul supus
prediciei, numrul de predicii corecte i numrul total de predicii
efectuate, acurateea global i relativ a prediciei pentru arhitecturile
simulate.
7. REZULTATE OBINUTE PRIN SIMULARE.
INTERPRETRI.
Acest capitol prezint i analizeaz probleme legate de vecintatea
valorilor (value locality) i predicia target-urilor salturilor / apelurilor de
funcii indirecte, respectiv predicia valorilor instruciunilor i regitrilor
procesorului, cu consecina execuiei speculative a instruciunilor i
influene benefice asupra timpului de procesare. Au fost realizate
investigaii cantitative privind gradele de localitate a valorii cu ajutorul
setului standardizat de instrumente SimpleScalar 3.0b, dezvoltat la
Facultatea de Calculatoare din Wisconsin, Madison USA i unanim acceptat
de cercettorii n arhitectura calculatoarelor din ntreaga lume (spre
exemplu, n anul 2000, mai mult de o treime din lucrrile publicate n
conferinele de top dedicate arhitecturii calculatoarelor au folosit setul
SimpleScalar pentru simularea / evaluarea propriilor idei de proiectare).
Evalurile arhitecturilor propuse au fost fcute folosind o colecie de
simulatoare execution-driven (dezvoltate din setul de instrumente
SimpleScalar 3.0). S-a nceput cu arhitectura cea mai simpl, predictorul de
tip last value i s-a continuat cu predictoare de tip Target Cache,
contextuale, hibride etc, ale cror scheme hardware au fost descrise pe
parcursul subcapitolelor de contribuii proprii 5.3, respectiv 6.1 i 6.2.
Simularea a fost realizat pe cele dou versiuni ale benchmark-urilor SPEC
(95 i 2000). De asemenea, pentru generarea codului la nivel limbaj de
asamblare MIPS i a codului obiect specific arhitecturii SimpleScalar 3.0. a
fost nevoie de recompilarea instrumentelor setului (utilitarele GNU,
compilatorul Gcc). Cu ajutorul acestora au fost recompilate o parte din
propriile programe de test folosite (plus benchmark-urile Stanford) n
vederea studierii legturii calitative i cantitative existente ntre paradigmele
actuale de programare (programe procedurale vs. obiectuale) i respectiv
generarea valorilor de anumite tipuri de instruciuni (salturi indirecte, Load,
ALU, etc). Mai precis, s-a ncercat investigarea legturii existente ntre
motenire, polimorfism i alocarea dinamic a memoriei pe de o parte, i
comportamentul salturilor indirecte (JR reg) de cealalt parte, fiind
cunoscut ca o problem dificil predicia branch-urilor codificate n moduri
de adresare indirecte. Se urmrete practic transmiterea de informaii
relevante de la nivel software ctre proiectanii de arhitecturi (hardware).
Rezultate obinute prin simulare. Interpretri 319
Simulrile au fost efectuate pe procesoare Pentium III la 500 MHz
parial efectuate sub sistem de operare Microsoft Windows98, 2000, sau NT
avnd la dispoziie emulatorul Cygwin i parial sub sistemul Linux RedHat
7.3. Avnd n vedere c timpul de simulare a 5.000.000 instruciuni aferente
unui benchmark SPEC'95 variaz ntre 30 de secunde (swim) i 1h30' (cc1)
s-a optat s nu fie simulate n ntregime aceste benchmark-uri cu pn la 2
miliarde i jumtate instruciuni. Dei n cele mai multe din experimente au
fost simulate doar 5 milioane de instruciuni dinamice, pentru predicia
valorilor centrat pe regitrii procesorului unele statistici au fost realizate
pentru 500 milioane de instruciuni dinamice n timp ce pentru predicia
target-urilor salturilor indirecte au fost simulate ntre 100 milioane de
instruciuni pe SPEC95 i respectiv 500 milioane pe SPEC2000. n
reprezentrile grafice urmtoare acolo unde nu se specific se consider
execuia a 5.000.000 de instruciuni dinamice.
7.1. CERCETRI PRIVIND VECINTATEA I
PREDICIA APELURILOR INDIRECTE
n cadrul acestui subcapitol, pe baza benchmark-urilor standardizate
SPEC i a programelor de test propuse n subcapitolul 4.2, sunt determinate
gradele de localitate existente n aplicaii la nivelul salturilor indirecte (jr
altele dect return-uri) ca o limit ultimativ a acurateii de predicie. De
asemenea, s-a realizat o analiz statistic a procentajului de salturi indirecte
statice i dinamice pe benchmark-urile SPEC, urmat de determinarea unor
analogii privind rezultatele obinute din punct de vedere statistic ntre
programele procedurale i cele obiectuale.
n ce privete predicia adreselor destinaie a instruciunilor de salt
indirect, s-a nceput cu arhitectura cea mai simpl, predictorul de tip last
value i s-a continuat cu predictoare contextuale PPM complet, de tip
Target Cache, hibride etc. Cu ajutorul predictorului contextual de tip PPM
complet s-a ncercat determinarea pattern-ului optim de cutare (influenat
de history i localitatea anterior obinut), stabilirea corelaiei existente ntre
salturi n funcie de context. n vederea mbuntirii acurateii prediciei
aferente instruciunilor de salt indirect au fost aduse cteva modificri
structurii de predicie Target Cache originare propuse de [Cha97]. Mai nti
a fost studiat influena istoriei globale a salturilor condiionate asupra
prediciei, urmat de extinderea informaiei de corelaie. Un ultim
experiment privitor la aceast structur l-a constituit ncercarea de
mbuntire a acurateii de predicie printr-o ignorare selectiv a efecturii

320 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
unor predicii. n final a fost exploatat o schem de predicie hibrid
(LastValue+Contextual) cu selecie bazat pe aritate.
7.1.1. REZULTATE OBINUTE PRIN SIMULAREA
BENCHMARK-URILOR SPEC
n vederea exprimrii concluziilor pe baza simulrilor efectuate, dup
varierea diverilor parametri i execuia unui numr prestabilit de
instruciuni dinamice din fiecare benchmark, s-a folosit media aritmetic pe
toate testele avute la dispoziie sau (n anumite condiii precizate) doar pe
cele bogate n instruciuni dinamice de salt indirect, pentru care
mbuntirile arhitecturale pot determina un impact pozitiv major asupra
performanei. Cel mai indicat poate ar fi fost folosirea unei medii ponderate,
ns datorit simulrii unui numr fix de instruciuni i, ntruct consoriul
SPEC (Standard Performance and Evaluation Corporation) nu a oferit nite
criterii explicite dup care anumite benchmark-uri ar avea anumite ponderi
n exprimarea unei metrici, am propus ponderi egale pentru fiecare test
rezultnd de fapt ca metric global media aritmetic.


Instruciuni
statice de
salt indirect
Totalul de
instruciuni
statice de
salt
%
instruciuni
statice de
salt indirect
Instruciuni
dinamice de
salt indirect
Totalul de
instruciuni
dinamice de
salt
%
instruciuni
dinamice de
salt indirec
applu 30 848
3.538
986
2238776 0.044
apsi 58 3027
1.916
97142
6469134 1.502
cc1 213 25150
0.847
634418
20149893 3.148
fpppp 39 1103
3.536
34227
1521447 2.250
go 1 288
0.347
6272
22595640 0.028
hydro2d 54 1490
3.624
1176581
20880702 5.635
li 17 1408
1.207
1074663
22794725 4.715
Tabelul 7.1. Procentajul instruciunilor dinamice de salt indirect generate n urma
execuiei a 100.000.000 instruciuni din benchmark-urile SPEC95


Instruciuni
statice de
salt indirect
Totalul de
instruciuni
statice de
salt
%
instruciuni
statice de
salt indirect
Instruciuni
dinamice de
salt indirect
Totalul de
instruciuni
dinamice de salt
%
instruciuni
dinamice de
salt indirect
gcc 230 33758 0 6813 . 1863928 91457321 2. 80 03
crafty 11 1899 0 5793 . 617615 118719981 0. 02 52
gap 14 1849 0 7572 . 36137 69420381 0. 21 05

Rezultate obinute prin simulare. Interpretri 321
mcf 14 831 1.68 7 4 1239176 119256622 1.03 1 9
twolf 15 2601 0.57 7 6 197274 77237383 0.25 4 5
Tabelul 7.2. Procentajul instruciunilor dinamice de salt indirect generate n urma
execuiei a 500.000.000 instruciuni din benchmark-urile SPEC2000
Procentajul instruciunilor dinamice de salt indirect extras din
simulrile efectuate att pe benchmark-urile SPEC (95 i 2000) ct i pe
propriile aplicaii propuse (vezi tabelul 7.9) este n concordan cu rezultatul
obinut de Roth privitor la frecvena apelurilor indirecte de metode virtuale
din programele obiectuale. Astfel, o instruciune dinamic de apel
indirect apare aproximativ de la 200 pn la 1000 de instruciuni
dinamice (de 4 pn la 20 de ori mai puin dect apelurile directe i de
30 pn la 150 de ori mai puin dect salturile condiionate) [Roth99]. O
remarc extrem de interesant, de care poate programatorii din limbajele de
nivel nalt ar trebui s in cont, se refer la faptul c o singur instruciune
static de salt indirect genereaz n momentul execuiei peste 6200 de
astfel de instruciuni (vezi cazul benchmark-ului go). n ciuda procentului
sczut de instruciuni de salt indirect dinamice prezent n programele
procedurale testate (sub 5.64%), n cadrul arhitecturilor moderne de
procesare superspeculative i cu structuri pipeline extrem de complexe,
predicia eronat a unei singure instruciuni de salt (chiar i indirect)
determin stagnri i penaliti substaniale din punct de vedere al timpului
de procesare cu consecine defavorabile asupra ratei de procesare.
Value Locality on "pure" indirect jumps and calls
99.46
95
96
97
98
99
100
a
p
p
l
u
a
p
p
s
i
c
c
1
f
p
p
p
p
g
o
h
y
d
r
o
2
d l
i
a
v
e
r
a
g
e
SPEC'95 benchmarks - 100.000.000 instructiuni
executate
V
a
l
u
e
L
o
c
a
l
i
t
y

[
%
]
History 1
History 4
History 8
History 16
History 32

Figura 7.1. Localitatea valorilor pentru instruciuni de salt indirect (j $x, unde
x31)
Un rezultat cantitativ ce se desprinde din simulrile efectuate referitor
la localitatea valorilor aferent instruciunilor de salt indirect pure
exprim faptul c, indiferent de numrul instruciunilor executate (5.000.000

322 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
respectiv 100.000.000) pentru un context (istorie) mai mare de 4 adrese
destinaie reinute, se obine un grad de localitate de peste 91%, fapt
remarcabil, ce sugereaz c target-urile salturilor indirecte sunt foarte
predictibile. Rezultatele altor simulri efectuate dar care nu vor fi ilustrate
aici reflect de asemenea c gradul ridicat de localitate exprimat n medie
de instruciunile de revenire din proceduri sunt n corelaie cu gradul
ridicat de localitate (90%) observat pe registrul $31 (return address
register) al procesorului MIPS [Flo03a].
Ap(tip_predictor)
PPM complet - pattern 4, history 256, jvpt 256
60,19
89,33
0
20
40
60
80
100
apsi cc1 hydro2d li Average
SPEC'95 benchmarks - 100.000.000
instructiuni executate
A
p

[
%
]
LastValue
PPM complet

Figura 7.2. Superioritatea predictorului PPM complet fa de cel de tip LastValue
dpdv al acurateii prediciei salturilor indirecte
n figura 7.2 este prezentat comparativ comportamentul din punct de
vedere al acurateii prediciei salturilor indirecte a dou din structurile
propuse (LastValue foarte simplu i respectiv predictorul PPM complet
mult mai complex). Att n figura 7.2 ct i n toate experimentele care
urmeaz, dac nu se specific altfel, tabela de predicie JVPT este complet
asociativ. Avantajul predictorului PPM complet de a avea la dispoziie un
context lrgit de valori spre deosebire de predictorul Last Value se traduce
ntr-o acuratee de predicie cu 48.41% mai mare n favoarea primului.
Ca i consecin a rezultatelor exprimate n figura 7.2 n continuare
exploatarea gradului ridicat de localitate aferent instruciunilor de salt
indirect obinut pe benchmark-urile SPEC95 s-a realizat prin intermediul
unui predictor contextual de tip PPM complet (vezi figurile 7.3 i 7.4). S-au
realizat dou statistici: pentru o istorie mare (meninerea ultimelor 256 de
target-uri) dar i pentru o istorie dovedit optim din punct de vedere al
localitii pe aceste tipuri de instruciuni (32). Rezultatele sunt aproximativ
identice, n medie pentru un context de 3 valori obinnd acurateea de
predicie cea mai mare. Acurateea n medie aritmetic obinut este de
88.6% (satisfctor innd cont de rezultatele anterior obinute de Chang

Rezultate obinute prin simulare. Interpretri 323
[Cha97]). n medie rezultatele raportate de ali cercettori indic o acuratee
de predicie pentru salturile indirecte de doar 75% [Dri98].
Ap=f(pattern) Hi story=32 JVPT=256
86,24
88,55 88,60
87,85
0
20
40
60
80
100
a
p
l
u
a
p
s
i
c
c
1
f
p
p
p
p
g
o
h
y
d
r
o
2
d l
i
A
v
e
r
a
g
e
SPEC'95 benchmarks - 100.000.000 i nstructi uni executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
pat ern=1
pat ern=2
pat ern=3
pat ern=4

Figura 7.3. Acurateea prediciei aferent instruciunilor de salt indirect utiliznd
un predictor de tip PPM complet, n funcie de lungimea pattern-ului. JVPT
asociativ (istorie redus)

Ap=f(pattern) History=256, JVPT=256
87,80
91,58
90,29
88,04
0
20
40
60
80
100
a
p
l
u
a
p
s
i
c
c
1
f
p
p
p
p
g
o
h
y
d
r
o
2
d l
i
A
v
e
r
a
g
e

SPEC'95 benchmarks - 100.000.000 instructiuni
executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
patern=1
patern=4
patern=8
patern=12

Figura 7.4. Acurateea prediciei aferent instruciunilor de salt indirect utiliznd
un predictor de tip PPM complet, n funcie de lungimea pattern-ului. JVPT
asociativ (istorie bogat)
Rezultatul grafic din figura 7.4 evideniaz c predicia optim
(91.58%) se obine pentru un pattern de cutare de 4, ndreptind
afirmaiile i altor cercettori care afirm c: "un pattern de cutare mai
bogat poate conduce teoretic la o acuratee mai ridicat a prediciei, dar
ncepnd cu o anumit dimensiune a pattern-ului acesta se comport ca

324 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
zgomot i acurateea ncepe s scad" [Vin02]. De asemenea, corobornd
rezultatele obinute n figurile 7.3 i 7.4 rezult c i history, care n acest
caz reprezint ntregul context n care se caut apariia pattern-ului,
influeneaz acurateea de predicie. Rezultatele sunt uor mai mari (cu
3.36%) din punct de vedere al acurateii de predicie pentru history = 256
de valori (ultimele 256 de target-uri aferente unei anumite instane de salt
indirect static).
Procentajul mediu al instruciunilor de salt indirect clasificate
predictibile i predicionate corect de ctre automatul de clasificare (vezi
figura 5.28) este destul de ridicat (9094%). Diferena se observ studiind
coloanele Unpred (clasificate nepredictibile i predicionate greit), unde
procentajele din tabelul 7.3 sunt foarte reduse (27%). n sprijinul acestor
valori extrem de mici a aduce o concluzie proprie, generat mai mult pe
baza tabelului 7.10 referitor la programele de test proprii: nu este
obligatoriu ca rezultatul din coloana Unpred s fie mare (poate fi chiar
foarte mic) dac, procentajul de salturi indirecte dinamice clasificate
nepredictibile din totalul salturilor indirecte este nesemnificativ
( % 4 1
refs _ indir _ sim
Unpred classified
< , unde sim_indir_refs i classifiedUnpred au fost
descrise n 5.3.1).
Una din problemele care pot fi mbuntite pe viitor se refer la
determinarea i a altor mecanisme de clasificare, care prin comportamentul
lor s ajute la creterea acurateii de predicie (vezi Perceptronul sau reelele
MLP folosite n metapredicia valorilor regitrilor).

History = 32, JVPT=256
pattern=1 pattern=2 Pattern=3 pattern=4
SPEC
benchmarks
Pred
[%]
Unpred
[%]
Pred
[%]
Unpred
[%]
Pred
[%]
Unpred
[%]
Pred
[%]
Unpred
[%]
applu 99.67 8.33 99.56 6.25 99.67 4.35 99.67 4.35
apsi 96.18 42.91 97.19 38.65 97.46 43.47 97.80 31.95
cc1 70.97 50.44 76.13 52.88 79.96 58.93 80.48 63.39
fpppp 99.19 19.12 99.17 17.19 99.18 18.33 99.15 17.74
go 92.85 0.00 92.84 0.00 92.85 0.00 92.82 0.00
hydro2d 94.60 16.80 100.00 13.95 100.00 16.92 100.00 20.59
li 87.55 37.90 88.39 42.26 88.42 43.43 88.30 44.66
Average
91.57 25.07 93.32 24.45 93.93 26.49 94.03 26.10
Tabelul 7.3. Procentajul de instruciuni de salt indirect predictibile i nepredictibile
identificate corect de ctre automatul de clasificare aferent predictorului PPM
complet

Rezultate obinute prin simulare. Interpretri 325
n vederea nlocuirii unui predictor PPM complet, mai performant
dect unul adaptiv pe dou niveluri n condiii echivalente de cost hardware
dar mai scump de implementat, cu un predictor hibrid a crui componente
le reprezint dou predictoare contextuale cu pattern-uri de lungime fix,
diferite (P1 = Markov(m) i P2 = Markov(n), cu mn), am simulat o tabel
de predicie jvpt (vezi subcapitolul 5.3.1) cu 256 intrri (vezi figurile 7.5 i
7.6) n dou ipostaze: cu istorie redus (sunt reinute ultimele 32 de target-
uri) respectiv cu o istorie bogat (256 de target-uri).

Acuratetea predictiei functie de ordinul predictorului Markov (k)
-jvpt 256 intrari; -history 32 valori
Media(k=3)=89.10%
50%
60%
70%
80%
90%
100%
1 2 3 4 6 8 10 12
pattern de cautare = k
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
apsi
cc1
hydro
li
MEDIA

Figura 7.5. Determinarea predictorului Markov de ordin optim (istorie redus - 32)

Acuratetea predictiei functie de ordinul predictorului Markov (k)
-jvpt 256 intrari; -history 256
Media(k=6)= 91,54%
70%
75%
80%
85%
90%
95%
100%
105%
1 2 3 4 6 8 10 12
Pattern de cautare = k
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
apsi
cc1
hydro
li
MEDIA

Figura 7.6. Determinarea predictorului Markov de ordin optim (istorie bogat -
256)

326 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Oarecum firesc, creterea istoriei valorilor reinute (a contextului
n care se caut) implic o acuratee de predicie mai mare prin
creterea pattern-ului de cutare (se distinge o corelaie ntre salt-uri
mai ndeprtate dac contextul ar permite acest lucru). Astfel,
acurateea de predicie maxim pentru o istorie de 32 valori este
obinut pentru un pattern de cutare k=3 (89.10%) respectiv pentru o
istorie de 256 valori pentru un pattern k=6 (91.54%). Rezultatele par s
ntreasc afirmaia cercettorilor [Tho03] care susin pstrarea i utilizarea
unei istorii ct mai lungi (ndeprtate) n procesul de predicie aferent
instruciunilor de salt ntruct unele salturi corelate pot aprea la o distan
considerabil n irul de instruciuni dinamice. Acest lucru se poate ntmpla
dac dou salturi corelate sunt separate de ctre un apel de funcie care
conine multe branch-uri. La momentul prsirii funciei, o istorie global
redus poate conine doar comportamentul salturilor din cadrul funciei, n
timp ce o istorie global extins poate reine i rezultatul saltului corelat,
anterior apelului funciei.
Rezultatele exprimate n continuare se refer la structura de predicie
Target Cache. Urmtorul grafic, figura 7.7 prezint comparativ acurateea
prediciei n funcie de asociativitatea structurii Target Cache. Fiecare set
este propriu fiecrei instane de instruciuni de salt indirect, iar n cadrul
fiecrui set pot fi reinute assoc target-uri distincte.

Ap=f(assoc) folosind un predictor Target Cache cu 64 de seturi
66,76
75,16
79,82
0
20
40
60
80
100
a
p
p
l
u
a
p
s
i
c
c
1
f
p
p
p
p
g
o l
i
h
y
d
r
o
2
d
A
v
e
r
a
g
e
SPEC'95 benchmarks - 100.000.000 instructiuni
executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
assoc 1
assoc 2
assoc 4

Figura 7.7 Acurateea prediciei aferent instruciunilor de salt indirect n funcie
de gradul de asociativitate al structurii Target Cache implementate
Identic ca i la cache-urile de date sau instruciuni, rezultatele
evideniaz faptul c acurateea prediciei crete odat cu gradul de
asociativitate. Rezultatele altor simulri efectuate dar care nu vor fi ilustrate
aici reflect de asemenea c, prin creterea capacitii tabelei Target Cache

Rezultate obinute prin simulare. Interpretri 327
(a numrului de seturi) este mbuntit acurateea prediciei. Cu toate
acestea, pentru un TargetCache mare (256 de seturi) se observ o
saturare a acurateii de predicie (practic tabela poate fi i mapat
direct n acest caz). Rezultatele mai puin satisfctoare obinute n cazul
folosirii schemelor de predicie mapate direct sau semiasociative cu grad de
asociativitate redus, se datoreaz i PC-urilor salturilor indirecte, multiple de
4 (instruciuni codificate pe 32 de bii), ceea ce face ca doar anumite locaii
(seturi) s fie accesate. Cu toate c gradul de utilizare al tabelelor este destul
de redus, numrul de interferene ce apar este foarte ridicat diminund n
final acurateea prediciei. O soluie posibil ar putea fi indexarea
structurilor de predicie eliminndu-se ultimii doi bii din adresa
instruciunii de salt.
Rezultatele obinute, mai slabe dect cele generate de predictorul PPM
complet, pot fi datorate i faptului c n implementarea fcut de autor
tabela TargetCache nu a fost indexat cu adresa instruciunii concatenat
(sau dispersat prntr-o funcie "hash") cu istoria global a salturilor
condiionate, ci doar cu PC-ul saltului indirect. Pentru a nltura acest
neajuns i pentru a putea rspunde la ntrebarea Ct de departe trebuie s
cutm salturi corelate ? (HRgLength maxim = ?) s-a introdus n procesul
de predicie comportamentul ultimelor HRgLength salturi condiionate,
anterioare saltului indirect de prezis. Dispersia istoriei i a adresei saltului se
face printr-o funcie XOR.

Ap=f(HRgLength) - TargetCache - 4 way associative, 64 sets
79,82
34,99
78,52
81,82
50,67
77,91
0
20
40
60
80
100
a
p
p
l
u
f
p
p
p
p
g
o
a
p
s
i
c
c
1 l
i
h
y
d
r
o
A
v
e
r
a
g
e
SPEC'95 benchmarks - 100.000.000
instructiuni executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
HRgLengtht=0
HRgLength=1
HRgLength=4
HRgLength=8

Figura 7.8. Influena istoriei globale a salturilor condiionate asupra prediciei
Pentru benchmark-urile cu o dispersie ridicat a target-urilor (apsi,
cc1, li, hydro vezi subcapitolul 4.3), utilizarea istoriei globale a salturilor
condiionate n indexarea Target Cache-ului joac un rol important n
creterea acurateii prediciei salturilor indirecte (n medie cu pn la

328 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
16.93% iar n cazuri particulare - cc1 - chiar i cu 45%). n medie
aritmetic pe toate cele 7 benchmark-uri SPEC95, acurateea optim de
predicie se obine prin reinerea comportamentului global al ultimelor 4
salturi condiionate. Repetnd experimentul pentru valori ale parametrului
HRgLength de 12 respectiv 16 acurateea prediciei scade pe msur ce
istoria crete. Rezult c un pattern format din mai mult de 8 salturi
condiionate se comport practic ca zgomot pentru predicia salturilor
indirecte.
Urmtorul pas fcut pentru a crete acurateea de predicie a structurii
TargetCache a constat n extinderea informaiei de corelaie prin asocierea
fiecrui bit de istorie din globalHR cu PC-ul aferent saltului condiionat
respectiv i determinarea prediciei pe baza acestei informaii mai complexe
i mai complete [Nai95, Vin99] vezi figura 5.29.

Ap = f(Extend)
TC - 4 way associative, 64 sets, HRgLength=4, XOR hashing
81,82
81,11
85,09
94,60
0
20
40
60
80
100
a
p
p
l
u
a
p
s
i
c
c
1 l
i
f
p
p
p
p
g
o
h
y
d
r
o
A
v
e
r
a
g
e
SPEC'95 benchmarks - 100.000.000 instructiuni
executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
Extend = 0
Extend = 1

Figura 7.9. Acurateea prediciei instruciunilor de salt indirect folosind o tabel
TargetCache n funcie de extinderea sau nu a informaiei de corelaie
Dup cum rezult din figura 7.9 pentru benchmark-urile caracterizate
de un procentaj ridicat de salturi indirecte extinderea informaiei de
corelaie (PC
1
, PC
2
, , PC
HRgLength
), la costuri identice de implementare
(structur Target Cache de aceeai capacitate) determin creterea
acurateii prediciei acestora. Efectul pozitiv apare practic pe acele
programe de test pentru care istoria salturilor condiionate influeneaz
predicia. Creterea acurateii de predicie prin folosirea unei informaii mai
bogate de context este de 8.64% pentru HRgLength=4 respectiv de 15.16%
cnd HRgLength=8 vezi tabelul 7.4. Tabelul urmtor (7.4) ilustreaz
acurateea de predicie n medie aritmetic doar pe 4 din benchmark-urile
SPEC95 (cc1, li, apsi, hydro cele mai semnificative din punct de vedere
al salturilor indirecte).

Rezultate obinute prin simulare. Interpretri 329

XOR mode; HRgLength = 4; TC 4 way associative; 64 de seturi
HRgLength = 4 HRgLength = 8
Extend = 0
76.52% 74.56%
Extend = 1
83.13%
85.86% (respectiv 88.21% pentru
un TC 8 way associative)
Tabelul 7.4. Creterea acurateii de predicie prin folosirea unei informaii mai
bogate de context pe benchmark-urile bogate n salturi indirecte dinamice
Cu toat mbuntirea adus de extinderea corelaiei, acurateea
prediciei instruciunilor de salt indirect este totui inferioar celei obinute
cu un predictor PPM complet (89.33% - vezi figura 7.2). i totui exist i
rezultate realmente extraordinare: acurateea obinut pe hydro.ss este
99.98% (Target Cache 4 way associative, 64 de seturi, HRgLength=8,
folosind informaie de corelaie extins - PC
1
, PC
2
, , PC
HRgLength
) egal cu
cea obinut cu predictorul PPM complet. Un exemplu care evideniaz
limitarea avantajului introdus de tehnica de extindere a informaiei de
corelaie pentru pattern-uri de salturi condiionate de istorie redus este
prezentat n Anexa 1 de la sfritul lucrrii.
Un ultim experiment realizat n ncercarea de a atinge acurateea de
predicie a predictorului PPM complet cu o structur de tip Target Cache
mai simpl ca implementare, s-a bazat pe introducerea unui mecanism de
confiden care s asigure o ignorare selectiv a efecturii unor
predicii. Pe lng modificrile structurale s-a folosit i un mecanism de
inserare / evacuare n / din set bazat pe LRU(least recently used), Confiden
i pe superpoziia celor dou (MPP minim de performan potenial).
Ap = f(Threshold)
TargetCache - 4 way associative; 64 de seturi -HRgLength 4 -XOR
1 -Extend 0 -bLRU 2 -bConf 3
94,27
100,00
99,21
96,23
89,21
85,49
83,38
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
f
p
p
p
p
g
o
a
p
s
i
c
c
1 l
i
h
y
d
r
o
M
e
d
i
e

a
r
i
t
m
e
t
i
c
a
SPEC'95 benchmarks
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
Threshold = 6
Threshold = 4
Threshold = 2
Threshold = 0

Figura 7.10. Acurateea prediciei [Des02] target-urilor instruciunilor de salt
indirect n funcie de prag, folosind un mecanism de confiden

330 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Practic acurateea prediciei [Des02] (vezi formula 5.6 din capitolul
5) crete substanial prin restrngerea cazurilor n care se face predicie
(cu 3.57% pn la 11.45% n funcie de prag medii statistice realizate
pe programele de test bogate n instruciuni dinamice de salt indirect).
Maximul de performan s-a obinut utiliznd un automat de confiden pe 3
bii i un prag de 6 (de cel puin 6 ori saltul s-a prezis corect anterior chiar
dac nu s-a folosit predicia), rezultnd astfel n medie armonic pe cele 4
benchmark-uri semnificative (apsi, cc1, li i hydro) o acuratee de predicie
de 98.43%.
TargetCache - 4 way associative; 64 de seturi -HRgLength 4 -XOR 1
-Extend 0 -bLRU 2 -bConf 3
41,91%
61,31%
68,50%
77,50%
86,95%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
a
p
p
l
u
f
p
p
p
p
g
o
a
p
s
i
c
c
1 l
i
h
y
d
r
o
M
e
d
i
e

a
r
i
t
m
e
t
i
c
a
SPEC'95 Benchmarks
G
r
a
d

d
e

e
f
e
c
t
u
a
r
e

a
l

p
r
e
d
i
c
t
i
e
i

[
%
]
Threshold = 6
Threshold = 4
Threshold = 2
Threshold = 0

Figura 7.11. Procentajul cazurilor n care se face predicie (fraciunea de salturi
avnd confidena>Threshold)
Pentru a nu fi nelai de acurateile foarte mari obinute n figura
7.11 este ilustrat un grafic cu procentajul cazurilor n care se face
predicie (vezi formula 5.7 din capitolul 5). Se observ c pragul
(threshold) reprezint obstacolul care determin selecia i cu ct acesta este
mai mare acurateea prediciei tinde spre absolut, dar procentajul cazurilor
n care se face predicie din totalul instruciunilor de salt indirect scade
semnificativ.
Este de dorit totui ca un procentaj ct mai ridicat de instruciuni de
salt indirect s fie supuse prediciei i acurateea acestora s fie foarte mare.
Rezult c, ar fi ideal dac s-ar putea printr-o metod oarecare s reducem
pragul dar s pstrm acurateea de predicie ct mai ridicat. ntruct
ponderile de 77.50% (media aritmetic pe cele 7 benchmark-uri SPEC95)
respectiv 84.17% (media aritmetic pe doar cele 4 benchmark-uri
semnificative - apsi, cc1, li i hydro) din totalul instruciunilor de salt

Rezultate obinute prin simulare. Interpretri 331
indirect predicionate (pentru threshold=2) constituie totui procente
decente, ncercm s obinem o acuratee a prediciei sporit pentru acest
prag. n acest sens se va extinde informaia de corelaie pentru indexarea
structurii Target Cache.

Ap = f(Extend)
TargetCache - 4 way associative; 64 de seturi -HRgLength 4 -XOR 1
-bLRU 2 -bConf 3 -Threshold 2
78,81
95,95
91,47
81,54
98,36
92,76
0
20
40
60
80
100
apsi cc1 li hydro Medie
aritmetica
SPEC'95 Benchmarks - semnificative dpdv al salturilor indirecte
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
Extend = 0
Extend = 1

Figura 7.12. Influena informaiei de corelaie extins asupra acurateii de predicie
a target-urilor instruciunilor de salt indirect, folosind i un mecanism de confiden

TargetCache - 4 way associative; 64 de seturi -HRgLength 4 -XOR 1
-bLRU 2 -bConf 3 -Threshold 2
84,17% 75,62%
80,37%
87,67%
88,85%
81,69%
0%
20%
40%
60%
80%
100%
a
p
s
i
c
c
1 l
i
h
y
d
r
o
M
e
d
i
e

a
r
i
t
m
e
t
i
c
a
SPEC'95 Benchmarks - semnificative dpdv al salturilor
indirect
G
r
a
d

d
e

e
f
e
c
t
u
a
r
e

a
l

p
r
e
d
i
c
t
i
e

[
%
]
Extend = 0
Extend = 1

Figura 7.13. Creterea procentajului cazurilor n care se face predicie prin
extinderea informaiei de corelaie

332 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Privind comparativ, rezultatele grafice din figurile 7.107.13 exprim
eficacitatea unei scheme de predicie de tip Target Cache modificat
care este indexat cu informaie de corelaie extins. Astfel, n acest caz
se obine o acuratee de predicie superioar cu 1.41%, dar i mai
important, procentajul instruciunilor de salt indirect care sunt supuse
prediciei crete cu 4.16%, ajungnd la aproape 88% pe benchmark-urile
care au un numr semnificativ de astfel de instruciuni. Privind din punct
de vedere al performanei globale a predictorului (vezi formula 5.8 din
capitolul 5) superioritatea tehnicii de extindere a informaiei de corelaie
devine i mai accentuat (cretere de 5.62%).
Repetnd experimentul anterior de extindere a informaiei de corelaie,
pentru parametrii Target Cache (a cror semnificaie a fost descris n
subcapitolul 5.3.2) - 4 way associative; 64 de seturi -HRgLength 4 -XOR 1 -
bLRU 2 -bConf 3, i utiliznd un prag mai mare (automat de confiden mai
selectiv threshold = 4) s-a obinut urmtorul tabel de rezultate.
Acurateea Prediciei
[Des02]
Grad de realizare a prediciei
Threshold=2 Threshold=4 Threshold=2 Threshold=4
Extend = 0
91.47% 95.49% 84.17% 74.39%
Extend = 1
92.76% 96.10% 87.67% 79.19%
Tabelul 7.5. Influena combinat a informaiei extinse de context cu automatul de
confiden asupra acurateii de predicie, pe benchmark-urile bogate n salturi
indirecte dinamice
Influena informaiei de corelaie extins asupra unui predictor bazat
pe un automat de confiden mai selectiv (threshold = 4) este
nesemnificativ (0.64%). Avantajul n aceast situaie l constituie totui
creterea cu 6.45% a cazurilor cnd se face predicie, ajungndu-se pn la
79.19%. Se impune totui o comparaie ntre performana global generat
n cele dou cazuri din punct de vedere al automatului de confiden.
Revenind la rezultatele din tabelul 7.5, ultima linie, i innd cont de
definiia performanei globale, rezult c:
P(Extend=1 and Threshold=2) = 92.76%87,67% = 81.32% i
P(Extend=1 and Threshold=4) = 96.10%79,19% = 76.10%
Practic performana global a predictorului cu automat de
confiden pe 3 bii este mai bun cnd acesta este mai puin selectiv
(threshold = 2 abia la a patra predicie corect se utilizeaz predictorul
aferent, vezi i algoritmul implementat - if(confidena > threshold)
valuePrediction++).
De asemenea, n condiiile noii metrici introduse, se observ c
prin adugarea unui automat de confiden nu ntotdeauna (depinde de

Rezultate obinute prin simulare. Interpretri 333
pragul impus) se mbuntete performana global a predictorului
(practic ceea ce l intereseaz n mod direct pe utilizatorul de programe) -
vezi tabelul 7.6. Performana global a predictorului crete de ndat ce
gradul de asociativitate al tabelei Target Cache crete (ntre 2.84% i 4.27%
- vezi tabelul 7.6 coloana Threshold=1), optimul de performan obinndu-
se pentru o asociativitate 8-way a tabelei Target Cache, inferior totui
cazului cnd se pstreaz comportamentul pattern-ului de 8 salturi
condiionate (vezi tabelul 7.7. coloana Threshold=1, linia asociativitate=8).
Performana global a predictorului cu
confiden

Ap (fr
confiden)
Threshold = 1 Threshold = 2
asociativitate=2
78.15% < 79.39% > 77.91%
asociativitate=4
82.27% < 82.78% > 81.32%
asociativitate=8 82.35% < 85.13% > 83.87%
Tabelul 7.6. Superioritatea predictorului cu confiden pentru o asociativitate mai
mare a tabelei Target Cache (TC - 64 de seturi -HRgLength 4 -XOR 1 -Extend 1
-bLRU 2 -bConf 3) - I

Performana global a predictorului cu
confiden

Ap (fr
confiden)
Threshold=0 Threshold=1 Threshold=2
asociativitate=4
86.40% < 87.39% 85.66% 84.98%
asociativitate=8 86.47% < 88.88% > 87.17% > 86.51%
Tabelul 7.7. Superioritatea predictorului cu confiden pentru o asociativitate mai
mare a tabelei Target Cache (TC - 128 de seturi -HRgLength 8 -XOR 1 -Extend
1 -bLRU 2 -bConf 3) - II
n condiiile extinderii informaiei de corelaie superioritatea
predictorului cu confiden fa de unul care nu are implementat acest
mecanism (vezi tabelul 7.7 linia cu asociativitate=8) este de 2.79% pentru
un threshold=0 (nu se utilizeaz predicia dect a doua oar). Acurateea de
predicie a Target Cache-ului cu confiden (88.88%) este nc inferioar
celei obinute cu cel mai performant predictor PPM complet (89.33% - vezi
figura 7.2) dar se apropie semnificativ (diferena fiind sub 0.51%), fcnd
posibil nlocuirea unei scheme extrem de complexe (PPM complet) cu
una fezabil hardware (Target Cache).
Pentru mecanismul de confiden (indiferent de pragul impus),
creterea gradului de asociativitate al structurii Target Cache joac un rol
pozitiv, ceea ce nu se poate spune i n cazul predictorului fr confiden
(vezi tabelele 7.6 i 7.7). Creterea n acuratee a prediciei salturilor
indirecte devine asimptotic pentru o tabel de capacitate mai mare

334 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
dect 128 de seturi, 8-way asociativ, folosind pentru indexare un
pattern de 8 salturi condiionate i informaie de corelaie extins
(Ap=88.97% dac structura Target Cache are 256 de seturi, pstrnd n rest
condiiile precizate mai sus).
Se pune problema stabilirii influenei cmpului LRU asupra
performanei i a determinrii valorii sale optime. ntruct pentru o
asociativitate de 4 a tabelei Target Cache procentajul cazurilor n care se
insereaz n set dup principiul LRU este sub 1% (exceptnd cele dou
benchmark-uri apsi i hydro, vezi tabelul 7.8), rezult c, crescnd
asociativitatea i implicit scznd procentajul miss-urilor de conflict,
influena cmpului LRU tinde s devin insignifiant (0). ntr-un fel, acest
fapt este benefic ntruct s-ar putea implementa un algoritm trivial de
evacuare (FIFO etc.) conducnd la scderea complexitii, idee care ar fi
prut naiv n lipsa simulrilor efectuate.
apsi hydro
asociativitate=2 10.18% 13.37%
asociativitate=4 3.71%6.26% (funcie de numrul de bii pe
care se reprezint cmpul LRU: 41)
5.38%
Tabelul 7.8. Procentajul cazurilor cnd se insereaz ntr-un set conform
principiului LRU
Simulri efectuate pentru dou grade de asociativitate diferite (2-way
respectiv 4-way) i variind parametrul LRU au condus la observaia c
optimul acurateii de predicie se obine pentru LRU=log
2
(gradul de
asociativitate).
Modalitatea de inserare / evacuare n / din set dup LRU minim s-
a dovedit mai eficient dect dup confiden minim, cu 2.43%, i chiar
cu 0.34% fa de modalitatea MPP (vezi figura 7.14), pentru structuri
Target Cache identice (64 seturi, 4 way asociativ, HRgLength=8, XOR=1,
Extend=1, bLRU=2, bConf=2, Threshold=0). Rezultatele statistice obinute
pe o tabel Target Cache 2 way asociativ arat o superioritate i mai
accentuat a acurateii de predicie dac inserarea se face dup LRU (6.88%
fa de inserarea dup confiden, respectiv 1.02% fa de inserarea dup
MPP). Cu toate acestea, bazat i pe rezultatele anterioare, (vezi figura 7.7 i
[Flo04]), o structur Target Cache este relativ eficient (Ap82.65%) pentru
un grad de asociativitate 4. O prim concluzie ar fi c anumite salturi
indirecte sunt evacuate din structura Target Cache nainte de a fi
cptat o anumit confiden, i care ulterior s-ar dovedi corect
predicionate. Superioritatea modului de inserare / evacuare dup LRU
minim fa de modul dup confiden minim se atenueaz odat cu
creterea gradului de asociativitate al structurii Target Cache i implicit cu

Rezultate obinute prin simulare. Interpretri 335
diminuarea miss-urilor de conflict (ctigul n acuratee scade la 1.63%). De
asemenea, dei se atepta ca evacuarea dup MPP s genereze o acuratee de
predicie mai mare dect n celelalte dou situaii, se pare c valorile minime
(posibil 0) ale cmpului MPP specific fiecrei locaii din set s fie
influenate de confidena situat n mai multe cazuri pe 0.
Ap=f(mod_inserare) - TargetCache 64 de seturi -HRgLength 8 -
XOR 1 -Extend 1 -bLRU 2 -bConf 2 -Threshold 0
77,40
87,73
76,62
87,45
82,65
72,42
86,33
70
72
74
76
78
80
82
84
86
88
90
assoc=2 assoc=4 assoc=8
asociativitatea structurii Target Cache
A
c
u
r
a
t
e
t
e
a

P
r
e
d
i
c
t
i
e
i

[
%
]
LRU
MPP
Confidenta

Figura 7.14. Influena modului de inserare / evacuare n / din set asupra acurateii
de predicie a salturilor indirecte. Statisticile reprezint mediile aritmetice obinute
pe benchmark-urile SPEC95 bogate n salturi indirecte.
innd cont de experimentul lui Driesen dar mai ales de rezultatele
limitate, din punct de vedere al acurateii prediciei salturilor indirecte pe o
serie de benchmark-uri indiferent de mbuntirile arhitecturale aduse, pe
baza comportamentului dinamic am realizat o statistic (vezi figura 7.15)
privind aritatea salturilor (monomorfe genereaz dinamic un singur target,
duomorfe genereaz dinamic 2 target-uri distincte, respectiv polimorfe
salturile se efectueaz la mai mult de dou adrese destinaie distincte).
Din punct de vedere dinamic pe 7 benchmark-uri SPEC95 aritatea
salturilor indirecte este ilustrat n figura 7.15. Din punct de vedere static, pe
aceleai programe de test, se poate spune c, 67% din salturile indirecte sunt
monomorfe, 7% sunt duomorfe i 26% sunt polimorfe.

336 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Procentajul salturilor indirecte dinamice functie de numarul de
target-uri distincte generate
41,13%
96,86%
7,34%
0,24%
9,88%
100,00%
91,25%
48,99%
52,32%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
a
p
p
l
u
f
p
p
p
p
g
o
a
p
s
i
c
c
1 l
i
h
y
d
r
o
M
e
d
i
a
_
a
r
i
t
m
e
t
i
c
a
SPEC'95 benchmarks
[
%
]
1 target % - dinamice
2 target-uri % - dinamice
>2 target-uri % - dinamice

Figura 7.15. Aritatea salturilor indirecte din punct de vedere dinamic
Observnd graficul (figura 7.15), concluziile anterior enunate pe
parcursul acestui capitol de rezultate devin practic mult mai clare. Astfel:
Pe benchmark-ul applu.ss acurateea prediciei de 92% obinut chiar i
cu un predictor de tip LastValue (fr istorie) este justificat dac inem
cont de faptul c din totalul salturilor indirecte dinamice 96% sunt
monomorfe.
Mediile aritmetice pe cele 4 programe de test bogate n salturi indirecte
(apsi, cc1, li, hydro), n concordan cu rezultatele obinute de Driesen,
exprim faptul c dei salturile monomorfe sunt prezente ntr-o proporie
covritoare din punct de vedere static 72.04% comparativ cu cele
duomorfe 9.27% i respectiv polimorfe 18.69%, ele reprezint doar
33.92% din totalul branch-urilor indirecte dinamice executate. Salturile
duomorfe constituie 16.47% din totalul celor indirecte dinamice iar cele
polimorfe, dei puine din punct de vedere static, dinamic constituie
aproape jumtate din total (49.61%).
Rezultatele slabe privind acuratetea prediciei salturilor indirecte pe
benchmark-ul cc1.ss (maxim 75.41% pentru o tabel Target Cache cu
128 intrri, 8-way asociativ, corelat cu ultimele 8 salturi condiionate,
avnd implementat i mecanism de confiden pe 2 bii), superioare totui
celor raportate de ali cercettori [Dri98, Cha97], sunt justificate dac
inem cont de faptul c din punct de vedere dinamic salturile polimorfe
sunt prezente n proporie de 91.25%, iar un singur salt indirect static
poate avea chiar i 44 de adrese destinaie vezi subcapitolul 4.3.

Rezultate obinute prin simulare. Interpretri 337
Tot procentajul substanial de salturi polimorfe dinamice 52.32% i
dispersia ridicat a target-urilor anumitor salturi vezi subcapitolul 4.3,
respectiv insignifiant 0.24% monomorfe dinamice, st la baza limitrii
acurateii prediciei (n ciuda modificrilor arhitecturale aduse structurii
Target Cache) pe benchmark-ul li.ss (90.54% - n aceleai condiii de
simulare ca cele expuse anterior referitoare la benchmark-ul cc1.ss).
Pornind de la predictoarele cascadate pe mai multe niveluri i
respectiv hibride [Dri98b, Dri98c], am implementat software i simulat o
structur hibrid de predicie, compus dintr-un predictor de tip LastValue i
cel mai bun predictor contextual determinat n urma simulrilor (vezi
figurile 7.5 i 7.6), cu istorie i pattern fix, n dou ipostaze: (istorie redus
32 i pattern de lungime 3 bii, sau istorie bogat 256 i pattern de lungime
6 bii) selecia fcndu-se pe baz de aritate, dup cunoaterea n prealabil a
informaiilor de profil aferente fiecrui salt indirect.
Predictorul hibrid o singur structur face predicie la un moment
dat - (LastValue + Contextual), cu selecie bazat pe aritate
mbuntete acurateea prediciei salturilor indirecte cu 3.03%
comparativ cu un predictor contextual avnd o istorie de 32 i pattern
de cutare 3, respectiv 2.44% fa de un predictor contextual care
beneficiaz de o istorie mai bogat (256 de target-uri i pattern de
cutare 6). Cstigul n acuratee (vezi figurile 7.16 i 7.17) este mai
pronunat dac comparaia se face cu cea mai performant structur de
predicie de tip TargetCache (8 way asociativ, 128 seturi, HRgLength=8,
Extend=1, bLRU=2, bConf=2, Threshold=0): 3.20% dac predictorul hibrid
reine o istorie redus a target-urilor (ultimele 32) i respectiv 5.42% dac
predictorul hibrid este caracterizat de o istorie bogat.
Un fapt, doar n aparen surprinzator, l reprezint acurateea de
predicie superioar schemei hibride, obinut de structura Target Cache pe
benchmark-ul li.ss. O prim explicaie poate consta n procentajul extrem de
sczut (0.24%) de salturi indirecte dinamice monoforme (vezi figura 7.15),
ntruct, n cazul benchmark-ului cc1.ss caracterizat de 7.34% salturi
dinamice monomorfe folosind structura hibrid de predicie rezult o
cretere a acurateii prediciei de la 75.41% (cu Target Cache) la 91.86%. O
alt explicaie ar putea fi caracterul nerepetitiv al target-urilor i o dispersie
de cel mult 14 target-uri distincte (vezi subcapitolul 4.3) aferente aceluiai
salt indirect. Practic, un singur salt indirect static dintr-un total de 16
prezente n urma simulrii primelor 5.000.000 de instruciuni dinamice,
genereaz 14 target-uri distincte, care pot fi reinute cu succes de un Target
Cache cu 128 intrri, 8 way asociativ folosind informaie de corelaie
extins.

338 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Imbunatatirea acuratetii predictiei folosind informatii despre
aritatea salturilor indirecte
88,95%
89,10%
91,80%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
a
p
s
i
c
c
1
h
y
d
r
o l
i
M
e
d
i
a

A
r
i
t
m
e
t
i
c
a
SPEC'95 benchmarks
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
Cel mai bun TargetCache
cu confidenta
contextual
pattern=3;history=32
hibrid LastValue +
contextual 32

Figura 7.16. Acurateea prediciei salturilor indirecte folosind o structur hibrid i
cunoscnd informaii de profil (istorie redus a predictorului contextual)

Imbunatatirea acuratetii predictiei folosind informatii despre
aritatea salturilor indirecte
88,95%
91,54%
93,77%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
a
p
s
i
c
c
1
h
y
d
r
o l
i
M
e
d
i
a

A
r
i
t
m
e
t
i
c
a
SPEC'95 benchmarks
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
Cel mai bun TargetCache
cu confidenta
contextual
pattern=6;history=256
hibrid LastValue +
contextual 256

Figura 7.17. Acurateea prediciei salturilor indirecte folosind o structur hibrid i
cunoscnd informaii de profil (istorie bogat a predictorului contextual)
7.1.2. SIMULAREA PROPRIILOR PROGRAME DE TEST.
REZULTATE.
n acest subcapitol sunt prezentate rezultatele statistice obinute n
urma simulrii propriilor programe de test descrise n subcapitolul 4.2: Spre
deosebire de benchmark-urile SPEC'95 simulate care sunt n ntregime
procedurale, scrise n limbajul C, dintre cele cinci surse propuse de autor
dou sunt obiectuale (back_, Motenire_simpl3) scrise n C++.

Rezultate obinute prin simulare. Interpretri 339


Instruciuni
statice de
salt indirect
Totalul de
instruciuni
statice de
salt
%
instruciuni
statice de
salt indirect
Instruciuni
dinamice de
salt indirect
Totalul de
instruciuni
dinamice de
salt
%
instruciuni
dinamice de
salt indirec
Motenire
simpla1
14 585 2.393 512 22226 2.303
Back_ 22 639 3.443 145236 4636747 3.132
Hanoi 12 591 2.030 1291 211390 6.107
Motenire
simpla3
11 475 2.316 72 9307 0.774
Qsort 11 376 2.926 61 3966 1.538
Sort 14 632 2.215 1035 1272867 0.081
Tabelul 7.9. Contorizarea numrului de salturi indirecte statice / dinamice din
totalul instruciunilor executate dinamic din propriile programe de test
Dei procentajul instruciunilor dinamice de salt indirect este redus
(sub 7%) rezultatele exprimate n tabelul 7.9 sunt n concordan cu cele
obinute pe benchmark-urile SPEC'95. n timp ce numrul salturilor
indirecte statice este fix fiind i justificat n subcapitolul 4.2, numrul
instruciunilor dinamice este variabil i depinde de parametrii de intrare.

Localitatea valorii pe instructiunile de salt indirect
87,28
90,36
92,31
92,31
92,31
0
10
20
30
40
50
60
70
80
90
100
b
a
c
k
_
h
a
n
o
i
M
o
s
t
e
n
i
r
e
_
s
i
m
p
l
a
3
q
s
o
r
t
s
o
r
t
M
e
d
i
a

a
r
i
t
m
e
t
i
c
a
MyBenchmarks
L
o
c
a
l
i
t
a
t
e
a

v
a
l
o
r
i
i

[
%
]
History 1
History 4
History 8
History 16
History 32

Figura 7.18. Localitatea valorilor pentru instruciuni de salt indirect (j $x, unde
x31)
n medie aritmetic se observ o localitate extrem de ridicat pe testele
proprii propuse (92%). Rezultatul surprinztor obinut pe testul back_ se
poate datora att numrului relativ ridicat de instruciuni dinamice de salt

340 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
indirect ct i numrului redus de obiecte (declarate individual i nu n
cadrul unei structuri de date cu legturi - tablouri sau liste) i
metodelor aferente apelate recursiv, mrturie n acest sens stnd
localitatea de doar 80% determinat pe benchmark-ul Mostenire_simpla3.
La o privire atent a rezultatelor statistice (sursa de date a chart-ului
din figura 7.18) se observ c doar 24 de instruciuni de salt indirect
cauzeaz pierderea de localitate pentru back_ respectiv 11 instruciuni
pentru qsort practic miss-urile de start rece - oarecum normal existnd un
singur apel al funciei qsort(), ns innd cont de numrul de instruciuni
dinamice de salt indirect rezult gradele de localitate respective.
Se observ c o istorie de 4 target-uri memorate poate fi considerat
practic optim (localitate de doar 90% i nu 92%) n vederea prediciei. n
acest sens am determinat acurateea prediciei folosind predictorul PPM
complet n care pattern-ul de cutare variaz ntre 1 i 4 ntr-un context de
32 target-uri memorate pentru fiecare instan de salt indirect (vezi figura
7.19). ntruct rezultatele simulrilor pentru un context mai bogat au
evideniat o aceeai concluzie (pattern optim de 4 valori) s-a optat pentru
afiarea unui singur grafic.

Ap=f(pattern) - Predictor PPM complet
History=32, JVPT=256 intrari
55,56
81,13
99,97
81,08
77,39
97,83 83,03
0
20
40
60
80
100
b
a
c
k
_
h
a
n
o
i
M
o
s
t
e
n
i
r
e
_
s
i
m
p
l
a
_
3
q
s
o
r
t
s
o
r
t
M
e
d
i
a

a
r
i
t
m
e
t
i
c
a
MyBenchmarks
A
c
u
r
e
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
patern=1
patern=2
patern=3
patern=4

Figura 7.19. Acurateea prediciei aferent instruciunilor de salt indirect gsite n
propriile programe de test, utiliznd un predictor de tip PPM complet, n funcie de
lungimea pattern-ului.
Acurateea prediciei foarte sczut pe benchmark-urile
mostenire_simpla3 i qsort (indiferent de lungimea pattern-ului)
demonstreaz ineficiena predictorului PPM complet n cazul utilizrii
de masive eterogene (de obiecte sau alte structuri de date). Este posibil ca
un predictor incremental s se comporte mult mai bine n cazul celor dou
benchmark-uri. De asemenea, se observ c recursivitatea, ntlnit n

Rezultate obinute prin simulare. Interpretri 341
cadrul benchmark-urilor back_ i hanoi, poate fi exploatat cu succes cu
ajutorul predictorului PPM complet.
Rezultatul evideniat de figura 7.19 arat un pattern optim de 4 valori
i n acelai timp faptul c pe testele propuse acurateea de predicie nu este
influenat de history (contextul de target-uri memorate) poate i datorit
numrului redus de instruciuni dinamice de salt indirect.

History = 32, JVPT=256
Pattern 1 Pattern 2 Pattern 3 Pattern 4

Pred
[%]
Unpred
[%]
Pred
[%]
Unpred
[%]
Pred
[%]
Unpred
[%]
Pred
[%]
Unpred
[%]
back_ 99.99 0 99.99 0 99.99 0 99.99 0
hanoi 90.05 15.38 90.10 29.41 78.45 1.50 99.84 14.29
Motenire
_simpla_3
100 38.09 100 38.09 100 28.57
100.0
0
28.57
qsort 100 0 100 0 100 0 100 0
sort 100 0 100 0 100 0 100 0
Media
aritmetica
98.01 10.70 98.02 13.50 95.69 6.02 99.97 8.57
Tabelul 7.10. Procentajul de instruciuni de salt indirect predictibile identificate
corect i nepredictibile prezise greit de ctre automatul de clasificare aferent
predictorului PPM complet.
n cazul predictoarelor de tip Target Cache mapate direct sau "2-
way" asociative, creterea tabelei de predicie (a numrului de seturi)
determin mbuntirea acurateii de predicie (vezi figura 7.20).
ntruct cu o istorie de 4 target-uri reinute pentru fiecare instruciune
dinamic de salt indirect se obine o localitate de peste 90%, sunt
ndreptite rezultatele privind acurateea prediciei folosind un Target
Cache "4-way" asociativ, creterea fiind asimptotic odat cu creterea
numrului de seturi.
Un ultim aspect menionat, este acela c pe testele propuse de autor,
inevitabil mai simple dect nite benchmark-uri standardizate, acurateea de
predicie s-a dovedit mai mare n cazul schemei Target Cache dect n cazul
predictorului PPM complet (n primul rnd datorit celor dou aplicaii care
lucreaz cu tablouri). Cu toate acestea, dei ele au fost propuse pentru a
evidenia caracteristici de program care genereaz instruciuni de salt
indirect, n multe aspecte programele de test ale autorului s-au comportat
similar cu benchmark-urile SPEC'95. O ncercare de explicaie ar fi
urmtoarea: Target Cache-ul implementat nu deriv din PPM. El se
bazeaz pe context, dar nu contorizeaz frecvena acestuia (ca PPM-ul).

342 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Ap=f(assoc) - Predictor de tip Target Cache -
nr_seturi 64
36,07
70,41
87,24
87,28
99,98
0
20
40
60
80
100
b
a
c
k
h
a
n
o
i
m
o
s
t
e
n
i
r
e
_
s
i
m
p
l
a
_
3
q
s
o
r
t
s
o
r
t
m
e
d
i
a

a
r
i
t
m
e
t
i
c
a
MyBenchmarks
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
assoc 1
assoc 2
assoc 4

Figura 7.20. Acurateea prediciei aferent instruciunilor de salt indirect gsite n
testele proprii, utiliznd un predictor de tip TargetCache, n funcie de gradul de
asociativitate.
7.2. CERCETRI PRIVIND VECINTATEA I
PREDICIA VALORILOR INSTRUCIUNILOR
Rezultatele prezentate n aceast seciune au fost determinate cu
ajutorul simulatorului Value Predictor descris n subcapitolul 6.1. Pornind
de la o arhitectur superscalar minim, se va studia n ce msur va fi
afectat performana simulatorului de ctre variaia parametrilor acestuia.
Toate simulrile din acest subcapitol au fost fcute pentru 5.000.000 de
instruciuni dinamice n cazul benchmark-urilor SPEC95. Pentru nceput
vrem s determinm ct localitate a valorilor exist n benchmark-urile
SPEC ? Una din problemele importante pus n proiectare const n "Ct de
mult istorie s fie folosit n predicie ?" Aceste ntrebri sunt eseniale
i corelate. Gradul de localitate msurat pentru ultimele k valori
produse (History=k) ne ofer o limit ultimativ a acurateii de
predicie obtenabile. n plus determinarea lui k optim implic faptul c
acesta va fi folosit n implementarea predictorului contextual optim.
Figura de mai jos evideniaz influena istoriei asupra nivelului de
localitate a valorilor n cazul utilizrii adresei instruciunilor de tip Load

Rezultate obinute prin simulare. Interpretri 343
(PC). De remarcat c ultima coloan (Average) constituie media aritmetic
obinut pe benchmark-urile simulate.

- pstrarea n list doar a valorilor distincte -
53,42
67.66
71,14
73,88
75,57
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
a
p
s
i
c
c
1
c
o
m
p
r
e
s
s
g
o
h
y
d
r
o
2
d
i
j
p
e
g l
i
p
e
r
l
s
u
2
c
o
r
s
w
i
m
t
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 benchmarks
L
o
c
a
l
i
t
a
t
e
a

V
a
l
o
r
i
i

[
%
]

History 1
History 4
History 8
History 16
History 32

Figura 7.21. Localitatea valorilor utiliznd adresa (PC) instruciunilor de tip Load
Exploatnd corelaia dintre adresele instruciunilor Load i valorile
citite din memorie de ctre acestea, avnd o "adncime" a istoriei de 1
(regsirea aceleiai valori n resursa asignat ca i n cazul precedentului
acces), programele de test exprim o localitate a valorii de peste 53% n
timp ce extinznd verificarea n spaiul ultimelor 8 accese la memorie se
obine o localitate de peste 71%. Rezultatele subliniaz c majoritatea
instruciunilor Load statice aferente unui program exprim o variaie redus
a valorilor pe care le ncarc pe parcursul execuiei. Maximul de localitate
obinut cu o istorie de 32 de valori este de 75.57%.
Din urmtoarea figur reiese influena istoriei asupra nivelului de
localitate a valorilor n cazul n care s-a utilizat adresa datei. Tendina este
similar doar c valorile sunt mai mari: cu ct crete istoria (history=1
localitatea=69%) cu att crete localitatea valorii (history=32
localitatea=85%).


344 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
- pstrarea n list doar a valorilor distincte -
69,12
81,41
83,43
84,63
85,75
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
a
p
s
i
c
c
1
c
o
m
p
r
e
s
s
g
o
h
y
d
r
o
2
d
i
j
p
e
g l
i
p
e
r
l
s
u
2
c
o
r
s
w
i
m
t
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 benchmarks
L
o
c
a
l
i
t
a
t
e
a

V
a
l
o
r
i
i

[
%
]
History 1
History 4
History 8
History 16
History 32

Figura 7.22. Localitatea valorilor utiliznd adresa datei pentru instruciunile de tip
Load
Din cele dou figuri reiese c pentru instruciunile Load, cu o istorie
de 8 valori se obine optimul de localitate. Pentru adncimi mai mari ale
istoriei nu se obin creteri semnificative ale gradului de vecintate. Vom
compara acum pentru o istorie de 8, rezultatele obinute din punct de vedere
al localitii prin utilizarea adresei instruciunii versus cele obinute prin
utilizarea adresei datei.

- pstrarea n list doar a valorilor distincte -
History = 8 valori
0,00
10,00
20,00
30,00
40,00
50,00
60,00
70,00
80,00
90,00
100,00
a
p
p
l
u
a
p
s
i
c
c
1
c
o
m
p
r
e
s
s
g
o
h
y
d
r
o
2
d
i
j
p
e
g l
i
p
e
r
l
s
u
2
c
o
r
s
w
i
m
t
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 Benchmarks
L
o
c
a
l
i
t
a
t
e
a

V
a
l
o
r
i
i

[
%
]
Adresa Instruciunii
Adresa Datei

Figura 7.23. Localitatea valorilor cu adncimea istoriei de 8 (PC vs. DataAddress).

Rezultate obinute prin simulare. Interpretri 345
Aa cum se poate observa, s-au obinut rezultate mai bune (cu
17.28%) atunci cnd s-a folosit adresa datei. Dorim s exploatm aceast
localitate a valorilor prin utilizarea diferitelor tehnici de predicie prezentate
n subcapitolele 2.2.22.2.4. Trebuie precizat c localitatea valorii
exprimat n funcie de "adresa datei", dei mai mare, are dezavantajul
c n procesul de predicie dup adresa datei se va pierde timp ntruct
predicia se va face n faza ID (decode) - pentru modul de adresare
imediat, direct i indirect registru, respectiv ALU - pentru modul de
adresare indexat, dup calculul adresei. n consecin, dei probabil
acurateea prediciei va fi mai mare, timpul de execuie va fi mai
relaxat i performana global va avea de suferit fa de schema clasic.
Un alt deziderat al proiectului l-a constituit exploatarea gradului de
localitate exprimat i de alte tipuri de instruciuni (cele aritmetico-logice
ALU, despre cele de salt indirect JIndir s-a artat n subcapitolul 7.1.1).
Figura urmtoare prezint localitatea valorii extras din suita SPEC95
pentru instruciunile aritmetico-logice.

- pstrarea n list doar a valorilor distincte -
50,80
62,94
71,03
73,92
77,96
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
a
p
s
i
c
c
1
c
o
m
p
r
e
s
s
g
o
h
y
d
r
o
2
d
i
j
p
e
g l
i
p
e
r
l
s
u
2
c
o
r
s
w
i
m
t
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 benchmarks
L
o
c
a
l
i
t
a
t
e
a

V
a
l
o
r
i
i

[
%
]
History 1
History 4
History 8
History 16
History 32

Figura 7.24. Localitatea valorilor utiliznd adresa (PC) instruciunilor de tip ALU
Privind comparativ rezultatele grafice din figurile 7.21 i 7.24, un
aspect foarte interesant de remarcat se refer la faptul c pentru un grad de
localizare redus (istorie{1,4}) instruciunile load exprim o localitate
mai bun dect cele aritmetico-logice, ns ntr-un context bogat
(istorie{16,32}) situaia se inverseaz. Rezultatul nu surprinde ns
deoarece este fireasc variaia mult mai rapid a valorilor prin regitri
dect prin locaiile de memorie. Cu toate acestea dupa cum se va vedea i

346 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
n figura 7.35 pstrnd o plaj de 32 de valori pentru fiecare registru este
suficient s captm o localitate ridicat (76%).
Gradul ridicat de vecintate a valorilor exprimat de resursele anterior
amintite (instruciuni Load, ALU, sau adrese ale datelor din memorie)
conduce n mod natural la ideea prediciei pe aceste resurse. Figurile
urmtoare evideniaz n ce msur este influenat acurateea de predicie
de dimensiunea tabelei de predicie i ct de eficient este automatul de
clasificare implementat. n prim faz s-a considerat un predictor fr istorie
de tip last value. Graficele ilustreaz acurateea prediciei pentru tabelele de
dimensiuni mai mari sau egale cu 64 de locaii. Simulrile au fost efectuate
i pentru tabele de dimensiuni de 8, 16 i 32 de locaii ns acurateea
prediciei, depete extrem de rar 20% (doar pe 2 din cele 12 benchmark-
uri i cu tabel LastValuePredictionTable LVPT asociativ). Dei
statisticile au fost realizate att pentru structuri de predicie asociative ct i
mapate direct, datorit cantitii uriae de informaie care rezult i care ar
ngreuna poate modul de nelegere i interpretare, s-a optat pentru ilustrarea
grafic doar a rezultatelor privitoare la o tabel de predicie asociativ.
Rezultatele simulrilor (vezi figurile 7.26 i 7.27) arat c o cretere a
capacitii tabelei de predicie conduce la mbuntirea semnificativ a
acurateii de predicie, dimensiunea optim a tabelei de predicie fiind de
512 de locaii.
Ap=f(SizeOfLVPT)
25,11
30,93
32,85
43,39 45,79
84,22
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
h
y
d
r
o
2
d
a
p
s
i
c
o
m
p
r
e
s
s
i
j
p
e
g
s
w
i
m
t
o
m
c
a
t
v
w
a
v
e
5
s
u
2
c
o
r
f
p
p
p
p
p
e
r
l
c
c
1
A
v
e
r
a
g
e
SPEC'95 Benchmarks
A
c
u
r
a
t
e
t
e
a

P
r
e
d
i
c
t
i
e
i

[
%
]
64 entries
128 entries
256 entries
512 entries
1024 entries

Figura 7.25. Acurateea prediciei utiliznd adresa instruciunii (PC) i o tabel
asociativ n funcie de dimensiunea tabelei LVPT instruciuni Load

Rezultate obinute prin simulare. Interpretri 347
Valorile foarte mici n medie armonic pentru acurateea de predicie
se datoreaz n primul rnd celor trei benchmark-uri SPEC'95 (su2cor,
fpppp, perl) cu rezultate foarte slabe din acest punct de vedere (< 10%).

45,21
49,77
49,36
78,24
0
10
20
30
40
50
60
70
80
90
a
p
p
l
u
a
p
s
i
c
c
1
c
o
m
p
r
e
s
s
g
o
h
y
d
r
o
2
d
i
j
p
e
g l
i
p
e
r
l
s
u
2
c
o
r
s
w
i
m
t
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95Benchmarks
A
c
u
r
a
t
e
t
e
a

P
r
e
d
i
c
t
i
e
i

[
%
]
LVPT=512 intrari
LVPT=infinita

Figura 7.26. Acurateea prediciei utiliznd adresa instruciunilor de tip Load i o
tabel asociativ: Studiu comparativ ntre o tabel optim din punct de vedere a
capacitiiLVPT i una infinit
Rezultatele relativ apropiate (diferen de 9.18%) n ce privete
acurateea prediciei pe o tabel LVPT infinit i una cu 512 intrri
constituie un motiv n favoarea implementrii n hardware a schemei cu
512 locaii. Diferenele cantitative dintre graficele (figura 7.25 vs. figura
7.26) se datoreaz faptului c doar 10 benchmark-uri folosite n simulare au
fost identice: la primul programele de test distincte au fost fpppp i wave5
(cu rezultate contradictorii din punct de vedere al acurateii de predicie
cele dou extreme) iar la cel din urm simulri distincte au fost fcute pe li
i go.

64 128 256 512 1024 SPEC'95
bench
Pred Unpr Pred Unpr Pred Unpr Pred Unpr Pred Unpr
Applu 87.56 83.52 87.56 83.53 87.57 83.31 87.68 83.55 87.68 83.55
Apsi 96.28 85.05 94.97 78.94 94.32 77.17 93.66 84.36 93.71 89.33
Cc1 94.13 73.83 93.93 74.78 93.52 77.71 93.64 84.18 94.35 89.34
Compre
ss
89.07 93.17 89.07 93.17 89.07 93.16 89.07 93.15 89.07 93.15
Fpppp 99.41 78.23 99.17 76.29 98.3 67.12 96.01 87.06 94.96 71.1
Hydro 98.86 69.06 96.41 70.68 95.88 67.26 95.32 69.01 94.91 74.74
Ijpeg 86.87 98.65 87.15 99.5 87.15 99.5 87.15 99.5 87.15 99.5

348 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Perl 83.16 79.62 87.50 77.03 92.11 84.23 95.22 89.34 95.17 89.44
Su2cor 97.49 99.6 97.34 99.59 97.3 99.57 97.2 99.56 97.19 99.57
Swim 95.78 42.02 98.55 76.62 98.55 76.41 97.28 75.56 97.28 75.56
Tomcat 95.48 63.88 95.51 61.88 95.49 40.31 97.78 88.35 97.8 91.24
Wave5 99.3 91.45 99.3 91.26 99.3 91.03 99.29 90.91 99.29 90.98
Medie
Aritmetic 96.3 75.36 96.91 82.26 96.94 77.41 97.13 88.28 97.12 88.93
Tabelul 7.11. Procentajul de instruciuni Load predictibile i nepredictibile
identificate de ctre Predictorul de tip "Last Value". LVPT - asociativ i indexat
cu PC-ul instruciunii
n tabelul 7.11 coloanele Pred reprezint procentajul acelor Load-uri
care au fost clasificate predictibile i predicia a fost corect, iar n coloanele
Unpr se afl procentajul Load-urilor care au fost clasificate de automat ca
fiind nepredictibile i predicia a fost ntr-adevr greit. Automatul de
clasificare reprezint un numrtor saturat pe 2 bii i este cel folosit i n
cazul instruciunilor de salt indirect (vezi figura 5.28). Acesta este
incrementat/decrementat cu fiecare predicie corect/incorect, respectiv n
cazul unei predicii incorecte noua valoare aflat n resurs (registru, locaie
de memorie) este suprascris (istoria fiind unitar n tabela LVPT). Se poate
observa, c automatul se comport destul de bine (a identificat corect peste
96% din Load-urile predictibile i peste 75% din cele nepredictibile) dar
urmeaz n viitor s fie analizate i alte automate pentru a gsi pe cel optim.
Diferena de (4% n cazul load-urilor clasificate predictibile) fa de o
clasificare ideal poate fi datorat i modului de evacuare "primitiv" din
tabela LVPT. Slbiciunea automatului propus const n faptul c este prea
conservator, el clasificnd ca nepredictibile multe instruciuni care sunt
realmente predictibile.
Exist ns i variante care schimb strategia de modificare a valorii
bazat pe "histerezis". Un exemplu de mecanism de histerezis const ntr-un
numrtor saturat (pe i bii) asociat fiecrei intrri n tabela de predicie.
Numrtorul este incrementat/decrementat atunci cnd predicia este
corect/incorect, respectiv valoarea memorat n tabel este evacuat
numai cnd valoarea indicat de ctre numrtorul asociat este sub un prag
prestabilit (poate fi 2
i-1
). Un alt mecanism de histerezis nu modific valoarea
predicionat n tabel pn cnd noua valoare nu a aprut repetitiv de un
anumit numr de ori [se asigneaz un grad de ncredere fiecrei valori
existente la o anumit locaie (adres) n memorie (PC/data address)].
Dezavantajul c trebuie stocat n memorie (cache sau memoria central)
gradul de ncredere mpreun cu valoarea respectiv [Flo03, Lip96].
Rezultatele unor simulri nereprezentate aici, care ilustreaz
acurateea prediciei utiliznd adresa datei i o tabel asociativ n funcie de

Rezultate obinute prin simulare. Interpretri 349
dimensiunea tabelei LVPT, exprim urmtoarea concluzie. Acurateea de
predicie n cazul predictorului LVPT cu tabela asociativ folosind
adresa datei este mai mare fa de cazul n care accesul n tabela LVPT
se face cu adresa instruciunii, aspect observat i la vecintatea valorii
instruciunilor de tip Load i este n concordan cu rezultatele altor
cercettori [Cal99b]. Din punct de vedere al timing-ului ctigul nu este la
fel de pronunat ntruct valoarea prezis va fi naintat instruciunilor
dependente aflate n ateptare mai trziu (cu unul sau dou nivele n
structura pipeline) dect n cazul utilizrii adresei instruciunii, care se
cunoate nc de la nceputul fazei de aducere IF.
Urmtoarea figur (figura 7.27) arat cum este influenat acurateea
prediciei de tipul tabelei, care poate fi mapat direct sau asociativ i de
tipul adresei care indexeaz tabela de predicie (adresa instruciunii sau
adresa datei).

21,85
45,73
32,00
53,47
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
h
y
d
r
o
2
d
a
p
s
i
c
o
m
p
r
e
s
s
i
j
p
e
g
s
w
i
m
t
o
m
c
a
t
v
w
a
v
e
5
s
u
2
c
o
r
f
p
p
p
p
p
e
r
l
c
c
1
A
v
e
r
a
g
e
SPC'95 Benchmarks
A
c
u
r
a
t
e
t
e
a

P
r
e
d
i
c
t
i
e
i

[
%
]
Adr. instr., tabel mapat direct
Adr. instr., tabel asociativ
Adr. datei, tabel mapat direct
Adr. datei, tabel asociativ

Figura 7.27. Acurateea prediciei utiliznd o tabel optim din punct de vedere a
capacitii sale - 512 intrri n funcie de tipul tabelei LVPT instruciuni Load
Se observ (n medie) superioritatea acurateii de predicie n cazul
folosirii unei tabele de predicie (LVPT) asociativ fa de una mapat direct
(45.73% - indexare cu PC, respectiv 53.47% - indexare cu adresa datei vs.
21.85% - indexare cu PC, respectiv 32.00% - indexare cu adresa datei).
Acest fapt se datoreaz fenomenului de interferen care apare n cazul
tabelelor mapate direct. Conform concluziei stabilite la studiul localitii n
funcie de strategia de indexare a tabelelor (PC vs. DataAddress) - vezi
figura 7.23 - rezultatele sunt similare i din punct de vedere al acurateii de
predicie (acurateea de predicie prin indexarea LVPT cu PC mai mic
dect cea obinut prin indexarea LVPT cu DataAddress). Rezultatele
obinute sunt n concordan cu cele obinute de Lipasti [Lip96] care

350 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
considernd c se memoreaz ultima valoare produs de ctre o anumit
instruciune a obinut o acuratee de predicie (medie aritmetic) de 49%. De
asemenea, din cercetrile lui Lipasti rezult c, memornd ultimele 4 valori
produse de ctre o anumit instruciune i c abilitatea predictorului de a
alege valoarea corect este perfect, acurateea de predicie medie este de
61%. ntruct localitatea medie obinut prin simulare, avnd o istorie de 4
valori este de 67.66% rezult o diferen relativ mare ntre predicie i
localitate. Este posibil ca aceast diferen s fie datorat i faptului c att
eu ct i Lipasti am forat puin n obinerea localitii, prin pstrarea n
istoria de valori aferente unei instruciuni doar a valorilor distincte,
care pot apare nu neaprat la fiecare instan a respectivei instruciuni
(abordare propus de Lipasti).
Astfel, n continuare am efectuat simulrile privind localitatea dar n
lista de valori rezutate pentru o anumit instruciune am pstrat ultimele
history valori, indiferent dac unele dintre acestea s-au repetat
(nedistincte). Localitatea valorilor obinut pentru ultimele history
instane ale aceleiai instruciuni Load statice dei inferioar cazului n
care s-au luat n calcul ultimele history valori distincte generate de
aceeai instruciune Load static, este mai realist.

- history = 8 -
68,85%
70,92%
80,98%
83,17%
0%
20%
40%
60%
80%
100%
A
p
p
l
u
A
p
s
i
C
c
1
C
o
m
p
r
e
s
s
G
o
H
i
d
r
o
2
d
J
p
e
g
L
i
P
e
r
l
S
u
2
c
o
r
S
w
i
m
T
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 Benchmarks
L
o
c
a
l
i
t
a
t
e
a

V
a
l
o
r
i
i
Ultimele history Instante
(nedistincte) - PC
Ultimele history Instante
(distincte) - PC
Ultimele history Instante
(nedistincte) - AdresaDatei
Ultimele history Instante
(distincte) - AdresaDatei
Figura 7.28. Studiu comparativ privind localitatea valorii pentru instruciuni de tip
Load n condiiile unei istorii considerate optim
Se poate stabili practic o corelaie ntre acurateea prediciei valorilor
obinut cu o schem de tip Last Value (LVPT) i acest tip de localitate
(figura 7.27 vs. figura 7.28). De fapt, structura LVPT (sau alta) va stabili o
predicie pentru fiecare instruciune Load, indiferent dac se va genera o
valoare identic sau nu fa de cele precedente. Dup cum se observ n
figura 7.29, fr nici o excepie curba acurateii de predicie modeleaz
curba localitii valorilor (cazul ultimelor history instane).

Rezultate obinute prin simulare. Interpretri 351
Corelatia dintre localitate si predictie
- history=1; schema de predictie Last Value -
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
A
p
p
l
u
A
p
s
i
C
c
1
C
o
m
p
r
e
s
s
G
o
H
i
d
r
o
2
d
I
j
p
e
g
L
i
P
e
r
l
S
u
2
c
o
r
S
w
i
m
T
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 Benchmarks
Y
Yi - Localitate Distincta
Yj - Localitate Nedistincta
Yk - Acuratetea Predictiei

Figura 7.29. Determinarea gradului de corelaie dintre localitatea valorii pentru
instruciunile de tip Load i acurateea prediciei determinat cu o structur de tip
LastValue infinit ca i capacitate
Pentru determinarea gradului de corelaie existent ntre localitatea
valorii aferent instruciunilor Load i acurateea prediciei obinut cu o
structur de tip LastValue infinit ca i capacitate au fost introduse dou
metrici (M
1
=(y
i
- y
k
)
2
i M
2
=(y
j
- y
k
)
2
) conform celor dou abordri
prezentate (Lipasti vs. proprie), unde y
i
, y
k
i y
j
au semnificaia din figura
7.29. Acestea reprezint distana Hamming dintre gradul de localitate
respectiv acurateea de predicie obinute pe fiecare din benchmark-urile
SPEC'95 (mai puin perl care are un comportament ciudat). Dei diferenele
dintre M
1
(0.0697) i M
2
(0.0650) sunt foarte mici, valoarea cea mai
apropiat de zero este a lui M
2
, genernd concluzia c, curba acurateii de
predicie este modelat mai bine de curba localitii valorilor aferent
ultimelor instane (chiar i nedistincte) de instruciuni Load. Diferena
redus ntre cele dou metrici se datoreaz condiiilor problemei - history =
1 (pentru localitate) i predictor fr istorie (LastValue). O generalizare a
acestei probleme de corelaie (history>1) poate fi fcut doar n condiiile
utilizrii unui alt tip de predictor (predictoare cu istorie: incrementale,
contextuale, PPM complet). Dup cum se observ n figura 7.28 cu ct
parametrul history este mai mare este de ateptat ca diferena dintre M
1
i
M
2
s se accentueze.
Experimentele anterioare le-am repetat i pe benchmark-urile
Stanford. Dei geneza benchmark-urilor Stanford [Col93] a avut loc mult
mai devreme dect cea a programelor de test SPEC'95, iar numrul

352 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
instruciunilor dinamice este foarte mic (ntr-un singur caz peste 1.000.000)
i cu toate c aria de aplicabilitate a primelor nu se extinde i la aplicaiile
grafice i multimedia, rutine critice ale sistemelor de operare, arhivatoare,
compilatoare etc, din punct de vedere al localitii valorilor procentajul
obinut pe testele Stanford (prin msurtori centrate att pe productor -
instruciune ct i pe memorie) este similar cu cel al benchmark-urilor
SPEC'95. Folosirea structurilor de date regulate (tablouri uni i
bidimensionale) favorizeaz obinerea de grade de localitate de peste 80% n
medie armonic atunci cnd se folosete adresa datei.
O alt investigaie realizat a urmrit determinarea dimensiunii optime
a tabelei de predicie LastValue n cazul instruciunilor aritmetico-logice
(vezi figura 7.30).

21,59
4,56
25,76
29,66
33,83
0
10
20
30
40
50
60
70
a
p
p
l
u
a
p
s
i
c
c
1
c
o
m
p
r
e
s
s
f
p
p
p
p
g
o
h
y
d
r
o
2
d
i
j
p
e
g l
i
p
e
r
l
s
u
2
c
o
r
t
o
m
c
a
t
v
A
v
e
r
a
g
e
SPEC'95 Benchmarks
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
aluvpt=64
aluvpt=128
aluvpt=256
aluvpt=512

Figura 7.30. Acurateea prediciei instruciunilor de tip Aritmetico-Logic utiliznd
o tabel asociativ n funcie de dimensiunea tabeleiALUVPT
Rezultatele destul de modeste att n cazul instruciunilor Load
(45.73%) dar mai ales ALU (33.83%), impun implementarea unor
predictoare care folosesc n predicie istoria valorilor. Investigaiile
urmtoare se refer doar la instruciunile de tip Load. Figura 7.31 reprezint
acurateea prediciei n cazul folosirii predictorului incremental. Consecin
imediat la gradul superior de localitate pe care adresele de date le au fa de
cele de instruciuni, predicia este mai bun n cazul unui predictor ce
folosete ca index adresa datei. Din pcate i timpul de predicie va fi n
acest caz mai mare.


Rezultate obinute prin simulare. Interpretri 353
57,35
49,83
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
h
y
d
r
o
2
d
a
p
s
i
c
o
m
p
r
e
s
s
i
j
p
e
g
s
w
i
m
t
o
m
c
a
t
v
w
a
v
e
5
s
u
2
c
o
r
f
p
p
p
p
p
e
r
l
c
c
1
A
v
e
r
a
g
e
SPEC'95 benchmarks
A
c
u
r
a
t
e

e
a

p
r
e
d
i
c

i
e
i

[
%
]
Adr. datei
Adr. instr.

Figura 7.31. Acurateea prediciei pentru predictorul incremental
Se va analiza n cele ce urmeaz influena dimensiunii contextului
asupra prediciei n cazul predictoarelor contextuale de tip PPM. n
continuare se va folosi o istorie de 256 de valori.

Ap=f(pattern)
60,03
61,65
60,69
60,21
0
20
40
60
80
100
a
p
p
l
u
h
y
d
r
o
2
d
a
p
s
i
c
o
m
p
r
e
s
s
i
j
p
e
g
s
w
i
m
t
o
m
c
a
t
v
w
a
v
e
5
s
u
2
c
o
r
f
p
p
p
p
p
e
r
l
c
c
1
A
v
e
r
a
g
e
SPEC'95 benchmarks
A
c
u
r
a
t
e
t
e
a

p
r
e
d
i
c
t
i
e
i

[
%
]
pattern 1
pattern 4
pattern 8
pattern 12

Figura 7.32. Acurateea prediciei utiliznd predictorul contextual i adresa
instruciunii
Deoarece predictoarele PPM complete sunt dificil i costisitor de
implementat n hardware, urmeaz s se studieze comportamentul unui
predictor contextual de tip PPM simplificat, care s conin doar dou
predictoare Markov: unul de ordinul (N) i altul de ordinul 0. Astfel dac
predictorul Markov de ordinul (N) nu produce o predicie (contextul nu este

354 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
gsit n secvena de valori) se activeaz predictorul Markov de ordinul (0),
unde N reprezint dimensiunea contextului.
Analog cu cazul salturilor indirecte, pe baza figurii 7.33 i n urma
altor simulri efectuate care au vizat structuri de predicie PPM complet
indexate cu adresa datei a rezultat c dimensiunea optim a contextului
(ferestrei de cutare n irul celor 256 de valori memorate pt. fiecare Load
din VHT) este 4. Dei dup cum s-ar putea crede un context mai bogat poate
conduce la o acuratee mai ridicat a prediciei, simulrile arat c ncepnd
cu o anumit dimensiune a contextului, acesta se comport ca zgomot i,
acurateea ncepe s scad. Dimensiunea tabelei de predicie este de 512
locaii, dovedit optim pentru predictoarele LastValue.
Se va studia n continuare influena dimensiunii contextului asupra
prediciei n cazul predictoarelor hibride (vezi schema acestora din figura
2.17, subcapitolul 2.2.4).

63,33
64,95
64,01
63,55
0
10
20
30
40
50
60
70
80
90
100
a
p
p
l
u
h
y
d
r
o
2
d
a
p
s
i
c
o
m
p
r
e
s
s
i
j
p
e
g
s
w
i
m
t
o
m
c
a
t
v
w
a
v
e
5
s
u
2
c
o
r
f
p
p
p
p
p
e
r
l
c
c
1
A
v
e
r
a
g
e
SPEC'95 Benchmarks
A
c
u
r
a
t
e

e
a

p
r
e
d
i
c

i
e
i

[
%
]
pattern 1
pattern 4
pattern 8
pattern 12

Figura 7.33. Acurateea prediciei utiliznd predictorul hibrid i adresa
instruciunii
La fel ca i n cazul predictorului contextual, din figura 7.33 reiese c
dimensiunea optim a ferestrei curente de cutare pentru predictorul hibrid
este 4. n urma simulrilor realizate cu aplicaia ValuePredictor (descris n
subcapitolul 6.1) mbuntit cu modulul de calcul al timing-ului (vezi
subcapitolul 6.1.2), un predictor hibrid cu 128 de locaii, o istorie de 8 valori
i un pattern de 4, genereaz o acuratee medie de predicie de 53% i un

Rezultate obinute prin simulare. Interpretri 355
ctig mediu de performan de 28.87%, fa de o arhitectur standard de
procesare care nu nglobeaz predicia valorilor.
n figura urmtoare (7.34) se compar cele patru tehnici de predicie
utilizate: predicie last value, predicie incremental, contextual i
respectiv hibrid.

45,73
49,83
61,65
64,95
0
20
40
60
80
100
a
p
p
l
u
h
y
d
r
o
2
d
a
p
s
i
c
o
m
p
r
e
s
s
i
j
p
e
g
s
w
i
m
t
o
m
c
a
t
v
w
a
v
e
5
s
u
2
c
o
r
f
p
p
p
p
p
e
r
l
c
c
1
A
v
e
r
a
g
e
SPEC'95 Benchmarks
A
c
u
r
a
t
e

e
a

p
r
e
d
i
c

i
e
i

[
%
]
Last value
Incremental
Contextual
Hibrid

Figura 7.34. Compararea celor patru tehnici de predicie pentru adresa instruciunii
Se poate observa sinergismul predictorului hibrid, cu acesta
obinndu-se cele mai bune rezultate, procentajul mediu al valorilor prezise
corect fiind de 65% n cazul utilizrii adresei instruciunii i respectiv de
69% n cazul n care s-a folosit adresa datei (nu s-a mai prezentat graficul n
extenso pentru cel de-al doilea caz).
n tabelul urmtor (7.12) se prezint creterea relativ a performanei
obinut cu predictorul incremental, contextual i cel hibrid fa de
predictorul de tip last value.

Predictor Predicie cu adresa instruciunii Predicie cu adresa datei
Incremental 4.1 % 3.89 %
Contextual 15.92 % 12.36 %
Hibrid 19.21 % 15.61 %
Tabelul 7.12. Creteri de performan obinute cu cele trei predictoare fa de
predictorul de tip last value
Se poate observa, c adunnd creterea adus de predictorul
incremental cu creterea adus de predictorul contextual, se obine o valoare
mai mare dect creterea adus de predictorul hibrid, indiferent de tipul
adresei utilizate. Acest lucru se poate datora i faptului c predictorul hibrid
implementat acord ntotdeauna prioritate predictorului contextual, cel
incremental fiind folosit doar atunci cnd acesta nu poate genera o predicie.
O posibil soluie pentru eliminarea acestei rigiditi n selecia

356 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
predictorului component ar fi s se implementeze un mecanism de
metapredicie bazat pe confiden. n principiu, va avea prioritate
predictorul al crei confiden este mai mare, la un moment dat. n
subcapitolul 7.3.2 este implementat o astfel de arhitectur referitoare la
predicia valorilor centrat pe regitrii procesorului. Toate aceste
experimente au ca scop obinerea unei acuratei de predicie a valorii
resurselor ct mai ridicat, i implicit o performan global de procesare
mai mare.
7.3. PREDICIA VALORILOR REGITRILOR CPU.
7.3.1. REZULTATE BAZATE PE PREDICTOARELE DE
VALORI: INCREMENTAL, CONTEXTUAL I HIBRID CU
PRIORITIZARE STATIC.
O evaluare original, prezentat iniial n [Flor02] pune n eviden
conceptul de localitate a valorilor asociate regitrilor generali afereni
procesorului (MIPS). Figurile 7.35 i respectiv 7.36 evideniaz c
localitatea valorii pe anumii regitri speciali ai arhitecturii MIPS este
remarcabil (cca. 90%), conducnd n mod evident la ideea prediciei
valorilor cel puin pentru aceti regitri. La baza acestor afirmaii stau
caracteristicile setului de regitri generali ai procesorului MIPS (vezi
subcapitolul 6.2). Evalurile realizate se bazeaz pe rezultatele colectate n
urma simulrilor a celor dou versiuni de benchmark-uri SPEC: 5 programe
de numere ntregi (li, go, perl, ijpeg, compress) i 3 flotante (swim, hydro,
wave5) din suita SPEC95 i respectiv 7 programe de numere ntregi (gzip,
b2zip, parser, crafty, gcc, twolf and mcf) din suita SPEC2000. Au fost
simulate benchmark-uri din cele dou suite pentru a compara
comportamentul acestora i pentru a stabili influena programelor de test
asupra caracteristicilor microarhitecturale ale predictoarelor de valori.


Rezultate obinute prin simulare. Interpretri 357
Value Locality on Registers = f(history)
47,21%
57,91%
66,83%
75,59%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
$
1
$
2
$
3
$
4
$
5
$
6
$
7
$
8
$
9
$
1
0
$
1
1
$
1
2
$
1
3
$
1
4
$
1
5
$
1
6
$
1
7
$
1
8
$
1
9
$
2
0
$
2
1
$
2
2
$
2
3
$
2
4
$
2
5
$
2
9
$
3
0
$
3
1
A
v
e
r
a
g
e
MIPS Registers
V
a
l
u
e

L
o
c
a
l
i
t
y

history_4
history_8
history_16
history_32

Figura 7.35. Localitatea valorilor pe regitri de uz general (ntregi) ai procesorului
MIPS (rezultatele simulrii a 500.000.000 instruciuni dinamice aferente
benchmark-urilor SPEC95)

Value Locality on Registers = f(history)
56,42
69,07
83,1586,55
0
20
40
60
80
100
$
1
$
2
$
3
$
4
$
5
$
6
$
7
$
8
$
9
$
1
0
$
1
1
$
1
2
$
1
3
$
1
4
$
1
5
$
1
6
$
1
7
$
1
8
$
1
9
$
2
0
$
2
1
$
2
2
$
2
3
$
2
4
$
2
5
$
2
9
$
3
0
$
3
1
A
v
e
r
a
g
e
MIPS Register
V
a
l
u
e

L
o
c
a
l
i
t
y

[
%
]
history_4
history_8
history_16
history_32

Figura 7.36. Localitatea valorilor pe regitri de uz general (ntregi) ai procesorului
MIPS (rezultatele simulrii a 500.000.000 instruciuni dinamice aferente
benchmark-urilor SPEC2000)
Pornind de la rezultatele extrem de promitoare privind localitatea
valorii pe regitrii procesorului MIPS, problema prediciei valorilor la
nivelul instruciunilor a fost extins i la alte tipuri de resurse [Vin05]. n
investigaia fcut am examinat o selecie a regitrilor favorabili i
predictoare diferite de valori pentru a capta anumite tipuri de predictibilitate
existente n programele de calcul. Pentru selectarea regitrilor care exprim
cele mai bune rezulate din punct de vedere al acurateii de predicie (peste
60%, respectiv peste 80%) s-a folosit un predictor dovedit optim (n cazul
instruciunilor Load) i anume cel hibrid alctuit dintr-unul incremental i
unul contextual (vezi subcapitolul 2.2.2.4), pstrnd un context de 256

358 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
valori i un pattern de 4, atunci cnd n predicie se alege varianta
contextual.
Ca i metric n acest caz, prin acurateea de predicie se nelege
raportul dintre numrul de cazuri n care valoarea prezis a registrului
destinaie a unei instruciuni, a fost identic cu cea rezultat n urma
execuiei, i totalul de situaii n care respectivul registru a fost utilizat ca i
destinaie (vezi ecuaia 6.2 din subcapitolul 6.2.1). Fiecare coloan din
figurile 7.37 i 7.38 constituie media aritmetic pentru fiecare registru n
parte a acurateii de predicie pe cele 8 benchmark-uri SPEC95 amintite
anterior i respectiv pe cele 7 benchmark-uri SPEC2000. ntruct regitrii
$0, $26, $27 au funcii dedicate, i analiznd explicaiile din subcapitolul
6.2 referitoare la regitrii procesorului MIPS este de neles faptul c
acurateea de predicie pe aceti regitri este 0.

PA[%] - SPEC'95
68,38
15,84
40,83
51,88
72,22
56,42
72,80
62,69
74,43
99,22
85,38
78,05
73,06
53,61
73,69
17,71
34,13
81,92
70,68
67,67
16,03
68,80
55,03
49,66
23,47
89,23
92,55
78,07
0
10
20
30
40
50
60
70
80
90
100
r
1
r
2
r
3
r
4
r
5
r
6
r
7
r
8
r
9
r
1
0
r
1
1
r
1
2
r
1
3
r
1
4
r
1
5
r
1
6
r
1
7
r
1
8
r
1
9
r
2
0
r
2
1
r
2
2
r
2
3
r
2
4
r
2
5
r
2
9
r
3
0
r
3
1
MIPS Registers
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
Figura 7.37. Acurateea prediciei valorilor pe regitrii procesorului MIPS
folosind un predictor hibrid (rezultatele simulrii a 500.000.000 instruciuni
dinamice aferente benchmark-urilor SPEC95)

PA[%] - SPEC2000
71,78
7,00
12,04
20,08
45,37
68,31
65,99
79,64
27,79
75,82
97,27 98,32
83,66
94,52
65,68
53,28
62,81
76,91
78,17
94,66
88,82
85,99
100,00
96,75
62,53
66,97
79,15 96,75
0
10
20
30
40
50
60
70
80
90
100
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r29 r30 r31
MIPS Registers
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y
[
%
]
Figura 7.38. Acurateea prediciei valorilor pe regitrii procesorului MIPS folosind
un predictor hibrid (rezultatele simulrii a 500.000.000 instruciuni dinamice
aferente benchmark-urilor SPEC2000)

Rezultate obinute prin simulare. Interpretri 359
Urmtoarele investigaii s-au concentrat asupra regitrilor favorabili,
avnd acurateea prediciei mai mare dect pragul impus de (60% respectiv
80%), conform statisticilor din figurile 7.37 i 7.38. Dup cum se poate
observa regitrii cu acuratee mai mare de 60% sunt: 1, 5, 713, 15, 1820,
22, 2931 pe suita SPEC95, i respectiv, 1, 68, 1016, 1825, 2931 pe
testele SPEC2000. Gradul de utilizare
(nr_total_de_scrieri_n_reg_destinaie / nr_total_de_instruciuni_simulate)
al celor mai semnificativi regitri n numr de 17 pe benchmark-urile
SPEC95 este de 19.36%, rezultat ce arat c doar respectivul procentaj din
instruciuni au ca destinaie cei 17 regitri. Rezultatul echivalent pe
benchmark-urile SPEC2000 exprim un grad de utilizare de 13.24% al celor
22 regitrii de uz general selectai.
Rezultatele, extrem de interesante i n concordan cu cele de la
msurarea localitii, au determinat studierea comparativ a acurateii de
predicie n funcie de schemele de predicie descrise n subcapitolul 6.2.1
(LastValue, Incremental, Contextual, Hibrid) pentru cei mai predictibili
dintre regitri (vezi figurile 7.39 i 7.40). Predictorul contextual i cel hibrid
folosesc o istorie de 256 de valori i un pattern de cutare de 4 valori.

PA(60)
8.59%
18.65%
71.19%
78.25%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
c
o
m
p
r
e
s
s
9
5
h
y
d
r
o
2
d
i
j
p
e
g
p
e
r
l
s
w
i
m
w
a
v
e
5 l
i
g
o
A
v
e
r
a
g
e
SPEC'95 benchmarks - 500.000.000 instructiuni
executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
LastValue
Stride
Contextual
Hybrid

Figura 7.39. Compararea celor patru tehnici de predicie pentru cei mai predictibili
(17) regitri ai procesorului MIPS


360 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
PA(60)
11.46%
20.40%
62.84%
72.93%
0%
20%
40%
60%
80%
100%
B
z
i
p
g
z
i
p
c
c
1
c
r
a
f
t
y
m
c
f
p
a
r
s
e
r
t
w
o
l
f
A
v
e
r
a
g
e
SPEC2000 benchmarks - 500.000.000 instructiuni
executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
LastValue
Stride
Contextual
Hibrid

Figura 7.40. Compararea celor patru tehnici de predicie pentru cei mai predictibili
(22) regitri ai procesorului MIPS
Rezultatele bazate pe simulare ntresc convingerea c un predictor
hibrid (contextual + incremental) genereaz cea mai mare acuratee de
predicie n medie pe cei 17 regitrii favorabili selectai n cazul testelor
SPEC95 de 78.25%, i echivalent pe cei 22 regitri selectai n cazul
benchmark-urilor SPEC2000 de 72.93%.
n continuare se ncearc o selecie mai elitist considernd doar
regitrii care au dovedit o acuratee de predicie mai mare de 80% (vezi
figurile7.41 i 7.42). Selecia se bazeaz din nou pe rezultatele grafice
exprimate n figurile 7.37 i 7.38. Sunt 8 regitri care respect aceast
condiie: 1, 1012, 18, 2931 pe suita SPEC95 i respectiv 16 din
benchmark-urile SPEC2000: 1, 8, 1115, 2025, 2931. Regitrii 1, 2931
sunt inclui n aceast statistic chiar dac nu satisfac condiia impus
deoarece ei ndeplinesc i unele funcii speciale [Flo03] iar gradul de
localitate exprimat de acetia este semnificativ (peste 80%) dup cum poate
fi observat n figura 7.36. Gradul de utilizare al acestor regitri este de
aceast dat de doar 10.58% pe benchmark-urile SPEC95, i respectiv
9.01% pe SPEC2000.


Rezultate obinute prin simulare. Interpretri 361
PA(80)
8.43%
17.48%
77.04%
85.44%
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
c
o
m
p
r
e
s
s
9
5
h
y
d
r
o
2
d
i
j
p
e
g
p
e
r
l
s
w
i
m
w
a
v
e
5 l
i
g
o
A
v
e
r
a
g
e
SPEC'95 benchmarks - 500.000.000 instructiuni
executate
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
LastValue
Stride
Contextual
Hybrid

Figura 7.41. Acurateea prediciei folosind cei 8 regitri favorabili selectai din
testele SPEC 95

PA (80)
12.37%
19.72%
70.24%
73.52%
0%
20%
40%
60%
80%
100%
b
z
i
p
g
z
i
p
c
c
1
c
r
a
f
t
y
m
c
f
p
a
r
s
e
r
t
w
o
l
f
A
v
e
r
a
g
e
SPEC2000 benchmarks
P
r
e
d
i
c
t
i
o
n

a
c
c
u
r
a
c
y

[
%
]
LastValue
Stride
Contextual
Hibrid

Figura 7.42. Acurateea prediciei folosind cei 16 regitri favorabili selectai din
testele SPEC 2000

n figurile 7.41 i 7.42 fiecare coloan reprezint acurateea prediciei
pe regitrii favorabili dintr-un anumit benchmark, msurat ca i raport

362 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
dintre numrul prediciilor corecte pentru oricare din regitrii favorabili i
numrul situaiilor n care respectivii regitri au fost folosii ca destinaie.
Rezultatele schemei incrementale sunt mai mult dect modeste i uor
mai bune dect cele oferite de predictorul last value. Se observ eficiena
schemei hibride de predicie (85.44% - n medie aritmetic, ajungnd n
unele cazuri particulare la acuratei remarcabile de peste 96%).
Superioritatea fa de celelalte trei scheme este explicabil dac inem cont
c predictorul hibrid implementat acord ntotdeauna prioritate predictorului
contextual, cel incremental fiind folosit doar atunci cnd acesta nu poate
genera o predicie. Evident, soluia este lipsit de flexibilitate. O posibil
soluie mai bun pentru rezolvarea acestei probleme ar fi s se
implementeze dou automate n fiecare locaie a tabelei de predicie, unul
pentru predictorul incremental i nc unul pentru cel contextual. Va avea
prioritate predictorul al crui numrtor asociat (grad de ncredere) are
valoarea mai mare, la un moment dat. n cazul n care cele dou valori sunt
egale, predictorului contextual i se acord prioritate. Rezultate privitoare la
soluii adaptive de prioritizare n scheme hibride de predicia valorilor
centrat pe contextul CPU se regsesc n subcapitolul 7.3.2.
Urmtoarele dou figuri (7.43 i 7.44) evideniaz speed-up-ul obinut
de o microarhitectur speculativ care nglobeaz predictoarele de valori
centrate pe contextul CPU descrise n subcapitolul 6.2.1.comparativ cu un
procesor superscalar generic. Modelul de timing utilizat n simulare este cel
prezentat n paragraful 6.1.2. Cantitativ acest ctig este de 17.30% pe suita
SPEC95, i respectiv de 13.58% pe SPEC2000.

Speedup over baseline machine
1,47
3,38
15,58
17,30
0
5
10
15
20
25
30
35
c
o
m
p
r
e
s
s
9
5
i
j
p
e
g
p
e
r
l
l
i
g
o
A
v
e
r
a
g
e
SPEC'95 benchmarks - 500.000.000 de instructiuni
executate
[
%
]
LastValue
Stride
Contextual
Hibrid

Figura 7.43. Speedup-ul obinut fa de o arhitectur generic folosind predictoare
de valori pe cei 8 regitri favorabili (SPEC95)

Rezultate obinute prin simulare. Interpretri 363

Speedup over baseline machine
3,80
6,33
11,14
13,58
0
5
10
15
20
25
b
z
i
p
2
c
r
a
f
t
y
c
c
1
g
z
i
p
m
c
f
p
a
r
s
e
r
t
w
o
l
f
A
v
e
r
a
g
e
SPEC 2000 benchmarks
[
%
]
LastValue
Stride
Contextual
Hibrid

Figura 7.44. Speedup-ul obinut fa de o arhitectur generic folosind predictoare
de valori pe cei 16 regitri favorabili (SPEC2000)
Interesant de remarcat corelnd figura 7.42 cu figura 7.44, o diferen
de doar 3% ntre acurateea predictorului hibrid fa de cel contextual
conduce la o cretere a speedup-ului cu nc 2.44%.
7.3.2. EVALUAREA PREDICIEI NEURONALE APLICAT
REGITRILOR PROCESORULUI.
n aceast subseciune toate simulrile au fost efectuate pe 5.000.000
de instruciuni dinamice aferente benchmark-urilor SPEC95. n
experimentele urmtoare pe lng acurateea prediciei s-a mai considerat o
metric numit confiden (sau acuratee de predicie local) care reprezint
numrul de valori corect predicionate aferente unui anumit registru (R
i
)
cnd predictorul su ataat se afl ntr-o stare predictibil.
Pentru nceput a fost evaluat acurateea prediciei metapredictorului
non-adaptiv empiric (vezi figura 6.8) n funcie de pragul impus (numrul
minim de comportamente favorabile ntlnite ntr-o istorie dat). S-a
considerat lungimea vectorului de istorie k=3.


364 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
72,45
68,93
65,10
0
10
20
30
40
50
60
70
80
90
100
R
1
R
7
R
1
7
R
2
0
R
2
1
R
2
2
R
2
3
R
2
9
R
3
0
R
3
1
A
v
e
r
a
g
e
MIPS Registers
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
Threshold=1
Threshold=2
Threshold=3

Figura 7.45. Metapredictor non-adaptiv empiric: acurateea prediciei pentru
diferite praguri

90,15
94,57
100,00
0
10
20
30
40
50
60
70
80
90
100
R
1
R
7
R
1
7
R
2
0
R
2
1
R
2
2
R
2
3
R
2
9
R
3
0
R
3
1
A
v
e
r
a
g
e
MIPS Regi ster s
C
o
n
f
i
d
e
n
c
e

[
%
]
Threshold=1
Threshold=2
Threshold=3

Figura 7.46. Metapredictor non-adaptiv empiric: confidena pentru diferite praguri
Statisticile urmtoare se refer la metapredictorul static, non-adaptiv
bazat pe automate de confiden cu 4 stri.


Rezultate obinute prin simulare. Interpretri 365
69,82
68,11
0
10
20
30
40
50
60
70
80
90
100
R
1
R
7
R
1
7
R
2
0
R
2
1
R
2
2
R
2
3
R
2
9
R
3
0
R
3
1
A
v
e
r
a
g
e
MIPS Regi st er s
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
Threshold
=2 states
Threshold
=1 state

Figura 7.47. Acurateea prediciei msurat pentru diferite praguri (predicia ntr-
una sau 2 stri predictibile) folosind un metapredictor bazat pe automate


94,70
100,00
84
86
88
90
92
94
96
98
100
R
1
R
7
R
1
7
R
2
0
R
2
1
R
2
2
R
2
3
R
2
9
R
3
0
R
3
1
A
v
e
r
a
g
e
MIPS Regi s t er s
C
o
n
f
i
d
e
n
c
e

[
%
]
Threshold=2 states
Threshold=1 state

Figura 7.48. Confidena msurat pentru diferite praguri (predicia ntr-una sau 2
stri predictibile) folosind un metapredictor bazat pe automate
Ultima structur de metapredicie este adaptiv, bazat pe o reea
neural de tip feed-forward (MultiLayerPerceptron) cu algoritm de nvare
back-propagation. S-a considerat o istorie a comportamentelor fiecrui
predictor component pe k=3 bii, fapt ce conduce la un nivel de intrare n
reeaua neural de 3k=9 bii.


366 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
71,59
68,60
59,01
0
10
20
30
40
50
60
70
80
90
100
R
1
R
7
R
1
7
R
2
0
R
2
1
R
2
2
R
2
3
R
2
9
R
3
0
R
3
1
A
v
e
r
a
g
e
MIPS Registers
P
r
e
d
i
c
t
i
o
n

A
c
c
u
r
a
c
y

[
%
]
Threshold=0.1
Threshold=0.5
Threshold=0.9

Figura 7.49. Acurateea prediciei generat de un metapredictor neural pentru
praguri diferite

84,78
91,41
95,85
0
10
20
30
40
50
60
70
80
90
100
R
1
R
7
R
1
7
R
2
0
R
2
1
R
2
2
R
2
3
R
2
9
R
3
0
R
3
1
A
v
e
r
a
g
e
MIPS Registers
C
o
n
f
i
d
e
n
c
e

[
%
]
Threshold=0.1
Threshold=0.5
Threshold=0.9

Figura 7.50. Confidena asigurat de metapredictorul neural pentru diferite
praguri
Din statisticile anterior exprimate (figurile 7.45 7.50) se observ c,
pentru fiecare metapredictor, cu ct pragul crete (procesul de selecie
devine mai elitist) acurateea global de predicie scade iar confidena crete
spre 100%. Practic, probabilitatea ca predicia local generat de o stare
ridicat de confiden s fie corect crete semnificativ prin reducerea
cazurilor cnd strucutra efectueaz o predicie. Judecnd din punct de
vedere strict al confidenei, se observ c metapredictorul non-adaptiv bazat

Rezultate obinute prin simulare. Interpretri 367

pe automate, care prezice doar n starea "puternic predictibil" este optim.
Acurateea global de predicie este de 68.11% cu o ncredere absolut
de 100%.
Un ultim experiment realizat a urmrit determinarea istoriei optime
care trebuie considerat n procesul de metaprediciie. Pentru un proces de
predicie mai puin selectiv (threshold = 0.1) se observ c prin reinerea
ultimelor trei comportamente aferente fiecrui predictor component se obin
rezultate optime (Ap(k=1)=71.83% vs. Ap(k=3)=71.59%, respectiv
Confidena(k=1)=83.49% vs. Confidena(k=3)=84.78%).
innd cont de rezultatele experimentale anterioare, tabelul urmtor
exprim urmtoarea concluzie interesant: n ciuda unei acuratei globale
de predicie destul de reduse (72.45% n medie aritmetic pe toi regitrii
favorabili) exist anumii regitri (R
1
, R
22
, R
29
i R
31
), cu acuratei de
predicie de peste 90%. Ctigul n acuratee obinut pe aceti regitri
fa de predictorul hibrid cu prioritizare fix, dovedit optim n
subcapitolul 7.3.1, este de 2.27%.

Acurateea prediciei pe anumii regitri ai procesorului

Numrul
registrului
Metapredictor
bazat pe
automat
(threshold=1
stare)
Metapredictor
non-adaptiv
empiric
(threshold = 1)
Metapredictor
neural
(threshold=0)
Predictor
hibrid cu
prioritizare
fix
1 89.034 89.028 88.999 86.81
22 85.477 85.647 84.146 81.43
29 95.289 95.287 95.284 94.74
31 95.642 95.643 95.599 94.48
Average 91.3605 91.4012 91.007 89.365
Ctigul de
acuratee
obinut vis a vis
de predictorul
hibrid cu
prioritizare fix
[%] 2.23 2.27 1.83
Tabelul 7.13. Acurateea prediciei pe cei mai predictibili 4 regitri ai procesorului


8. CONCLUZII I CONTRIBUII ORIGINALE.
DEZVOLTRI ULTERIOARE
n acest capitol sunt trecute n revist contribuiile tiinifice ale
acestei lucrri, este evideniat ctigul cantitativ al fiecrei tehnici introduse
i sunt realizate comparaii ntre aceste tehnici.
Performana ridicat a microprocesoarelor moderne se datoreaz
execuiei n paralel a ct mai multor instruciuni respectiv microfire de
execuie independente. ntruct exist o varietate de factori care limiteaz
paralelismul la nivelul instruciunilor (ILP), n ultima perioad au fost
propuse i testate o serie de tehnici ne-speculative (reutilizarea dinamic a
instruciunilor) respectiv speculative (predicia dinamic a ramificaiilor de
program i predicia valorilor centrat pe diverse tipuri de resurse) pentru
depirea acestor limitri. n cadrul acestei lucrri s-a propus o abordare
integratoare hardware-software cu scopul creterii performanei
procesoarelor cu paralelism la nivelul instruciunilor, urmat n mod natural
de o serie de tehnici predictive i speculative referitoare la predicia
salturilor / apelurilor indirecte i predicia valorilor resurselor (instruciuni
Load, ALU, adrese de memorie aferente instruciunilor Load i regitrii
procesorului).
O prim contribuie original ncearc s evidenieze falsa
discrepan modul diferit de abordare al celor dou "emisfere",
hardware i software, n care i desfoar activitatea cercettorii din
tiina calculatoarelor, pentru creterea performanei procesoarelor
moderne. Ideea c arhitectura procesoarelor interacioneaz "accidental" cu
domeniul software este complet greit, ntre hardware i software existnd
n realitate o simbioz i interdependen puternic, nc neexplorate
corespunztor. Procesoarele se proiecteaz odat cu compilatoarele care le
folosesc iar relaia dintre ele este foarte strns: benchmark-urile sunt
compilate pentru arhitectura respectiv iar compilatorul trebuie s
genereze cod care s exploateze caracteristicile arhitecturale, altfel
codul generat va fi ineficient. Datorit tendinelor manifestate n ultimii
ani, de trecere la medii vizuale i obiectuale de programare bazate pe
concepte avansate (motenire, polimorfism), aplicaiile obiectuale au
devenit o mare provocare att pentru comunitatea compilatoritilor ct
i pentru arhitecii de microprocesoare, mai ales c exist diferene
semnificative ntre caracteristicile programelor procedurale i cele ale
Concluzii i contribuii originale. Dezvoltri ulterioare 369
programelor obiectuale, cu implicaii i asupra performanelor acestor
programe (vitez de execuie, consum de memorie).
Prin intermediul unor programe de test, relativ simple, procedurale i
obiectuale, am artat c cele dou "emisfere" software i hardware sunt
doar n aparen disjuncte. Cele 2 programe obiectuale C++ i 3
procedurale C propuse evideniaz corpuri i construcii de program
procedurale i obiectuale care genereaz la nivelul codului obiect salturi /
apeluri indirecte. Pe baza rezultatelor obinute se desprind cteva concluzii
clare:
U Instruciunile de salt indirect apar mult mai frecvent n programele
obiectuale dect n cele procedurale.
U Prezena salturilor indirecte n programele procedurale se datoreaz
n principal urmtoarelor dou aspecte:
Apelurilor indirecte de funcii prin pointeri.
Construciilor de tip switch/case avnd anumite caracteristici.
U Un alt motiv care favorizeaz prezena salturilor indirecte n programe
l reprezint prezena funciilor de bibliotec (vezi cazul qsort
precum i alte biblioteci legate dinamic din cadrul aplicaiilor desktop
DLL).
U Legarea dinamic (late binding) realizat prin polimorfism (care
se bazeaz la rndul su pe conceptul de motenire) genereaz apeluri
indirecte de funcii n cazul programelor obiectuale (C++, Java,
Smaltalk).
n mod natural, cercetrile proprii au continuat cu realizarea de
statistici privind frecvena salturilor / apelurilor indirecte urmate de
implementarea unor scheme de predicie (o parte din ele originale)
dedicate acestui tip de instruciuni. Pentru raportarea n concordan cu
majoritatea cercettorilor n arhitecturi de calcul, investigaiile cantitative
privind gradele de localitate a valorii i determinarea acurateii prediciei s-
au bazat pe setul standardizat de instrumente SimpleScalar 3.0b, unanim
acceptat de cercettorii n arhitectura calculatoarelor. Evalurile
arhitecturilor propuse le-am efectuat folosind o serie de simulatoare
execution-driven dezvoltate din setul de instrumente SimpleScalar.
Simularea a fost realizat pe cele dou versiuni de benchmark-uri SPEC
(95 i 2000), precum i pe programele de test proprii.
O prim concluzie reliefeaz aportul crescut al salturilor /
apelurilor indirecte asupra costului global generat de prediciile greite
i respectiv necesitatea dezvoltrii de noi mecanisme de predicie
(structuri hibride, predictoare cascadate pe mai multe niveluri sau
adaptate din predicia valorilor) pentru predicia cu acuratee ridicat
a acestora. Practic lupta este extrem de aprig, la nivel de procent n

370 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
ncercarea de a prediciona cu acuratee salturile indirecte, n sensul c
fiecare ctig potenial (introdus de o nou tehnic sau mbuntiri aduse
structurii de predicie), orict de mic (1, 2%) trebuie exploatat. Performana
global a arhitecturilor este extrem de senzitiv la predicia salturilor
indirecte, ntruct, n ciuda frecvenei relativ reduse a acestora n
programele procedurale testate, o singur instruciune static de salt
indirect poate genera n momentul execuiei peste 6200 de instane
dinamice. Dificultatea prediciei se datoreaz dispersiei extrem de ridicate
a target-urilor unora dintre aceste instruciuni.
O concluzie desprins din analiza rezultatelor obinute subliniaz
asemnarea existent ntre problema prediciei valorilor i problema
prediciei adreselor destinaie aferente instruciunilor de salt indirect.
Pentru nceput a fost determinat gradul de localitate exprimat de
instruciunile de salt indirect n programele de uz general, ca o limit
ultimativ a acurateii de predicie obtenabile. Gradul ridicat de localitate
exprimat n medie de instruciunile de revenire din proceduri / funcii sunt n
corelaie cu gradul ridicat de localitate (90%) observat pe registrul $31
(return address register) al procesorului MIPS. De asemenea, localitatea
valorii obinut pe cele 5 programe proprii de test, extrem de ridicat
(92% - medie aritmetic) se datoreaz numrului redus de obiecte
(declarate individual i nu n cadrul unei structuri de date cu legturi -
tablouri sau liste) i metodelor aferente apelate recursiv.
Exploatarea gradului ridicat de localitate aferent instruciunilor de salt
indirect s-a realizat prin intermediul predictorului contextual de tip PPM
complet. Cu ajutorul acestuia s-a ncercat determinarea pattern-ului optim de
cutare, stabilirea corelaiei existente ntre salturi n funcie de context.
Acurateea de predicie maxim (91.58% superior rezultatelor
raportate de Chang [Cha97] pe schema TargetCache) se obine pentru un
pattern de cutare de 4, ndreptind i afirmaiile altor cercettori. Oarecum
firesc, creterea istoriei valorilor reinute implic o acuratee de
predicie mai mare prin creterea pattern-ului de cutare (se distinge o
corelaie ntre salt-uri mai ndeprtate dac contextul ar permite acest
lucru). Rezultatele ntresc afirmaia cercettorilor [Tho03] care susin
pstrarea i utilizarea unei istorii ct mai bogate n procesul de predicie
aferent instruciunilor de salt ntruct unele salturi corelate pot aprea la o
distan considerabil n irul de instruciuni dinamice. Procentajul mediu
al instruciunilor de salt indirect clasificate predictibile i predicionate
corect de ctre automatul de clasificare este destul de ridicat (9094%).
Se observ ns procentaje reduse (Unpred 27%) pentru salturile
clasificate nepredictibile i ntr-adevr predicionabile greit. Practic,

Concluzii i contribuii originale. Dezvoltri ulterioare 371
slbiciunea automatului propus const n faptul c este prea conservator, el
clasificnd ca nepredictibile multe instruciuni care sunt n realitate
predictibile.
Dificultatea implementrii n hardware a predictoarelor PPM complete
impun ns, ca etap viitoare de cercetare fie gsirea unor structuri mai
simple (vezi structura Target Cache modificat) dar cu rezultate echivalente
din punct de vedere al acurateii prediciei, fie analiza comportamentului
unui predictor contextual de tip PPM simplificat, care s conin doar dou
predictoare Markov: unul de ordinul (N) i altul de ordinul 0. Din simulrile
realizate pe programele proprii de test a rezultat ineficiena predictorului
PPM complet n cazul utilizrii de masive eterogene (de obiecte sau alte
structuri de date), situaie n care un predictor incremental se comport mult
mai bine. n schimb recursivitatea poate fi exploatat cu succes cu
ajutorul predictorului PPM complet.
Referitor la predictorul de tip TargetCache originar propus de
Chang [Cha97], acurateea maxim de predicie obinut (79.82%), a fost
inferioar rezultatelor generate de predictorul PPM complet, fapt ce a
condus la realizarea unor investigaii proprii pornind de la structura Target
Cache. O nou contribuie original a acestei lucrri a avut n vedere
mbuntirea acurateii prediciei aferente instruciunilor de salt
indirect prin modificri aduse structurii Target Cache. Pentru nceput a
fost studiat influena istoriei globale a salturilor condiionate asupra
prediciei. Pentru benchmark-urile cu o dispersie ridicat a target-urilor,
utilizarea istoriei globale a salturilor condiionate n indexarea Target
Cache-ului joac un rol important n creterea acurateii prediciei
salturilor indirecte (n medie cu pn la 16.93% iar n cazuri particulare
chiar i cu 45%). n medie aritmetic pe 7 benchmark-uri SPEC95,
acurateea optim de predicie se obine prin reinerea comportamentului
global al ultimelor 4 salturi condiionate. O critic general ce poate fi adus
schemelor de predicie adaptive corelate pe dou niveluri const n
faptul c folosesc insuficient informaie de corelaie pentru
identificarea cu precizie a contextului de apariie a saltului de prezis.
Astfel, am dezvoltat un predictor bazat pe calea pn la saltul indirect care
folosete drept informaie de predicie pe lng PC-ul saltului indirect i
istoria global a salturilor condiionate i PC-urile corespondente acestor
salturi, n vederea reducerii coliziunilor unor contexte diferite n tabela
Target Cache. Pentru benchmark-urile caracterizate de un procentaj ridicat
de salturi indirecte extinderea informaiei de corelaie, la costuri identice
de implementare determin creterea acurateii prediciei acestora (cu
8.64% pentru o istorie de 4 PC-uri reinute respectiv cu 15.16% cnd istoria
este 8). Acurateea prediciei instruciunilor de salt indirect (88.21%) este

372 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
totui inferioar celei obinute cu un predictor PPM complet (89.33%) cu
toate c exist i rezultate extraordinare, care evideniaz performane egale
obinute de un Target Cache i un predictor PPM complet.
O alt contribuie original se refer la mbuntirea acurateii de
predicie generat de o structur de tip TargetCache printr-o ignorare
selectiv a efecturii unor predicii. Astfel, Target Cache-ul a fost
mbogit cu un grad de confiden aferent fiecrei locaii din structur,
adugndu-se i un mecanism de inserare / evacuare n / din set bazat pe
LRU, confiden respectiv pe superpoziia celor dou (MPP minim de
performan potenial). Probabilitatea ca predicia generat de o stare
ridicat de ncredere s fie corect crete substanial prin restrngerea
cazurilor n care se face predicie (cu 3.57% pn la 11.45% n funcie de
prag statistici realizate pe benchmark-urile bogate n instruciuni dinamice
de salt indirect) dar, evident, procentajul cazurilor n care se face predicie
scade dramatic. Tehnica de extindere a informaiei de corelaie i dovedete
i n acest caz superioritatea (creterea cu 5.62% a acurateii de predicie).
Prin adugarea unui automat de confiden, performana global a
predictorului se mbuntete cnd acesta este mai puin selectiv.
Acurateea de predicie a Target Cache-ului cu confiden (88.97%) este
nc inferioar celei obinute cu cel mai performant predictor PPM complet
(89.33%) dar se apropie semnificativ (diferena sub 0.41%), permind
nlocuirea unei scheme extrem de complexe (PPM complet) cu una
fezabil hardware (Target Cache).
Am realizat o statistic privind aritatea salturilor indirecte (numrul
target-urilor generate dinamic de un salt / apel indirect). Astfel, salturile
indirecte cu un singur target sunt ntr-o proporie de 33% n programele de
calcul n timp ce cele cu trei sau mai multe target-uri constituie aproape
jumtate din total (49.61%). O alt contribuie original vizeaz
implementarea unui predictor hibrid (LastValue+Contextual) cu selecie
bazat pe aritate, care mbuntete acurateea prediciei salturilor
indirecte cu procentaje cuprinse ntre 2.44% i 5.42% n funcie de structura
de predicie cu care se face comparaia ajungndu-se n medie aritmetic
la acuratei maxime de predicie de 93.77%, apropiate de valorile
maxime raportate n literatura de specialitate (94.8% cu predictor cascadat
pe 3 niveluri). Procentajul substanial de salturi polimorfe dinamice i
dispersia ridicat a target-urilor anumitor salturi st la baza limitrii
acurateii prediciei. Rezultatele bune obinute oblig la introducerea i
exploatarea predictoarelor hibride i cascadate i n alte domenii de
cercetare, n vederea creterii paralelismului la nivelul instruciunilor:
predicia salturilor condiionate i predicia valorilor instruciunilor. Una
din inteniile de viitor se refer la nlocuirea metaprediciei bazat pe

Concluzii i contribuii originale. Dezvoltri ulterioare 373
informaii de aritate cu o reea neuronal care, bazat pe istorie, s
selecteze ntre diferitele predictoare componente, structura ce va
prezice saltul indirect curent. De asemenea, o idee interesant ce va fi
abordat o reprezint studiul fezabilitii unui predictor de salturi
indirecte, corelat pe baz de arbori de decizie i senzitiv la informaia de
corelaie cu adevrat util.
n continuare au fost studiate probleme legate de vecintatea valorilor
i predicia valorilor (VP) instruciunilor cu consecina execuiei speculative
a instruciunilor i cu influene benefice asupra timpului de procesare.
Concluzia de baz este c exist grade optimiste de acuratee a valorilor
(chiar dac se reine doar ultima valoare), att din punct de vedere al
rezultatelor centrate pe productor (Instruction Centred - 54%) ct i din
punctul de vedere al celor centrate pe adresele memoriei de date (Memory
Centred - 70%). Aceste localiti cresc, n mod evident, odat cu creterea
numrului de valori istorice memorate (76% respectiv 86%, pentru o istorie
de 32 de valori). Rezultatele sunt utile pentru c ele arat dac i n ce
condiii predicia valorilor este fezabil. Astfel, istoria memorat poate fi un
foarte util indicator pentru proiectarea predictorului ataat. Compromisurile
actuale care se fac n VP sunt o istorie redus reprezentnd o acuratee
de predicie joas dar cost sczut sau o istorie bogat de predicie
acuratee ridicat de predicie dar costuri hardware ridicate. O alt concluzie
reflect superioritatea tabelelor de predicie asociative. Dimensiunea optim
a acestora este de 512 locaii, diferena fa de o tabel infinit (ca i numr
de locaii) fiind nesemnificativ sub 6% (indexarea se face cu PC-ul
instruciunii) respectiv sub 14% (indexarea se face cu adresa datei).
Simulrile efectuate au demonstrat un grad ridicat de localitate i pe
instruciunile de tip aritmetico-logic (78% - medie aritmetic). Pentru viitor
cercetarea trebuie continuat cu evaluarea arhitecturilor hibride de predicie,
implementarea predictoarelor de valori neurale de tip perceptron sau
MultiLayerPerceptron, utilizarea a mai mult de dou valori distincte n
cadrul unui predictor perceptron.
O contribuie original pune n eviden conceptul de vecintate a
valorilor asociate regitrilor generali afereni procesorului. Dei la o prim
analiz a ideii am putea fi descurajai de gradul ridicat de interferene care
pot apare, se poate observa c localitatea valorii pe anumii regitri
speciali ai arhitecturii MIPS este remarcabil (cca. 90%), ceea ce
conduce n mod natural la ideea prediciei valorilor, cel puin pentru aceti
regitri favorabili. Ideea asocierii cte unui predictor de valori pentru
anumii regitri predictoare centrate pe regitri i nu pe instruciuni, ar
putea implica tehnici arhitecturale novatoare structuri de predicie
mult mai simple (32-128 de locaii), i, n consecin, performane

374 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

mbuntite, complexitate i costuri mai reduse ale microarhitecturilor
speculative bazate pe acest concept.
n investigaia efectuat am examinat o selecie a regitrilor favorabili
i predictoare diferite de valori pentru a capta anumite tipuri de
predictibilitate existente n programele de calcul. Bazat pe simulri
laborioase, s-a artat c, beneficiind de o istorie suficient de bogat
(ultimele 256 de valori), un predictor hibrid (contextual + incremental)
elimin problema interferenelor i poate atinge o acuratee medie de
predicie de 85.44%, existnd i cazuri particulare n care acurateea
ajunge la 96%. Funcionarea acestor tipuri de predictoare se bazeaz ns
pe o prioritizare static, fix, n alegerea tipului de predictor ce urmeaz
a fi folosit n procesul de predicie, ceea ce conduce ns la o soluie
neoptimal. Pentru rezolvarea acestei probleme am implementat cteva
structuri de metapredicie, care selecteaz dinamic, bazat pe diverse
grade de ncredere, structura care s fie utilizat la un moment dat
pentru predicie. Au fost propuse dou tipuri de metapredictoare: ne-
adaptive, prin ataarea unui automat de confiden sau registru binar de
deplasare fiecrui predictor component, i respectiv adaptive, care utilizeaz
o reea neural de tip feedforward MultiLayerPerceptron cu algoritm de
nvare backpropagation. Se observ c, pentru fiecare metapredictor, cu
ct procesul de predicie devine mai selectiv probabilitatea ca predicia
local generat de o stare ridicat de confiden s fie corect crete
semnificativ prin reducerea cazurilor cnd structura efectueaz o predicie.
Pe baza simulrilor se observ c acurateea medie de predicie pe
regitrii R
1
, R
22
, R
29
i R
31
, este de 91.40%. Ctigul n acuratee obinut
pe aceti regitri fa de predictorul hibrid cu prioritizare fix, este de
2.27%. De asemenea, s-a artat c predicia centrat pe regitri conduce
la o cretere a performanei globale cu cca. 15%.
O continuare a cercetrii ar putea s aib n vedere implementarea n
hardware a unui metapredictor dinamic neural eficient (bazat pe
perceptroane simple). De asemenea ar putea fi testat i fezabilitatea unui
predictor de valori centrat pe contextul CPU bazat pe arbori dinamici de
decizie i senzitiv la informaia de context cu adevrat relevant pentru
predicie.

BIBLIOGRAFIE

[Aco02] Acostchioaie D. Programare C i C++ pentru Linux, Editura
Polirom, Iai, 2002.

[Aig96] Aigner G., Hoelzle U. - Eliminating Virtual Function Calls in
C++Programms. In Proc. 10
th
European Conference on Object Oriented
Programming, June 1996.

[Ball93] Ball T., Larus J.R. Branch prediction for free in Proceedings of
the ACM SIGPLAN93 Conference on Programming LanguageDesign and
Implementation, June 1993, pp. 300313.

[Bow98] Bowers K. R., Kaeli D. Characterizing the SPEC JVM98
benchmarks on the Java virtual machine. Technical report, Northeastern
University, Dept. of ECE, Computer Architecture Group, 1998.

[Bre02] Brekelbaum E., Rupley J., Wilkerson C., Black B.
Hierarchical scheduling windows. In Proceedings of the 34th International
Symposium on Microarchitecture, Instanbul, Turkey, December 2002.

[Brea02] Breazu M. Programare orientat pe obiecte. Concepte, Editura
Universitii Lucian Blaga Sibiu, 2002.

[Bur97] Burger D., Austin T. The SimpleScalar Tool Set, Version 2.0,
University of Wisconsin Madison, USA, Computer Science Department,
Technical Report #1342, June, 1997.

[Cal94] Calder B., Grunwald D., Zorn B. Quantifying Behavioral
Differences Between C and C++ Programs, Journal of Programming
Languages, pages 323-351, Vol. 2, Num. 4, 1994.

[Cal94b] Calder B., Grunwald D. Reducing Indirect Function Call
Overhead in C++ Programs, In 1994 ACM Symposium on Principles of
Programming Languages, pages 397-408, January 1994.

[Cal95] Calder B., Grunwald D., Linsay D. Corpus-based static branch
prediction, SIGPLAN Notices, June 1995, pp.79-92.

376 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
[Cal97] Calder B., Grunwald D., Jones M., Lindsay D., Martin J.,
Mozer M., Zorn B. Evidence-based static branch prediction using
machine learning, ACM Transactions on Programming Languages and
Systems, vol. 19, no. 1, pp. 188222, Jan. 1997.

[Cal99] Calder B., Reinman G., Tullsen D. Selective Value Prediction,
In Proceedings of the 26th International Symposium on Computer
Architecture, pg. 64-74, May 1999.

[Cal99b] Calder B., Feller P., Eustace A. Value Profiling and
Optimization, Journal of Instruction-Level Parallelism 1, SUA, 1999.

[Cha97] Chang P.Y., Hao E., Patt Y.N. - Target Prediction for Indirect
Jumps, ISCA '97 (http://www.eecs.umich.edu/HPS).

[Chen96] Chen I.K., Coffey J.T., Mudge T. Analysis of Branch
Prediction via Data Compression, Proceedings of the 7th International
Conference on Architectural Support for Programming Languages and
Operating Systems (ASPLOS VII), Cambridge, MA, USA, October 1996,
pp. 128-137.

[Cle84] Cleary, J. G., Witten, I. H. Data compression using adaptive
coding and partial string matching. IEEE Transactions on Communications,
Vol. 32, No. 4, April 1984.

[Cme93] Cmelik R. F., Keppel D. Shade: A Fast Instruction-Set
Simulator For Execution Profiling. Sun Microsystems Laboratories,
Technical Report SMLI TR-93-12, 1993. Also published as Technical
Report CSE-TR 93-06-06, University of Washington, 1993.

[Col93] Collins, R. Developing A Simulator for the Hatfield Superscalar
Processor, Division of Computer Science, Technical Report No. 172,
University of Hertfordshire, December 1993.

[Con95] Conte T., Menezes K., Mills P., Patel B. Optimization of
Instruction Fetch Mechanism for High Issue Rates, Proceedings of the 22
nd

International Symposium on Computer Architecture, June 1995.

[Con99] Connors D., Hwu W.M. Compiler-Directed Dynamic
Computation Reuse: Rationale and Initial Results, IEEE 1072-4451, 1999.

[Con00] Connors D.A., Hunter H.C., Cheng B., Hwu W.W. Hardware
Support for Dynamic Activation of Compiler-Directed Computation Reuse,
In Proceedings of the 9th International Conference on Architectural Support

Bibliografie 377
for Programming Languages and Operating Systems (ASPLOS IX),
Cambridge, MA, USA, November 2000.

[Cor90] Cormen, T. H., Leiserson, C. E., Rivest, R. L. Introduction to
Algorithms. McGraw-Hill, New York, 1990.

[Dav92] Davidson J.W., Holler A.M. Subprogram Inlining: A study of
its efects on program execution time, IEEE Transaction on Software
Engineering, 18(2): 89-102, February, 1992.

[Des02] Deswet V., Goeman B., Bosschere K. Independent hashing as
confidence mechanism for value predictors in microprocessors,
International Conf. EuroPar, Augsburg, Germany, 2002.

[Des04] Desmet V., De Bosschere K. Decision Trees for Improving
Heuristic-Based Static Branch Prediction, Fifth FTW PhD Symposium,
2004.

[Des04a] Desmet V., Eeckhout L., De Bosschere K. Evaluation of the
Gini-index for Studying Branch Prediction Features, Proceedings of the 6th
International Conference on Computing Anticipatory Systems (CASYS).
American Institute of Physics. AIP Conference Proceedings. Vol. 718.
2004. pp. 376-384.

[Die98] Dieffendorff K. K7 challenges Intel. Microprocessor Report,
12(14), October 1998.

[Ding04] Ding Y, Li Z. A Compiler Scheme for Reusing Intermediate
Computation Result, Proceedings of IEEE/ACM 2004, International
Symposium on Code Generation and Optimization (CGO 2004), March
2004, Palo Alto, California.

[Dri98a] Driesen K., Holzle U. Accurate Indirect Branch Prediction. In
Proceedings of the International Symposium on Computer Architecture,
pages 167-178, Barcelona, Spain, June 1998.

[Dri98b] Driesen K., Holzle U. Improving Indirect Branch Prediction
With Source- and Aritybased Classification and Cascaded Prediction.
Technical Report TRCS98-07, Computer Science Department, University of
California, Santa Barbara, 15 March 1998.

[Dri98c] Driesen K., Holzle U. The Cascaded Predictor: Economical and
Adaptive Branch Target Prediction. Micro98 Conference Proceedings,
Dallas, Texas, December 1998.

378 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

[Dri99] Driesen K., Holzle U. Multi-stage Cascaded Prediction. Euro-
Par99 Conference Proceedings, Toulouse, France, September 1999.

[Ega03] Egan, C., Steven, G., Quick, P., Anguera, R., Steven, F. and
Vintan, L. Two-level branch prediction using neural networks, Journal of
Systems Architecture 49(12), Elsevier, December, 2003.

[Eve96] Evers M., Chang P.Y., Patt Y.N. Using Hybrid Branch
Predictors to Improve Branch Prediction Accuracy in the Presence of
Context Switches, ISCA '96.

[Fal04] Falcon A., Stark J., Ramirez A., Lai K., Valero M. Prophet /
Critic Hybrid Branch Prediction, In Proceedings of the International
Symposium on Computer Architecture, Munchen, Germany, June 2004.

[Fern03] Fern A., Givan R., Falsafi B., Vijaykumar T.N. Dynamic
Feature Selection for Hardware Prediction, Technical Report Purdue
University, USA, 2003.

[Fis92] Fisher J.A., Freudenberger S.M. Predicting conditional branch
directions from previous runs of a program, in Fifth International
Conference on Architectural Support for Programming Languages and
Operating Systems, pages 85-95, Boston, Mass, October 1992, ACM.

[Flo00] Florea, A. Egan C. Reducing the Technological Gap between an
Advanced Processor and the Memory Hierarchy System, Transactions on
Automatic Control and Computer Science, vol 45, no. 4, Timisoara,
Romania, 2000.

[Flo02] Florea A., Vintan L., Sima D. Understanding Value Prediction
through Complex Simulations, Proceedings of the 5
th
International
Conference on Technical Informatics, University Politehnica of
Timisoara, Romania, October, 2002.

[Flo03] Florea A., Vinan L. Simularea i optimizarea arhitecturilor de
calcul n aplicaii practice, Editura MatrixRom, Bucureti, 2003, ISBN 973-
685-605-4.

[Flo03a] Florea A. Experimente privind simularea unor structuri paralele
de procesare a informaiei, Referat de doctorat nr. 2, Universitatea
Politehnica Bucureti, Iulie, 2003.


Bibliografie 379
[Flo04] Florea A., Vintan L., Mihu I. Z. Understanding and Predicting
Indirect Branch Behavior, Studies in Informatics and Control Journal: With
Emphasis on Useful Applications of Advanced Technology, March 2004,
Vol.13, No. 1, Bucharest.

[Flo04a] Florea A. Predicia valorilor i reutilizarea dinamic a
instruciunilor n arhitectura superscalar parametrizabil, Referat de
doctorat nr. 3, Universitatea Politehnica Bucureti, Aprilie, 2004.

[Fra93] Franklin, M. Multiscalar Processors, Ph. D Thesis, University
of Wisconsin, 1993.

[Gal93] Gallant S.I. - Neural Networks and Expert Systems, MIT Press.
1993.

[Gab98] Gabbay F., Mendelsohn A. The Effect of Instruction Fetch
Bandwidth on Value Prediction, In Proceedings of the 25
th
International
Symposium on Computer Architecture, June, 1998.

[Gab98a] Gabbay F., Mendelsohn A. Using Value Prediction To
Increase The Power Of Speculative Execution Hardware, ACM
Transactions on Computer Systems, vol 16, nr. 3, August, 1998.

[Gon99] Gonzalez A., Tubella J., Molina C. Trace-Level Reuse,
International Conference on Parallel Processing, September 21 24, 1999,
Japan.

[Henn00] Henning J. - SPEC CPU2000: Measuring CPU Performance in
the New Millennium, Computing Practices, 0018-9162/00 2000 IEEE.

[Henn03] Hennessy J., Patterson D. Computer Architecture: A
Quantitative Approach, Morgan Kaufmann, 3
rd
Edition, 2003.

[Hin01] Hinton G., Carmean D. et al The microarchitecture of the
Pentium 4 processor. Intel Technology Journal Q1, 2001.

[Hoa62] Hoare, C. A. R. -. Quicksort. Computer Journal, 5(1):10-15, 1962.

[Hua99] Huang J., Lilja D. Exploiting Basic Block Value Locality with
Block Reuse, Proceedings of the The Fifth International Symposium on
High Performance Computer Architecture, p.106, January 09-12, 1999.

[Intel97] Intel press release. The Next Generation of Microprocessor
Architecture: A 64-bit Instruction Set Architecture (ISA) Based on EPIC
Technology. Intel Corporation October 1997.

380 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

[Intel02] http://radified.com/CPU/Intel_northwood_pentium_4.htm,
January 2002.

[Intel03] http://www.lostcircuits.com/cpu/intel_p4ee/, October 2003.

[Jac99] Jacobson Q., Smith J.E. Instruction Pre-Processing in Trace
Processors, Proceedings of the 5
th
International Symposium on High
Performance Computer Architecture, 1999, SUA.

[JILP04] The Journal of Instruction-Level Parallelism: the 1
st
Branch
Prediction Championship, http://www.jilp.org/cbp.

[Jim02] Jimenez D., Lin C. Neural methods for dynamic branch
prediction. ACM Transactions on Computer Systems, 20(4):369397,
November 2002.

[Jim02a] Jimenez D. Fast Path-Based Neural Branch Prediction, in the
Proceedings of the 35
th
Annual IEEE/ACM International Symposium on
Microarchitecture (MICRO-35), December 2003.

[Jim02b] Jimenez D. A. Delay-Sensitive Branch Predictors for Future
Technologies, PhD Thesis, Technical Report TR-02-2, Department of
Computer Sciences, The University of Texas at Austin, USA, May, 2002.

[Juan98] Juan, T., Sanjeevan, S., Navarro, J. Dynamic History-Length
Fitting: A third level of adaptivity for branch prediction, In Proceedings of
the 25
th
Annual International Symposium on Computer Architecture,
Barcelona, Spain, June 1998.

[Jou90] Jouppi N. Improving Direct-Mapped Cache Performance by the
addition of a Small Fully Associative Cache and Prefetch Buffers,
Proceedings of the 17
th
International Symposium On Computer
Architecture, 1990.

[Kae97] Kaeli D. R., Emma P. Improving the Accuracy of History-Based
Branch Prediction. IEEE Transactions on Computer Architecture,
46(4):469-472, April 1997.

[Kal98] Kalamatianos J., Kaeli D.R. Predicting Indirect Branches via
Data Compression. In Proc. of 31
st
International Symposium on
Microarchitecture, pages 272-281, Dec. 1998.


Bibliografie 381
[Kavi03] Kavi K., Chen P. Dynamic Function Result Reuse, Proceedings
of the 11th International Conference on Advanced Computing (ADCOM-
2003), Combatore, India, 17-20 December, 2003.

[Kes99] Kessler R. E. The Alpha 21264 microprocessor. IEEEMicro 19,
2 (March/April), 2436.

[Knu71] Knuth D.E. An empirical study of FORTRAN programs,
Software, Practice and Experience, 1:105-133, 1971.

[Lam79] Lamport L. How to Make a Multiprocessor Computer that
Correctly Executes Multiprocess Programs. IEEE Transactions on
Computers, C-28(9):690-691, Sept. 1979.

[Lar95] Larus J., Schnarr E. EEL: Machine-Independent Executable
Editing, In PLDI95 Conference Proceedings. Pp. 291-300, La Jolla,
California, June 1995.

[Lee97] Lee C., Potkonjak M. and Mangione-Smith W. - MediaBench: A
Tool for Evaluating and Synthesizing Multimedia and Communications
Systems, 1997.

[Lee98] Lee D., Crowley P., Baer J.L., Anderson T. Execution
Characteristics of Desktop Applications on Windows NT, 25th Annual
International Symposium on Computer Architecture, Barcelona, Spain, June
1998.

[Lee99] Lee S., Wang Y., Yew P. Decoupling Value Prediction on Trace
Processors, In Proceedings of the 6th International Symposium on High
Performance Computer Architecture, 1999.

[Lee02] Lee S., Yew P. On Augmenting Trace Cache for High-Bandwidth
Value Prediction, IEEE Transactions on Computers, Vol. 51, No. 9,
September 2002.

[Lep00] Lepak K., Lipasti M. On The Value Locality of Store
Instructions, International Symposia on Computer Architecture, Vancouver,
Canada, 2000.

[Lep00a] Lepak K. M., Lipasti M. Silent Stores for Free, Proceedings of
the 33
rd
Annual ACM/IEEE International Symposium on Microarchitecture
(MICRO33), California, USA, 2000.


382 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
[Lip96] Lipasti M., Wilkerson C., Shen P. Value Locality and Load
Value Prediction, 17
th
ASPLOS International Conference VII, pg. 138-147,
MA, SUA, October 1996.

[Lip96b] Lipasti M., Shen J.P. Exceeding The Dataflow Limit Via Value
Prediction, Proceedings of the 29
th
ACM/IEEE International Symposium on
Microarchitecture, December, 1996.

[Lip01] Lippasti M., Martin M., Sorin D., Cain H., Hill M. Correctly
Implementing Value Prediction in Microprocessors that Support
Multithreading or Multiprocessing, Proceedings of the 34
th
Annual ACM /
IEEE International Symposium on Microarhitecture, Austin, Texas,
December, 2001.

[Mar99] Marcuello P., Tubella J., Gonzales A. Value Prediction for
Speculative Multithreaded Architectures, 1072-4451/IEEE, 1999.

[Mar00] Marcuello P., Gonzales A. A quantitative assessment of
threadlevel speculation techniques. In Proceedings of the 14th International
Conference on Parallel and Distributed Processing Symposium (IPDPS '00),
pages 595-604, Cancn (Mexico), May 2000.

[McFar93] McFarling S. Combining Branch Predictors, WRL Technical
Note TN-36, Digital Equipment Corporation, June 1993.

[Min88] Minsky M., Papert S. Perceptrons. In Neurocomputing:
Foundations of Research, pages 157169. MIT Press, 1988.

[Moff90] Moffat, A. - Implementing the PPM data compression scheme.
IEEE Transactions on Communications, Vol. 38, No. 11, November 1990.

[Mud96] Mudge T. Chen, I., Coffey, J. Limits to Branch Prediction,
Technical Report, University of Michigan, January 1996.

[Nai95] Nair, R. Optimal 2-Bit Branch Predictors, IEEE Transaction on
Computers, No. 5, 1995.

[Nak99] Nakra, T., Gupta, R., Soffa, M. L. Global context-based value
prediction, in 5
th
International Symposium on High Performance Computer
Architecture, 1999.

[Oni66] Onicescu O. Theorie de linformation. Energie informationelle.
C. R., Academie Science, Ser. A-B, Tome 263:841842, 1966.


Bibliografie 383
[Pan92] Pan S.T., So K., Rahmeh J.T. Improving the Accuracy of
Dynamic Branch Prediction Using Branch Correlation, ASPLOS V
Conference, Boston, October, 1992.

[Pat97] Patel S.J., Friendly D. H., Patt Y. N. Critical Issues Regarding
The Trace Catch Fetch Mechanism. Technical report, University of
Michigan, 1997.

[Pat98] Patel S., Evers M., Patt Y. Improving Trace Cache Effectiveness
with Branch Promotion and Trace Packing, Proc. 25
th
Intl Symp. Computer
Architecture, pp. 262-271, June 1998.

[Per93] Perleberg C., Smith A. J. Branch Target Buffer Design and
Optimisation, IEEE Trans. Computers, No. 4, 1993.

[Pett90] Pettis K., Hansen R.C. Profile guided code positioning. In
Proceedings of the ACM SIGPLAN'90 Conference on Programming
Language Design and Implementation, pages 16-27, June 1990.

[Pop00] Popescu Th. Serii de timp, Editura Tehnic, Bucureti, 2000.

[Pos00] Postiff M., Greene D., Lefurgy C., Helder D., Mudge T. The
MIRV SimpleScalar/PISA Compiler, University of Michigan EECS
Department Tech. Report CSE-TR-421-00. April 2000.

[Qui93] Quinlan J.R. C4.5: Programs for Machine Learning, Morgan
Kaufmann, 1993.

[Ros62] Rosenblatt F. Principles of Neurodynamics: Perceptrons and the
Theory of Brain Mechanisms. Spartan, New York.

[Rot97] Rotenberg E., Jacobson Q., Sazeides Y., Smith J.E. Trace
Processors, in Proceedings of the 30
th
International Symposium on
Microarchitecture, pp. 138-148, 1997.

[Roth99] Roth A., Moshovos A., Sohi G.S. Improving Virtual Function
Call Target Prediction via Dependence-Based Pre-Computation,
Proceedings of the 13
th
International Conference on Supercomputing,
Rhodes, Greece, 1999.

[Rych98] Rychlik B., Faistl J., Krug B., Kurland A., Jung J., Velev M.,
Shen J. - Efficient and Accurate Value Prediction Using Dynamic
Classification, Technical Report of Microarchitecture Research Team,

384 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Department of Electrical and Computer Engineering, Carnegie Mellon
Univ., 1998.

[Sas00] Sastry S.S., Bodik R., Smith J.E. Characterizing Coarse-
Grained Reuse of Computation, 3rd ACM Workshop on Feedback Directed
and Dynamic Optimization in conjuction with MICRO 33, December 2000.

[Saz97] Sazeides Y., Smith J.E. The Predictability of Data Values,
Proceedings of The 30
th
Annual International Symposium on
Microarchitecture, December, 1997.

[Saz99] Sazeides Y. An analysis of value predictability and its
application to a superscalar processor, PhD Thesis, University of
Wisconsin-Madison, 1999.

[Sed92] Sedgewick, R. Algorithms in C++. Reading, Massachusetts:
Addison-Wesley, 1992.

[Seng04] Seng J., Hamerly G. Exploring Perceptron-Based Register
Value Prediction, The 2
nd
Value-Prediction and Value-Based Optimization
Workshop (VPW2) in conjunction with the 11
th
International Conference on
Architectural Support for Programming Languages and Operating Systems
(ASPLOS 11), October 2004, Boston, SUA.

[Sez02] Seznec A., Felix S., Krishnan V., Sazeides Y. Design tradeoffs
for the Alpha EV8 conditional branch predictor. In Proceedings of the 29th
International Symposium on Computer Architecture, May 2002.

[Sez04] Seznec A. Revisiting the Perceptron Predictor, IRISA research
reports, IRISA Editeur, May, 2004.

[Sias04] Sias J.W., Ueng S., Kent G., Steiner I., Nystrom E., Hwu W.
Field-testing IMPACT EPIC research results in Itanium 2, The 31th Annual
International Symposium on Computer Architecture, Munchen, Germany,
June 2004.

[Sil99] Silc J.,Robic B., Ungerer T.- Processor Architecture, from
Dataflow to Superscalar and beyond, Springer-Verlag, 1999.

[Smi84] Smith A., Lee J. Branch Prediction Strategies and Branch
Target Buffer Design, Computer 17:1, January 1984.

[SPEC] The SPEC benchmark programs, http://www.spec.org.


Bibliografie 385
[Spra02] Sprangle E., Carmean D. Increasing processor performance
by implementing deeper pipelines. In Proceedings of the 29th International
Symposium on Computer Architecture, Anchorage, Alaska, May 25 - 29,
2002.

[Sod97] Sodani A., Sohi G. Dynamic Instruction Reuse, Proceedings of
the 24
th
International Symposium on Computer Architecture, pp. 194-205,
June 1997.

[Sod98] Sodani A., Sohi G. An Empirical Analysis of Instruction
Repetition, Intl ASPLOS Conference, 0-8186-8609-X/IEEE, 1998.

[Sod00] Sodani A. Dynamic Instruction Reuse, PhD Thesis, University of
Wisconsin Madison, USA, 2000.

[Sta98] Stark J., Evers M., Patt Y. Variable Length Path Branch
Prediction, In Proceedings of the 8
th
Intl Conference of Architectural
Support for Programming Languages and Operating Systems, pages 170-
179, 1998.

[Ste99] Steven G. Exploiting Instruction-Level Parallelism in High
Performance Processors, Proceedings of International Conference Beyond
2000: Engineering Research Strategies, 25-26 Nov. 99, Vol. XXXVIII,
ISSN 1221-4949, Editura Universitii "L. Blaga", Sibiu, (Romania), 1999.

[Sti94] Stiliadis, D., Varma, A. Selective Victim Caching: A Method to
Improve the Performance of Direct-Mapped Caches, TR UCSC-CRL-93-
41, University of California, 1994 (republished in a shorter version in IEEE
Trans. on Computers, May 1997).

[Tar04] Tarjan D., Skadron K. Revisiting the Perceptron Prediction
Again, Technical Report CS-2004-28, University of Virginia, USA,
September 2004.

[Tat00] Tate D., Steven G., Steven F. Static Scheduling for Out-of-order
Instruction Issue Processors, Proceedings of 6
th
Australasian Computer
Architecture Conference ACAC2000: 90-96.

[Tho03] Thomas R., Franklin M., Wilkerson C., Stark J. Improving
Branch Prediction by Dynamic Dataflow-based Identification of Correlated
Branches from a Large Global History, The 30th Annual International
Symposium on Computer Architecture, San Diego, California, June 09 - 11,
2003.

386 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

[Tho04] Thomas A., Kaeli D. Value Prediction with Perceptrons, The 2
nd

Value-Prediction and Value-Based Optimization Workshop (VPW2) in
conjunction with the 11
th
International Conference on Architectural Support
for Programming Languages and Operating Systems (ASPLOS 11), October
2004, Boston, SUA.

[Tull99] Tullsen D. M., Seng J. S. Storageless Value Prediction using
Prior Register Values, Proceedings of the 26
th
International Symposium on
Computer Architecture, May 1999.

[Vin99] Vinan L., Egan, C. Extending Correlation in Branch Prediction
Schemes, International Euromicro99 Conference, Milano, Italy, September
1999.

[Vin99a] Vinan L., Florea A. - Investigating New Branch Prediction
Through Quantitative Approach Beyond 2000: Engineering Research
Strategies, November 25-27, Sibiu, 1999.

[Vin99b] Vintan L., Iridon M. Towards a High Performance Neural
Branch Predictor, International Joint Conference on Neural Networks
(IJCNN CD-ROM, ISBN 0-7803-5532-6), Washington DC, USA, 10-16
July, 1999.

[Vin00] Vinan L. - Arhitecturi de procesoare cu paralelism la nivelul
instruciunilor, Editura Academiei Romne, Bucureti, ISBN 973-27-0734-
8, 2000 (264 pg.).

[Vin00a] Vinan N. L., Florea A. Microarhitecturi de procesare a
informaiei, Editura Tehnic, Bucureti, ISBN 973-31-1551-7, 2000 (312
pg.).

[Vin00b] Vintan L. Cndea C., Staicu M. Automatic Synthesis of
Branch Prediction Schemes through Genetic Programming, Transactions on
Automatic Control and Computer Science, Special Issue Dedicated to
Fourth International Conf. on Technical Informatics (CONTI2000),
Volume 45 (59), No 4, ISSN 1224-600X, University "Politehnica" of
Timisoara, Romania, 2000.

[Vin00c] Vintan L. Towards a Powerful Dynamic Branch Predictor,
ROMJIST, nr.3, Academia Romn, 2000.

[Vin01] Vintan L., Florea A. Cross-Fertilisation between Computer
Architecture and other Computer Science Fields, Proceedings of the

Bibliografie 387

Conference on Computer Science and Control Systems (CSCS-13),
Buureti, Romnia, 01-03 June, 2001.

[Vin02] Vinan L. Predicie i speculaie n microprocesoarele avansate,
Editura MatrixRom, Bucureti, ISBN 973-685-497-3, 2002.

[Vin04] Vinan L., Gellert A., Florea A. Register Value Prediction using
Metapredictors, Proceedings of the 8th International Symposium on
Automatic Control and Computer Science, Iasi, October 2004.

[Vin05] Vinan L., Florea A., Gellert A. Focalizing Dynamic Value
Prediction to CPUs Context, IEE Proc. Computers & Digital Techniques,
ISSN: 1350-2387, United Kingdom, 2005.

[Wal99] Wallace S., Calder B., Tullsen D. - Threaded Multiple Path
Execution, 25
th
Int'l Symp. on Computer Architecture (ISCA), Barcelona,
June, 1999.

[Wang97] Wang K., Franklin M. Highly Accurate Data Value
Prediction using Hybrid Predictors, Proceedings of the 30
th
Annual
ACM/IEEE International Symposium on Microarchitecture, December
1997.

[Watt01] Watterson S., Debray S. Goal-Directed Value Profiling, Proc.
Compiler Construction 2001 (CC 2001), April 2001.

[Yeh92] Yeh, T., Patt, Y. - Alternative Implementations of Two-Level
Adaptive Branch Prediction, Proceedings of the 19
th
Annual International
Symposium on Computer Architecture, pp. 124-134, 1992.

[Yeh93] Yeh, T., Marr D.T., Patt, Y. Increasing the Instruction Fetch
Rate via Multiple Branch Prediction and a Branch Address Cache,
Proceedings of the 7
th
International Conference on Supercomputing, pp. 67-
76, 1993.

[Zha00] Zhao Q., Lilja D.J. Compiler-Directed Static Clasification of
Value Locality Behavior Laboratory for Advanced Research in Computing
Technology and Compilers Technical Report No. ARCTiC 00-07, July,
2000.

[Zhou03] Zhou, H., Flanagan, J., Conte, Th. Detecting Global Stride
Locality in Value Streams, Proceedings of the 30
th
International Symposium
on Computer Architecture, June 2003, San Diego, California.
ANEXA 1
EXEMPLE JUSTIFICATIVE PRIVIND
IMPACTUL LA NIVEL MICROARHITECTURAL
AL UNOR TEHNICI DE MBUNTIRE A
PERFORMANEI PROCESOARELOR PRIN
PREDICIA SALTURILOR INDIRECTE
Anexa de fa cuprinde dou aplicaii .cpp, simple dar sugestive i
care reliefeaz dou aspecte importante la nivel microarhitectural. Primul
exemplu urmrete s evidenieze situaii n care extinderea informaiei de
corelaie pentru instruciunile de salt indirect are sens, contribuind la
creterea acurateii prediciei acestora. A doua aplicaie vine ns s
dovedeasc limitrile tehnicii de extindere a informaiei de corelaie i
respectiv ineficiena uneori a creterii gradului de asociativitate pentru o
structur Target Cache n vederea obinerii dezideratului de performan
ridicat prin predicia cu acuratee a salturilor indirecte. Compilarea surselor
s-a fcut cu GNU C++ 2.6.3. i opiunea de optimizare O3 pe un procesor
Intel80x86 i sistem de operare Linux Red Hat 7.3. Opiunea O3 pe lng
reducerea dimensiunii codului i a timpului de execuie permite inlining-ul
aplicat funciilor i aplicarea delay slot-ului pentru instruciunile de salt
(f_inline_functions, f_delayed_branch).
Comenzile cu ajutorul crora obinem codul asamblare sunt:
U pentru sursa de program C:
./xgcc nume_fisier.c -S
U pentru programele obiectuale CPP:
./cc1plus nume_fisier.cpp s
Codul obiect pentru arhitectura SimpleScalar se obine cu ajutorul
comenzilor:
U pentru ambele tipuri de programe (att C ct i C++):
./xgcc nume_fisier_sursa.c o nume_fisier_destinatie.ss

Exemple justificative privind impactul la nivel microarhitectural al unor tehnici de
mbuntire a performanei procesoarelor prin predicia salturilor indirecte 389
Se reamintete c opiunea de compilare S realizeaz preprocesarea
i compilarea codului surs, iar opiunea s genereaz doar codul asamblare
fr faza de preprocesare.


Figura A1.1. Exemplu ce justific necesitatea extinderii informaiei de corelaie n
predicia salturilor indirecte

390 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Prima aplicaie, simpl la nivel high-level, dar mai complex i dificil
de urmrit la nivel asamblare urmrete s evidenieze situaii n care
extinderea informaiei de corelaie pentru instruciunile de salt indirect are
sens, contribuind la creterea acurateii prediciei acestora. n acest scop se
vor evidenia dou pattern-uri diferite de salturi condiionate dar cu
comportament identic (pentru HRgLength=2) care conduc la aceeai
instruciune de salt indirect. Aplicaia conine dou instruciuni de selecie
simpl (if), una multipl (switch) respectiv o instruciune repetitiv (for), a
cror execuie este controlat prin intermediul unor variabile citite de la
tastatur. Prin compilarea codului surs high-level rezult n principal patru
instruciuni de salt condiionat, una de salt indirect i numeroase instruciuni
de salt necondiionat (vezi figura A1.1).
Comportamentul saltului condiionat B1 (beq $3, $0, $L27) depinde
de valoarea care va fi atribuit lui x dup citirea de la tastatur (sw $2,
28($fp)). Datorit corelaiei dintre saltul B1 i celelalte salturi condiionate
(B2, B3, B4) se poate ajunge la situaia n care dac x3 B1 s se fac iar la
celelalte trei salturi condiionate s nu se mai ajung, ns nu aceasta s-a
urmrit n cadrul acestui exemplu. Prin urmare, se consider c x va lua
valoarea 3 iar saltul B1 nu se va face (NT). Salturile B2 (beq $3, $0, $L28)
i B3 (bne $3, $0, $L33) depind de valoarea pe care o ia variabila z (sw $2,
32($fp)), comportamentul lor fiind mutual exclusiv. Astfel, dac z=6 rezult
c saltul B2 nu se va face (NT), variabila v (sw $2, 20($fp)) lund valoarea
3 i se va ajunge la saltul condiionat B4 (beq $3, $0, $L41) premergtor
saltului indirect (j $2). ntruct v=3 (parametru de control al construciei
switch/case) rezult c B4 nu se va face (NT). n concluzie, o cale pe care se
ajunge la saltul indirect j $2 este B1, B2, B4 cu comportamentul NT, NT,
NT. Dac ns z6 atunci B2 se va face (T) iar saltul B3 se va executa
repetat de dou ori astfel (T, T) conform variabilei de control a buclei i<2
(sw $3, 24($fp)). La a treia iteraie a saltului condiionat B3 acesta nu se va
mai face (NT). Datorit instruciunilor din corpul instruciunii repetitive for
rezult c variabila de control pentru instruciunea de selecie switch/case va
fi tot timpul sub valoarea 5 (numrul de cazuri posibile), ceea ce nseamn
c saltul B4 nu se va face (NT). Aadar, o nou cale dinamic prin care se
ajunge la saltul indirect este urmtoarea: B1, B2, B3, B3, B3, B4
comportamentul acestora fiind NT, T, T, T, NT, NT. Privind doar din
prisma comportamentului ultimelor dou salturi condiionate rezult c
indiferent pe ce cale ajung la saltul indirect se va accesa acelai set din
Target Cache, sporind numrul de conflicte. Dac se extinde informaia de
corelaie pstrnd pe lng cei HRgLength bii ai globalHR i PC-urile
corespondente se poate identifica mai clar target-ul spre care se merge de

Exemple justificative privind impactul la nivel microarhitectural al unor tehnici de
mbuntire a performanei procesoarelor prin predicia salturilor indirecte 391
fiecare dat. Astfel, n condiiile n care secvena de instruciuni supus
ateniei s-ar relua din punct de vedere dinamic (apel de funcie, bucl de
program, recursivitate), s-ar putea ca pentru calea B2, B4 NT, NT, s fie
prezis fr greeal target-ul ntruct de fiecare dat variabila de selecie
aferent construciei switch/case ia aceeai valoare. Pentru calea B3, B4
NT, NT se va accesa alt set n structura Target Cache, reducndu-se din
interferene i crescnd acurateea de predicie a salturilor indirecte, chiar
dac pe aceast cale target-ul poate diferi de la o instan la alta a saltului
indirect, dependent de rezultatul returnat de funcia random.
Cea de-a doua aplicaie conine o instruciune repetitiv cu un
parametru de control variat ntre 0 i 5 care include n corpul su o
construcie switch/case, avnd acelai parametru de control pe post de
variabil de selecie (vezi figura A1.2). Prin compilarea codului surs high-
level rezult n principal dou instruciuni de salt condiionat, una de salt
indirect i numeroase instruciuni de salt necondiionat. Pentru
mbuntirea acurateii de predicie a saltului indirect (j $2) se ncearc
extinderea informaiei de corelaie prin reinerea comportamentului
ultimelor dou salturi condiionate (HrgLength=2 bne $3, $0, $L30 i beq
$3, $0, $L38). ntruct se folosete aceeai variabil de control i stocat
n memoria de date la adresa 20($fp), (vezi n figura A1.2 secvena cu
modificarea i stocarea variabilei de control i), se observ foarte clar c
cele dou salturi condiionate sunt corelate. Astfel, dac primul salt
condiionat se face (T) atunci cel de-al doilea nu se va face (NT). Dac
variabila contor ia pe rnd valorile 0, 1, 2, 3, i respectiv 4, atunci de fiecare
dat cnd se ajunge la instruciunea de salt indirect registrul de istorie
global (globalHR pe 2 bii) va avea tot valoarea (binar) 10
2
(vezi
comportamentul celor dou salturi condiionate din figura A1.2 la fiecare
iteraie este reprezentat cu alt nuan). Cu toate acestea, n fiecare din cele
5 cazuri target-ul instruciunii de salt indirect difer. Dup cum se poate
observa, n aceast situaie nu ajut la nimic cunoaterea PC-urilor celor
dou salturi condiionate pentru mbuntirea acurateii prediciei saltului
indirect (la fiecare iteraie fiind aceleai PC-uri ca i la anterioara execuie a
saltului indirect, generndu-se practic acelai identificator de set i respectiv
TAG de acces n structura Target Cache, nereducndu-se din miss-urile de
conflict). Rezult astfel o limitare a avantajului introdus de tehnica de
extindere a informaiei de corelaie pentru pattern-uri de salturi
condiionate de istorie redus. Nici utilizarea unei structuri Target
Cache cu grad ridicat de asociativitate nu constituie neaprat o soluie
n acest caz ntruct Tag-urile din set sunt toate distincte i instruciunile de
salt condiionat i indirect genereaz acelai Tag de fiecare dat. Pentru
aplicaii high-level complexe care folosesc secvene de instruciuni de genul

392 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
celor ilustrate mai sus (for, switch), este necesar pstrarea unei istorii
mai bogate a comportamentului salturilor condiionate pentru o acuratee
ridicat a salturilor indirecte (concluzii reflectate de altfel i n subcapitolul
7.1, cu rezultate ale simulrilor pe benchmark-urile SPEC95).


Figura A1.2. Situaie concret ce dovedete ineficiena extinderii informaiei de
corelaie n predicia salturilor indirecte

ANEXA 2
EXEMPLU PRIVIND EFICIENA PREDICIEI
PE REGITRII PROCESORULUI MIPS [Flo03]

Secvena examinat din punct de vedere al prediciei valorilor
regitrilor MIPS reprezint partea de afiare a unui ir de numere prime
dintr-un program care calculeaz, stocheaz n memorie i n final afieaz
primele 600 de numere prime. Dup obinerea celor 600 de numere, acestea
se citesc din memorie n regitrii, urmnd a fi afiate cte 25 pe rnd (cu
spaiu ntre ele). Testarea aplicaiei s-a fcut pe simulatorul SPIM, scris de
ctre James Larus n 1993 pentru uz didactic la Facultatea de Calculatoare a
Universitii din Wisconsin.

PC = 0 la $t
2
, sir // sir reine adresa de nceput a
// celor 600 de elemente
RESTART:
PC = 4 lw $a
0
, ($t
2
)
PC = 8 li $v
0
, 1 // afiare numr prim curent
PC = 12 syscall
PC = 16 sub $a
1
, $a
1
, 1 // decrementare contor numere
// prime rmase de afiat
PC = 20 add $t
2
, $t
2
, 4 //incrementare adres numr
// prim curent
PC = 24 sub $sp, $sp, 4
PC = 28 sw $a
0
, ($sp)
PC = 32 li $v
0
, 11
PC = 36 li $a
0
, 0x20 // afiare spaiu ntre numere
// prime
PC = 40 syscall
PC = 44 li $t
0
, 25
PC = 48 div $a
1
, $t
0
// am ajuns la cel de-al 25-lea
// numr prim ?
PC = 52 mfhi $t
1

394 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare

PC = 56 bnez $t
0
, nu_sare
PC = 60 li $v
0
, 11
PC = 64 li $a
0
, 0x0a // afiare pe rnd nou
PC = 68 syscall
nu_sare:
PC = 72 lw $a
0
, ($sp) //refacere numr prim
PC = 76 add $sp

, $sp , 4 //refacere stiv
PC = 80 bnez $a
1
, RESTART


Cu toate c secvena aleas nu este poate cel mai sugestiv exemplu i
cu toate c instruciunile cu stiva puteau fi nlocuite de altele de transfer, s-a
urmrit nelegerea gradului ridicat de localitate existent pe regitrii
procesorului MIPS, i cum un predictor simplu de tip "Last Value"
modificat (care reine 2 sau 4 valori ale fiecrui registru vezi Perceptronul
Last-2 Value) i cu mecanism "perfect" de selecie a valorii prezise poate
exploata conceptul de localitate.
Metodologia de determinare a gradului de localitate pe regitri const
n verificarea n fiecare faz Write Back dac valoarea scris n respectivul
registru se regsete printre ultimele k valori anterior scrise. Predicia se
realizeaz abia n faza ID (decode) dup citirea valorii operanzilor din setul
de regitri generali.
Din exemplul prezentat se observ c n timpul execuiei programului
registrul v
0
ia doar dou valori - coduri de apel sistem (1, respectiv 11),
registrul $t
0
pstreaz valoarea constant 25, $sp ia una din valorile
0x7fffc000 respectiv 0x7fffbffc. Ceilali regitri i modific valorile datorit
instruciunilor incrementale/decrementale (reprezint indeci de adres,
elemente distincte stocate n memorie - numere prime). Pe lng valorile
variabile pe care le ia din memorie registrul $a
0
reine i dou valori (32,
respectiv 10) - parametri ai apelului sistem de afiare caracter.
ANEXA 3
LIMITAREA PREDICTIBILITII SALTURILOR
PE ALGORITMII DE SORTARE RAPID
Anexa de fa precum i urmtoarele dou (anexele 4 i 5) reprezint
exemple concrete ce demonstreaz necesitatea unor abordri integratoare de
gen hardware-software, tehnologie-arhitectur, algoritmi, concepte,
metode.
n ultimii ani, procesul de proiectare al procesoarelor s-a modificat
radical. Astzi, accentul principal nu se mai pune pe implementarea
hardware, ci pe proiectarea arhitecturii n strns legtur cu aplicaiile
poteniale. Se pornete de la o arhitectur de baz, care este modificat i
mbuntit dinamic, prin simulri laborioase pe benchmark-uri
reprezentative (Stanford, SPEC).
Problematica branch-urilor n procesoarele pipeline superscalare
reprezint o provocare fundamental n evoluia domeniului arhitecturii
calculatoarelor. Instruciunile de ramificaie acioneaz la nivelul control-
flow genernd pierderi de performan prin necunoaterea la timp (n
momentul fazei de aducere a instruciunilor) a direciei i adresei saltului.
Reducerea efectelor defavorabile se poate face prin metode software bazate
pe reorganizarea programului surs (scheduling) sau prin metode hardware
(predicia ramificaiilor de program care favorizeaz astfel execuia
speculativ).
Unul din cele 8 benchmark-uri Stanford [Col93] l constituie
programul de sortare rapid Quicksort. ntr-unul din articolele despre
predicia salturilor scris de Trevor Mudge n 1996 [Mud96], autorul spune i
demonstreaz, exemplificnd pe benchmark-ul mai sus amintit, c
predictibilitatea salturilor n unele programe poate fi analizat exact,
furnizndu-se o limit superioar a predictibilitii. Pentru programe mai
complexe, msurarea limitei de predictibilitate se poate face utiliznd
algoritmul universal de compresie / predicie PPM (predicie prin potrivire
parial) [Cle84, Moff90]. Programele au o limit inerent de
predictibilitate datorat aleatorismului datelor de intrare. Aceast limit
variaz de la un set de date de intrare la altul.
396 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Analiza efectuat se bazeaz pe algoritmul de sortare rapid [Sed92],
avnd ca obiect de interes instruciunile de salt condiionat. Algoritmul de
sortare rapid (Quicksort), primete ca date de intrare un ir de n elemente
(presupuse distincte), i le ordoneaz cresctor. Timpul de execuie n cazul
cel mai defavorabil este (n
2
) [Cor90]. Algoritmul este deseori cea mai buna
soluie practic, deoarece are o comportare medie remarcabil: timpul mediu
de execuie este (nlgn). Sortarea se face pe loc (n spaiul alocat irului de
intrare) i lucreaz foarte bine chiar i ntr-un mediu de memorie virtual. Se
bazeaz pe paradigma divide i stpnete [Hoa62, Cor90]. Pentru un
subir A[p..r] rezult operaiile:
= Divide: irul A[p..r] este mprit n doua subiruri nevide A[p..q] i
A[q+1..r], astfel nct fiecare element al subirului A[p..q] s fie mai
mic sau egal cu orice element al subirului A[q+1..r]. Indicele q este
calculat de procedura de partiionare, de importan primordial, pe
baza unui element ales ca pivot.
= Stpnete: Cele dou subiruri A[p..q] i A[q+1..r] sunt sortate prin
apeluri recursive ale algoritmului de sortare rapid.
Din ntreg algoritmul dou instruciuni de salt fac obiectul analizei, i
anume cele dou bucle "while" n interiorul crora se realizeaz comparaia
dintre elementele tabloului de sortat i valoarea pivotului.

while((array[++left_pointer]<pivot) && (left_pointer<=right));

while((array[--right_pointer]>pivot) && (right_pointer>=0));

Cele dou salturi formeaz nucleul algoritmului i sunt dificil de
prezis: rezultatul lor depinde substanial de distribuia datelor de intrare.
Celelalte branch-uri din program sunt 100% predictibile dac sunt cunoscute
date suficiente despre istoria anterioar a salturilor, sau exist timp suficient
de calcul.
Se consider c cele n numere de sortat sunt distincte, deci ordinea
iniial posibil a elementelor este egal probabil. Predictibilitatea cutat
pentru un subir variaz n concordan cu numrul de elemente al
subirului. La fiecare salt, predicia este urmtoarea: "programul se va
ramifica sau nu, n funcie de rezultatul comparaiei dintre noul element
examinat i pivot. Astfel, dac noul element examinat este mai probabil s
fie mai mare / mai mic dect pivotul predicia este c saltul se face / nu se
face.
Algoritmul optim de predicie pstreaz (urmrete) - la fiecare pas -
un numr variabil de rapoarte de elemente anterior examinate i compar
aceast cantitate cu 1/2 pentru a decide cum va prezice noul salt. Justificarea

Limitarea predictibilitii salturilor pe algoritmii de sortare rapid 397
comparaiei cu 1/2 este urmtoarea: dac din totalul de elemente anterior
examinate mai mult de jumtate (1/2) au fost mai mari dect pivotul (s-a
fcut saltul), rezult predicia va fi c saltul se va face (i noul element va fi
mai mare dect pivotul). n plus, o partiionare optim a tabloului de
elemente se face exact la jumtate, ceea ce ar duce la un timp optim de
execuie O(nlgn). Relaia de recuren: T(n)=2T(n/2)+(n).
Aceast schem de predicie este optimal, rata sa tinznd asimptotic
cresctor spre 75%, pentru un n foarte mare de elemente de intrare.
Demonstraie:
Se consider p = (rangul pivotului) / n. Rang pivot (fie k) = cte
elemente sunt mai mici dect pivotul. Rezult p - uniform distribuit pe
intervalul (0, 1). Rezult rata de succes a prediciei se obine ca fiind f(p) =
max (p, 1-p). Cel mult k elemente mai mici dect pivotul, rezult rata
maxim de predicie corect n prima bucl "while" este p=k/n. Similar, n a
doua bucl "while", exist cel mult n-k numere mai mari dect pivotul,
rezult predicia maxim corect este: 1-p=(n-k)/n. n concluzie, rata medie
de predicie este 0.75 p p) - (1 f(p)
0 - 1
1
Ap
1
2
1
2
1
0
1
0
= + = =

dp dp dp (din teorema de
medie - integrarea funciilor continue).
Dac se ncearc compresia istoriei salturilor pentru algoritmul
Quicksort, fiecare simbol (1 / 0) va ataca intrarea unui codificator aritmetic,
care codific n concordan cu cea mai bun estimare a probabilitii
urmtorului simbol. Dac H(p)=plog
2
(1/p)+(1-p) log
2
(1/(1-p)) este funcia
entropie binar, atunci compresia ntregii istorii se face cu o rat egal cu
entropia medie, i anume
2 ln 2
1
H(p)
1
0

=

dp bii per decizie (prin compresie


practic 1 bit nu mai presupune o decizie ci 2ln2 decizii). Pentru calculul
entropiei medii sunt necesare noiuni de analiz matematic elementar:
limite de funcii n condiii de nedeterminare i integrale definite rezolvate
cu metoda integrrii prin pri. Cunoscnd c, numrul total de posibiliti
de aranjare a celor n elemente este n! (egal probabile) rezult numrul total
de bii necesari compresiei este log
2
(n!) nlog
2
n. n concluzie, algoritmul
de sortare rapid Quicksort necesit aproape sigur (2ln2)nlog
2
n decizii n
medie, ceea ce este n concordan cu estimrile de performan anterior
cunoscute [Hoa62, Sed92].


ANEXA 4
REDUCEREA COMPLEXITII UNOR
STRUCTURI MICROARHITECTURALE PRIN
DISPERSIA ADRESELOR

Termenul de "dispersie" evoc imaginea unei frmiri i amestecri
aleatoare. Prin definiie tabela de dispersie este o structur eficient de date
pentru implementarea dicionarelor. n cazul cel mai defavorabil cutarea
unui element ntr-o tabel de dispersie poate necesita la fel de mult timp ca
i cutarea unui element ntr-o list nlnuit - O(n). n anumite ipoteze
rezonabile, timpul necesar cutrii unui element ntr-o tabel de dispersie
este O(1). Tabela de dispersie reprezint o alternativ eficient la adresarea
direct ntr-un tablou cnd numrul cheilor memorate efectiv este relativ
mic fa de numrul total de chei posibile.
Dificultatea n adresarea direct, dac universul U este mare, const n
memorarea tabelului T, dat fiind limitarea resurselor a unui calculator
uzual. Mai mult mulimea K a cheilor efectiv memorate poate fi att de mic
relativ la U, nct majoritatea spaiului alocat pentru T ar fi irosit. Prin
dispersie, un element avnd cheia k este memorat n locaia h(k). "h" se
numete funcie de dispersie i este folosit pentru a calcula locaia pe baza
cheii k; h transform universul U al cheilor n locaii ale unei tabele de
dispersie T[0..m-1]. Funcia h trebuie s fie determinist (intrarea dat k
trebuie s produc ntotdeauna aceeai ieire h(k)). O funcie de dispersie
bun satisface ipoteza dispersiei uniforme simple. Se disting trei tipuri de
funcii: dispersia prin diviziune, dispersia prin nmulire i dispersia
universal.
Dezavantajul tabelelor de dispersie const n faptul c dou chei se
pot dispersa n aceeai locaie (coliziune). Exist ns tehnici eficiente
pentru rezolvarea conflictelor - evitarea sau minimizarea lor - prin alegerea
potrivit a funciei de dispersie h.
O prim metod o constituie rezolvarea coliziunii prin nlnuire.
Toate elementele ce se disperseaz n aceeai locaie sunt stocate ntr-o list
nlnuit. ntr-o tabel de dispersie n care coliziunile sunt rezolvate prin
Reducerea complexitii unor structuri microarhitecturale prin dispersia adreselor 399


nlnuire, o cutare cu i fr succes necesit, n medie, un timp O(1+), n
ipoteza dispersiei uniforme simple (dispersarea elementelor n oricare din
cele m locaii cu aceeai probabilitate, independent de locul n care s-au
dispersat celelalte elemente), unde este factorul de ncrcare al tabelei,
supraunitar.
O alt metod o constituie rezolvarea coliziunii prin adresare
deschis. Prin adresare deschis, toate elementele sunt memorate n
interiorul tabelei de dispersie. Nu exist liste sau elemente memorate n
afara tabelei, aa cum se ntmpl n cazul nlnuirii. Avantajul adresrii
deschise const n evitarea folosirii pointerilor. Spaiul de memorie
suplimentar, eliberat prin neutilizarea pointerilor, ofer tabelei de dispersie
un numr mai mare de locaii pentru acelai spaiu de memorie, putnd
rezulta coliziuni mai puine i acces mai rapid. Secvena de locaii care se
examineaz nu se determin folosind pointerii, ci se calculeaz. Inserarea
ntr-o tabela de dispersie cu adresare deschis, se face verificnd tabela pn
cnd se gsete o locaie liber n care se poate memora cheia. n loc s fie
fixat n ordinea 0, 1, ..., m-1 (care necesit un timp de cutare O(n)), irul de
poziii examinate depinde de cheia ce se insereaz.
Funcia de dispersie produce nu doar un singur numr, ci o ntreag
secven de verificare; dispersia uniform real este dificil de implementat i
n practic sunt folosite aproximri convenabile (dispersia dubl). Se disting
trei tehnici pentru calcularea secvenelor de verificare necesare adresrii
deschise: verificarea liniar, verificarea ptratic i dispersia dubl. Nici
una dintre aceste tehnici nu satisface condiia dispersiei uniforme, deoarece
nici una dintre ele nu e capabil s genereze mai mult de m
2
secvene de
verificare diferite (n loc de m! ct cere dispersia uniform). Dispersia dubl
are cel mai mare numr de secvene de verificare i d cele mai bune
rezultate.
Prin adresare deschis, factorul de ncrcare al tabelei () este
subunitar. ntr-o astfel de tabel de dispersie, n ipoteza dispersiei uniforme
i presupunnd c fiecare cheie din tabel este cutat cu aceeai
probabilitate, numrul mediu de verificri ntr-o cutare cu succes este cel
mult:
- 1
1
ln
1
.
n continuare se prezint dou aplicaii practice ale tabelelor de
dispersie n domeniul arhitecturii calculatoarelor. Pentru o mai bun
nelegere se realizeaz i un scurt memento teoretic al celor dou
subdomenii alese: organizarea sistemului ierarhic de memorie n vederea
reducerii decalajului tehnologic dintre acesta i procesoarele avansate i
creterea acuratei prediciei ramificaiilor de program.
400 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare


Accentuarea decalajului dintre viteza procesorului i cea a nivelului
inferior de memorie se datoreaz urmtorilor factori: (i) perioada de tact al
procesorului a sczut mult mai rapid dect timpul de acces la memorie
(DRAM) i (ii) tehnicile arhitecturale de proiectare pentru procesoarele
pipeline superscalare au cauzat o reducere dramatic a numrului mediu de
ciclii per instruciune (CPI). Reducerea acestui decalaj se poate realiza prin
organizarea memoriei sistem ntr-o ierarhie, cu un cache foarte rapid de tip
SRAM apropiat de CPU i o memorie principal de tip DRAM, aflat pe un
nivel inferior.
Pentru a reduce rata de miss a cache-urilor mapate direct (fr s se
afecteze ns timpul de hit sau penalitatea n caz de miss), cercettorul
Norman Jouppi a propus conceptul de victim cache - o memorie mic
complet asociativ, plasat ntre primul nivel de cache mapat direct i
memoria principal. Blocurile nlocuite din cache-ul principal datorit unui
miss sunt temporar memorate n victim cache. Dac sunt referite din nou
nainte de a fi nlocuite din victim cache, ele pot fi extrase direct din victim
cache cu o penalitate mai mic dect cea a memoriei principale [Jou90].
Schema este ns mai puin eficace pentru blocuri mari, de capaciti
tipice cache-urilor microprocesoarelor curente. Pentru a minimiza numrul
de interschimbri dintre cache-ul principal, mapat direct, i victim cache,
Stiliadis i Varma au introdus un nou concept numit selective victim cache
(SVC) [Sti94]. Mecanismul de predicie al SVC, bazat pe istoria folosirii
blocurilor, stabilete dac blocurile aduse din memoria principal sunt
plasate n cache-ul principal sau n selective victim cache. Ideea principal a
algoritmului de predicie este de a plasa blocurile, care sunt mai puin
probabil s fie accesate n viitor, n SVC iar cele mai probabil de a fi referite
n cache-ul principal. Predicia este folosit i n cazul unui miss n cache-ul
principal pentru a determina dac este necesar o interschimbare a blocurilor
conflictuale. Selective victim cache reduce rata de miss cu pn la 50%, n
funcie de dimensiunea blocului din cache. De asemenea, numrul de
interschimbri este redus cu 50% sau mai mult fa de folosirea unui victim
cache simplu [Sti94, Flo00].
Algoritmul de predicie folosete doi bii de stare asociai fiecrui
bloc, numii hit bit i sticky bit. Bitul hit este asociat logic cu fiecare bloc
din memoria principal i conine informaii despre istoria blocurilor din
cache. ntr-o implementare perfect, biii de hit trebuie memorai n nivelul
L2 de cache sau n memoria principal i adui n nivelul L1 de cache cu
blocul corespondent. Aceast abordare este impracticabil n majoritatea
cazurilor. Bitul este setat doar dac ultima dat cnd s-a aflat n cache-ul
principal a fost accesat. n cazul n care blocul a fost n cache dar nu a fost
niciodat accesat atunci bitul hit este 0. Dac blocul este nlocuit din cache-
Reducerea complexitii unor structuri microarhitecturale prin dispersia adreselor 401


ul principal (L1 cache), starea bitului de hit trebuie actualizat n L2 cache
sau n memoria central.
Bitul sticky este asociat logic cu blocul din cache-ul principal. De
aceea este normal s se memoreze acest bit n cache-ul mapat direct ca parte
a fiecrui bloc. Este setat cnd un bloc este adus pentru prima oar n cache-
ul principal. La referirea unui bloc conflictual, dac algoritmul de predicie
decide ca blocul s nu fie nlocuit din cache-ul principal atunci bitul sticky
este resetat. Dac un acces ulterior n cache-ul principal intr n conflict cu
blocul care are bitul sticky resetat, atunci blocul va fi nlocuit din cache-ul
principal.
Pentru o mai bun reflectare a istoriei blocurilor n [Flo00, Vin00a] se
generalizeaz algoritmul propus de Stiliadis, prin considerarea unor vectori
binari n locul biilor de stare hit i sticky i modificarea corespunztoare a
algoritmului de predicie. Astfel, vectorul hit va indica mai gradual rata de
utilizare a blocului din memoria central la ultima sa apariie n cache-ul
principal, n timp ce vectorul sticky exprim gradul de conflictualitate al
unui bloc din cache-ul principal, obinndu-se performane superioare ale
conceptului de SVC. Astfel s-a artat c 2 bii de "hit" respectiv "sticky",
conduc la rezultate optimale n condiii fezabile ale implementrii hardware.
Dac ierarhia de memorie include un la doilea nivel de cache, este
posibil s se memoreze biii de hit n cadrul blocurilor din acest nivel. Cnd
un bloc este adus pe nivelul L1 de cache din nivelul L2, o copie local a
bitului de hit este memorat n blocul de pe nivelul L1. Aceasta elimin
nevoia de acces a nivelului L2 de cache de fiecare dat cnd bitul hit este
actualizat de ctre algoritmul de predicie. Cnd blocul este nlocuit din
nivelul L1 de cache, bitul hit corespondent este copiat n nivelul L2. O
problem ar fi ns aceea c, multiple locaii din memoria principal sunt
forate s mpart acelai bit de pe nivelul L2. Astfel, cnd un bloc este
nlocuit de pe nivelul L2 de cache, toate informaiile lui de stare se pierd,
reducnd eficacitatea algoritmului de predicie. De fiecare dat cnd un bloc
este adus pe nivelul L2 de cache din memoria principal, bitul hit al su
trebuie setat la o valoare iniial. Pentru o secven specific de acces, valori
iniiale diferite pot produce rezultate diferite. Cu cache-urile de pe nivelul
L2 de dimensiuni mari, efectul valorilor iniiale este probabil mai mic.
O tratare alternativ este de a menine biii de hit n interiorul CPU, n
cadrul nivelului L1 de cache. n [Sti94] se propun anumite implementri
"aproximative", mai realiste, n sensul reducerii necesitilor de memorare
pentru biii de hit. Astfel de exemplu, se propune implementarea unui "hit
array", ca parte a memoriei cache principale (L1) i care permite printr-un
mecanism tip "mapare direct", mai multor bii de hit corespunztori
blocurilor memoriei principale s fie mapai n aceeai locaie a acestui "hit
402 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare


array". Lungimea irului este inevitabil mai mic dect numrul maxim de
blocuri care pot fi adresate. Deci, mai mult de un bloc va fi mapat aceluiai
bit de hit, cauznd datorit interferenelor un aleatorism ce trebuie introdus
n procesul de predicie. Cu alte cuvinte se realizeaz o mapare a biilor de
hit teoretic rezideni n memoria principal, ntr-un cache dedicat, cu
rezultate obinute prin simulri, foarte apropiate de cele generate printr-o
implementare ideal. Utilizarea unei tabele de dispersie cu rezolvarea
coliziunilor prin nlnuire sau adresare deschis cu dispersie dubl conduce
la obinerea unei performane similare cu situaia ideal (cte un bit de hit
pentru fiecare bloc din memoria principal). Tabelul A4.1 cuprinde
rezultatul unor astfel de simulri [Flo00].

Imple-
mentare
ICache
Usage
IVictim
Usage
ICache
interchg
IHIT
%
DCache
Usage
DVictim
Usage
Dcache
interchg
DHIT
%
IR
Ideal 100% 95.31% 2928 94.79 73.14% 80.86% 1265 90.26 0.85
Hashing 100% 95.31% 2876 94.78 73.14% 80.86% 1374 90.12 0.85
Tabelul A4.1. Studiu comparativ privind o implementare ideal vs. o tabel de
dispersie a biilor hit
Implementarea nivelului L1 de cache sistem este prezentat n figura
A4.1. Bitul sticky este meninut cu fiecare bloc n cache-ul principal. Nici un
bit de stare nu este necesar n victim cache. Biii de hit sunt pstrai n hit
array, adresai de o parte a adresei de memorie. Dimensiunea irului de bii
de hit este aleas ca un multiplu al numrului de blocuri din cache-ul
principal. Astfel, avem relaia:
Dimensiunea irului hit array = Numr de blocuri n cache-ul principal H
unde H determin gradul de partajare a biilor de hit de ctre blocurile
memoriei principale. Se presupune c H este o putere a lui 2, H=2
h
. Hit
array poate fi adresat de adresa de bloc concatenat cu cei mai puin
semnificativi bii h, din partea de tag a adresei. O valoare mare pentru H
implic mai puine interferene ntre blocurile conflictuale la biii de hit.
Dac H este ales ca raport dintre dimensiunea cache-ului de pe nivelul L2 i
cea a cache-ului de pe nivelul L1 (principal), atunci efectul este similar cu
meninerea biilor de hit n nivelul L2 de cache.

Reducerea complexitii unor structuri microarhitecturale prin dispersia adreselor 403



Figura A4.1. Implementarea schemei de memorare a biilor de hit
Al doilea exemplu de aplicabilitate al tabelelor de dispersie pe care l
prezint n aceast anex l constituie schemele de predicie hardware. S-a
demonstrat c istoria salturilor este insuficient pentru o mai bun corelaie
i n consecin pentru o acuratee ridicat [Vin99]. n condiiile dezvoltrii
unor arhitecturi de procesoare pipeline i cu paralelism pronunat la nivelul
instruciunii, necesitatea unui predictor hardware de salturi eficient devine
esenial. Pentru a nu se "simi" efectul defavorabil al ramificaiilor de
program asupra performanei procesoarelor avansate acurateea de predicie
trebuie s fie foarte apropiat de 100%. n acest scop, Vinan [Vin99] a
propus o nou schem de predicie adaptiv pe dou nivele cu rezultate mai
bune dect schema clasic GAp, n aceleai condiii de cost i complexitate
hardware.
Este posibil mbuntirea acurateii prediciei dac aceasta se va
baza pe comportarea recent a altor instruciuni de salt, ntruct frecvent
aceste instruciuni pot avea o comportare corelat n cadrul programului.
Schemele bazate pe aceast observaie se numesc scheme de predicie
corelat [Yeh92] (vezi figura A4.2). Exist n implementare 2 niveluri: un
registru de predicie (HRg) pe k bii (cuprinde "istoria" celor mai recent
executate k salturi din program sau comportamentul ultimelor k apariii ale
aceleiai instruciuni de salt) al crui coninut concatenat cu cei mai puini
semnificatibi bii ai PC- ului instruciunii de salt pointeaz la un cuvnt din
tabela de predicii (aceasta conine automatul de predicie - de regul un
numrtor saturat, adresa destinaie, etc).
Schemele corelate de predicie adaptiv pe dou niveluri determin
acuratei medii de 97.7%, msurate pe 9 din 10 benchmark-uri SPEC'95!
ns innd cont c, de la o acuratee de predicie de 100% la una de 97.7%,
pentru un procesor superscalar care trimite simultan spre execuie 4
404 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare


instruciuni, rata de procesare scade cu 40% de la IR=4 la IR=4/1.4=2.8
instr./ciclu, se poate spune c o acuratee de 97.7% nu este suficient.


Figure A4.2. Schema GAp complet asociativ


Figure A4.3. Schema GAp complet asociativ modificat (MGAp)
Se cunoate c este dificil de predicionat corect un salt care are un
comportament aleator n acelai context de predicie (HRg, HR
l
). Dac ns,
fiecare bit din cei k aparinnd HRg este asociat n procesul de predicie cu
PC-ul corespondent, informaia de corelaie ar fi mai complet iar acurateea
Reducerea complexitii unor structuri microarhitecturale prin dispersia adreselor 405


de predicie mai ridicat. Astfel, se va ti nu numai dac ultimele k salturi s-
au fcut sau nu ci i care anume, conform adreselor PC
1
, PC
2
, PC
k
. n
locul utilizrii doar a HRg, contextul de predicie devine mai complet i mai
complex, cuprinznd pe lng HRg i etichetele salturilor PC
1
, PC
2
, PC
k
(vezi figura A4.3). Astfel, considernd HRg pe k bii, i lungimea PC pe
minim 8 bii (suficient pentru benchmark-urile Stanford [Col93]), atunci
lungimea corespondent a tag-ului n tabela PT este n=9k. PT este complet
asociativ cu algoritm de nlocuire MPP (potenialul de performan minim)
- produsul dintre LRU (probabilitatea ca respectivul salt s fie referit din
nou) i probabilitatea ca saltul s fie taken (derivat din automatul de
predicie).
ntruct dimensiunea tabelei PT fiind redus comparativ cu contextul
bogat de predicie rezult un numr semnificativ de nlocuiri, cu o influen
negativ asupra acuratei de predicie (vezi tabelul A4.2).

Bench HRg Br.no. Prediction
Accuracy
Incorrect
predictions
Bad
target
NT
branches
No
replace
ments
sort 9 12601 74.92% 23.24% 1.83% 35.03% 0
sort 18 12601 71.67% 26.39% 1.94% 35.03% 862
sort 27 12601 68.17% 30.55% 1.29% 35.03% 2493
sort 36 12601 65.34% 33.94% 0.71% 35.03% 3380
sort 45 12601 62.97% 36.66% 0.37% 35.03% 3989

queens 9 38462 79.33% 20.62% 0.05% 49.87% 0
queens 18 38462 80.79% 19.16% 0.05% 49.87% 0
queens 27 38462 80.79% 19.16% 0.05% 49.87% 158
queens 36 38462 75.56% 24.42% 0.03% 49.87% 4612
queens 45 38462 68.95% 31.02% 0.03% 49.87% 8709

tree 9 32887 85.51% 10.67% 3.82% 26.52% 0
tree 18 32887 85.71% 10.57% 3.72% 26.52% 0
tree 27 32887 85.80% 10.79% 3.42% 26.52% 37
tree 36 32887 84.90% 11.79% 3.31% 26.52% 548
tree 45 32887 79.11% 17.78% 3.11% 26.52% 3309

puzzle 9 204527 94.65% 5.35% 0.00% 9.08% 13
puzzle 18 204527 94.45% 5.55% 0.00% 9.08% 3322
puzzle 27 204527 92.92% 7.08% 0.00% 9.08% 7349
puzzle 36 204527 91.63% 8.37% 0.00% 9.08% 10576
puzzle 45 204527 90.59% 9.41% 0.00% 9.08% 13074
Tabelul A4.2. Schema MGAp - 100 intrri (4 din 8 benchmark-uri Stanford)
Rezultatele sunt contradictorii. n primul rnd, un context "bogat" de
predicie (k - valoare mare) implic o mbuntire a performanei (acuratei
de predicie) deoarece fiecare context are asociat n PT propriul automat de
406 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare


predicie. Pe de alt parte, un context "bogat" implic o cretere a numrului
de nlocuiri, acurateea de predicie diminundu-se datorit interferenelor.
n acest sens, se impune realizarea unui compromis ntre cele dou aspecte,
materializat prin utilizarea unei tabele de dispersie cu rezolvarea coliziunilor
prin nlnuire sau adresare deschis, care s comprime prin hashing o parte
din informaia de predicie minimiznd astfel efectele defavorabile ale
interferenelor.De exemplu se poate nlocui tabela de predicie (PT)
asociativ cu una mapat direct. Fiecare locaie din PT (la fiecare index)
reprezint o list simplu nlnuit de structuri de genul <Tag, Target,
Automat Predicie>. n cazul unui conflict nu elimin ci inserez n lista
respectiv noua informaie - context, predicie, adres. La hit, se
actualizeaz doar automatul de predicie. O soluie alternativ ar putea
consta n comprimarea contextului de predicie printr-o funcie de tipul SAU
EXCLUSIV. Astfel indexarea structurii PT s-ar face cu urmtoarea
informaie: PC xor PC
1
xor PC
2
xor ... xor PC
k
concatenat sau comprimat
cu registrul de istorie global (HR
g
(k)).


ANEXA 5
OPTIMIZAREA COLIZIUNILOR N
STRUCTURILE PIPELINE
Algoritmii greedy sunt aplicai n rezolvarea problemelor de
optimizare; sunt compui dintr-o secven de pai, la fiecare pas existnd
mai multe alegeri posibile; pot fi privii ca o particularizare a tehnicii
backtracking n care se renun la mecanismul de ntoarcere. Algoritmii
greedy aleg la fiecare moment de timp soluia ce pare a fi cea mai bun la
momentul respectiv: o alegere optim, fcut local, cu sperana c va
conduce la un optim global. Cu toate acestea nu ntotdeauna conduc la
soluia optim. Timpul de calcul este polinomial (de cele mai multe ori este
necesar o sortare descresctoare a datelor de intrare n funcie de prioritatea
sau ponderea acestora la soluia global - optim). Metoda greedy este
destul de puternic i se aplic cu succes unui spectru larg de probleme de
optimizare [Cor90]:
= Problema simpl dar netrivial a selectrii activitilor.
= Proiectarea unor coduri pentru compactarea datelor - codurile Huffman.
= Algoritmii de determinare a arborelui parial de cost minim.
= Algoritmul lui Dijkstra pentru determinarea celor mai scurte drumuri
pornind dintr-un vrf.
= Algoritmii greedy produc ntotdeauna soluie optim pentru "matroizi"
(structuri combinatoriale).
= Matroizii sunt utilizai n rezolvarea problemei planificrii sarcinilor de
timp unitar, sarcini avnd anumii termeni limit de realizare i penalizri
n caz de nendeplinire.
Elemente ale strategiei greedy
n general, nu exist o modalitate de stabilire a faptului c un algoritm
greedy poate rezolva o anumit problem particular, dar exist dou
caracteristici pe care le au majoritatea problemelor care se rezolv prin
tehnici greedy:
408 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
= Proprietatea de alegere greedy (alegerile optime local conduc ntr-
adevr la o soluie optim global).
O Realizeaz diferena dintre algoritmii greedy i programarea dinamic.
La rezolvarea problemelor prin metoda programrii dinamice,
alegerea fcut la fiecare pas al algoritmului depinde de soluiile
subproblemelor. ntr-un algoritm greedy alegerea fcut reprezint
soluia cea mai bun la momentul respectiv, subproblema rezultat
fiind rezolvat dup ce alegerea este fcut. Alegerea fcut de un
algoritm greedy poate depinde de alegerile fcute anterior, dar nu
poate depinde de alegerile viitoare sau soluiile subproblemelor.
O Programarea dinamic rezolv subproblemele n manier "bottom -
up" iar strategia greedy progreseaz n maniera "top - down", realiznd
alegeri greedy succesive, reducnd iterativ dimensiunea problemei
iniiale.
O Proprietatea de alegere greedy se demonstreaz astfel:
Se examineaz o soluie optim local.
Se arat c soluia poate fi modificat astfel nct la fiecare pas
este realizat o alegere greedy, iar aceast alegere reduce
problema la una similar dar de dimensiuni mai reduse.
Se aplic principiul induciei matematice pentru a arta c o
alegere greedy poate fi utilizat la fiecare pas. ntruct o alegere
greedy conduce la o problem de dimensiuni mai mici reduce
demonstraia corectitudinii la demonstrarea faptului c o soluie
optim trebuie s evidenieze o substructur optim.
= Substructura optim (dac o soluie optim a problemei conine soluii
optime ale subproblemelor).
O Proprietatea este exploatat att de metoda greedy ct i de cea a
programrii dinamice.
ntruct algoritmii greedy sunt aplicai n probleme de optimizare, o
conexiune cu domeniul arhitecturii calculatoarelor o constituie problema
gestionrii unei structuri pipeline date, caracterizat de un vector de
coliziune astfel nct s se obin o rat de procesare maxim [Vin00].
Problema apare destul de des n realitate i se datoreaz hazardurilor
structurale, generate de insuficiena resurselor hardware.
Cea mai important caracteristic arhitectural a microprocesoarelor
RISC scalare o constituie procesarea pipeline a instruciunilor i datelor.
Aproape toate celelalte caracteristici arhitecturale ale procesoarelor RISC au
scopul de a adapta structura acestora la procesarea pipeline. Este
binecunoscut faptul c tehnica de procesare pipeline reprezint o tehnic
de procesare paralel a informaiei prin care un proces secvenial este

Optimizarea coliziunilor n structurile pipeline 409
divizat n subprocese, fiecare subproces fiind executat ntr-un segment
special dedicat i care opereaz n paralel cu celelalte segmente. Fiecare
segment execut o procesare parial a informaiei. Rezultatul obinut n
segmentul i este transmis n tactul urmtor spre procesare segmentului (i+1).
Rezultatul final este obinut numai dup ce informaia a parcurs toate
segmentele, la ieirea ultimului segment. Diversele procese se pot afla n
diferite faze de prelucrare n cadrul diverselor segmente, simultan.
Suprapunerea procesrilor este posibil prin asocierea unui registru de
ncrcare (latch) fiecrui segment din pipeline. Registrele produc o separare
ntre segmente astfel nct fiecare segment s poat prelucra date separate.
Exist ns i evenimente nedorite (hazarduri), care pot apare n
procesarea pipeline i care duc la stagnarea procesrii, avnd o influen
negativ asupra ratei de execuie a instruciunilor. Conform unei clasificri
consacrate aceste hazarduri sunt de 3 categorii : hazarduri structurale, de
date i de ramificaie.
Hazarduri structurale (HS) sunt determinate de conflictele la resurse
comune (atunci cnd mai multe procese simultane aferente mai multor
instruciuni n curs de procesare, acceseaz o resurs comun). Pentru a le
elimina prin hardware, se impune de obicei multiplicarea acestor resurse.
Exemple:
Un procesor care are un set de regitri generali de tip uniport i n
anumite situaii exist posibilitatea ca 2 procese s doreasc s scrie n
acest set simultan.
O situaie similar poate apare dac se ncearc accesul simultan la
memorie a 2 procese distincte: unul de aducere a instruciunii (IF), iar
cellalt de aducere a operandului sau scriere a rezultatului n cazul
unei instruciuni LOAD / STORE (nivelul MEM). Aceast situaie se
rezolv n general printr-o arhitectur Harvard a busurilor i cache-
urilor (busuri i spaii de memorie separate pentru instruciuni i date).
Se consider n continuare, o structur pipeline cu 5 nivele avnd
timpul de"setup" de 7 cicli, a crei funcionare este descris n tabelul A5.1.
Ciclu/
Nivel
T1 T2 T3 T4 T5 T6 T7
N1 X
N2 X X
N3 X X
N4 X X
N5 X
Tabelul A5.1. Descrierea funcionrii unei structuri pipeline cu 5 nivele

410 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
Un X n tabel semnific faptul c n ciclul Ti nivelul Nj este activ
adic proceseaz informaii. Se consider c aceast structur pipeline
corespunde unui anumit proces (procesarea unei instruciuni). Se observ c
un alt proces de acest tip, nu poate starta n ciclul urmtor (T2) datorit
coliziunilor care ar putea s apar ntre cele dou procese pe nivelul (N2,
T3) i respectiv (N3, T4). Mai mult, urmtorul proces n-ar putea starta nici
mcar n T3 din motive similare de coliziune cu procesul anterior n nivelul
(N4, T6). n schimb procesul urmtor ar putea starta n T4 fr a produce
coliziuni sau hazarduri structurale cum le-am denumit, deci la 2 cicli dup
startarea procesului curent.
Se definete vectorul de coliziune al unei structuri pipeline avnd
timpul de setup de (N+1) cicli, un vector binar pe N bii astfel: dac bitul i,
i {1, ..., N} e 1 logic atunci procesul urmtor nu poate fi startat dup i cicli
de la startarea procesului curent, iar dac bitul i este 0 logic, atunci procesul
urmtor poate fi startat dup i cicli fr a produce coliziuni cu procesul
curent. Se observ pentru structura pipeline anterioar c vectorul de
coliziune este 110000, nsemnnd deci c procesul urmtor nu trebuie startat
n momentele T2 sau T3, n schimb poate fi startat fr probleme oricnd
dup aceea.
Se pune problema: cum trebuie gestionat o structur pipeline dat,
caracterizat printr-un anumit vector de coliziune, asftel nct s se obin
o rat de procesare (procese / ciclu) maxim ? ntruct este o problem de
optim, este posibil o soluie alegnd o strategie greedy.
Considernd o structur pipeline cu timpul de "setup" de 8 cicli i
avnd vectorul de coliziune 1001011 ar trebui procedat ca n figurile
urmtoare (vezi figurile A5.1 i A5.2):


Figura A5.1 Principiul de lansare procese ntr-o structur pipeline cu hazarduri
structurale

Optimizarea coliziunilor n structurile pipeline 411


Figura A5.2. Graful de optimizare ntr-o structur pipeline

Vectorul unei stri Sj, se obine dup relaia:
Vj = (VC) V (Vi
*
(m)) ,
V = SAU logic
VC = vector coliziune
Vi
*
(m) = vectorul Vi deplasat logic la stnga cu (m) poziii binare


Figura A5.3. Trecerea dintr-o stare n alta
Pentru maximizarea performanei, se pune problema ca pornind din
starea iniial a grafului, s se determine un drum nchis n graf cu
proprietatea ca NS / L s fie maxim, unde NS = numrul de stri al
drumului iar L = lungimea drumului. n cazul anterior considerat, L = 3 + 5
+ 3 + 2 = 13, iar NS = 4. Printr-o astfel de gestionare a structurii se evit
coliziunile i se obine o performan optim de 4 procese n 13 cicli, adic
0.31 procese / ciclu. De menionat c o structur convenional ar procesa

412 Predicia dinamic a valorilor n microprocesoarele generaiei urmtoare
doar 0.125 procese / ciclu. Nu ntotdeauna startarea procesului urmtor
imediat ce acest lucru devine posibil ("greedy strategy"), conduce la o
performan maxim. Un exemplu n acest sens ar fi o structur pipeline cu
vectorul de coliziune asociat 01011 (vezi figura A5.4). E adevrat ns c o
asemenea strategie conduce la dezvoltarea unui algoritm mai simplu.
Performana maxim a unei structuri pipeline se obine numai n ipoteza
alimentrii ritmice cu date de intrare. n caz contrar, gestiunea structurii se
va face pe un drum diferit de cel optim n graful vectorilor de coliziune.


Figura A5.4. Exemplu ce arat c nu ntotdeauna strategia greedy determin
performana maxim
Dup cum se observ ntr-o strategie greedy performana obinut este
de 2/7=0.286 procese / ciclu n timp ce (vezi arcul ngroat din figura A5.4)
o strategie non-greedy conduce la o performan mai bun (0.333 procese /
ciclu).
Se consider n continuare o structur pipeline bifuncional capabil
s execute 2 tipuri de procese: P1 i respectiv P2. Aceste procese sunt
descrise prin tabele adecvate, n care se arat ce nivele solicit procesul n
fiecare ciclu. Este clar c aceste procese vor fi mai dificil de controlat.
Pentru controlul acestora prin structur, este necesar a fi determinai mai
nti vectorii de coliziune i anume: VC(P1, P1) , VC(P1, P2), VC(P2, P1) i
VC(P2, P2), unde VC(Pi, Pj) reprezint vectorul de coliziune ntre procesul
curent Pi i procesul urmtor Pj. Odat determinai aceti vectori n baza
tabelelor de descriere aferente celor dou procese controlul structurii s-ar
putea face prin schema de principiu din figura A5.5.
Iniial registrul "P1 control" conine VC(P1, P1), iar registrul "P2
control" conine VC(P2, P2). Procesul urmtor care se dorete a fi startat n
structur va face o cerere de startare ctre unitatea de control. Cererea va fi

Optimizarea coliziunilor n structurile pipeline 413
acceptat sau respins dup cum bitul cel mai semnificativ al registrului de
control este 0 sau 1 respectiv. Dup fiecare iteraie, registrul de control se va
deplasa logic cu o poziie la stnga dup care se execut un SAU logic ntre
coninutul registrului de control, cile (A) i (B) respectiv cile de date (C)
i (D), cu nscrierea rezultatului n registrul de control. Se observ n acest
caz c gestionarea proceselor se face dup o strategie de tip "greedy".




Figura A5.5. Controlul unei structuri pipeline bifuncionale

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