Upload
nguyennguyet
View
245
Download
5
Embed Size (px)
Citation preview
Supliment 2008Reproducerea cvasiintegralǎ a cursului
COS 598A, Parallel Architecture and Programming,predat la Princeton University, Princeton N.J., U.S.A.Traducerea (nu fǎrǎ defecte): Gheorghe M.Panaitescu
1
Introducere
Paginile care urmeazǎ sunt reproducerea cursului COS 598A, Parallel Architecture and Programming, tinut la Universitatea Princeton din Statele Unite în primǎvara anului 2007 pentru studenti de profiluri diverse interesati de calculul paralel. Am gǎsit multe idei noi, proaspete în acel curs si am considerat potrivit a le aduce în zona de interes a studentilor ca o utilǎ completare la materialul existent deja, afisat încǎ în anul scolar precedent.
Versiunea în limba românǎ care poate fi cititǎ în continuare pleacǎ de la prezentǎrile sustinute vizual si verbal în fata studentilor de la universitatea amintitǎ si este în oarecare mǎsurǎ dezvoltatǎ prin consultarea altor câteva surse ajutǎtoare.
Figurile sunt preluate aproape în totalitate din sursa COS 598A: în graba de a aduce studentilor de la Calculatoare material de studiu nou, numai o micǎ parte din diagrame si figuri a fost re-fǎcutǎ si înzestratǎ cu comentarii în limba românǎ. Aceastǎ carentǎ este pe alocuri suplinitǎ prin comentarii suplimentare în text si prin note de subsol.
Acest supliment de informatii tehnico-stiintifice din domeniu ar putea capta, credem, interesul studentilor cǎrora le este destinat.
2
Generalitǎti asupra arhitecturilor paralel si asupra modelelor de programare
Ce este un calculator paralel?
Un calculator paralel este o reuniune de elemente procesoare care coopereazǎ la rezolvarea rapidǎ, acceleratǎ a unor probleme de amploare.Câteva aspecte majore care fac din calculatoarele paralel o specie aparte de sisteme de calcul: • Alocarea de resurse: cât de cuprinzǎtoare este reuniunea de elemente, cât de
puternice sunt elementele componente, câtǎ memorie este implicatǎ.• Accesul la date, comunicarea si sincronizarea: cum coopereazǎ si cum
comunicǎ componentele, cum se transmit datele între procesoare, care sunt în esentǎ formele primare de coperare (acele abstractions si primitives).
• Performantele si scalabilitatea: cum se traduc toate aceste elemente de structurǎ în performante, cum se pot (dacǎ se pot) scala1 performantele.
De ce este necesar paralelismul?
• Paralelismul furnizeazǎ o alternativǎ în ceea ce priveste performanta la ceasul (clock) dorit a fi mai rapid si mai rapid. Admitând o dublare a performantei efective pe nod la fiecare 2 ani, un sistem cu 1024 de unitǎti procesoare centrale (CPU) poate produce o perfomantǎ pe care o poate avea un singur CPU în 20 de ani.
• Paralelismul se aplicǎ la toate nivelurile de proiectare a sistemului.• Paralelismul este din ce în ce mai în centrul problemelor mari de procesare
a informatiei. Câteva exemple: calculele stiintifice: simularea, analiza datelor, managementul si stocarea informatiei etc.; calculele de interes comercial: procesarea tranzactiilor, exploatarea bazelor de date; aplicatiile Internet: operatii de cǎutare, Google opereazǎ cu cel putin 50.000 de procesoare, multe din ele ca parte a unor mari sisteme paralel.
Cum se pot studia sistemele paralel?
1 Scalabil – scalabilitate. Cuvinte populare printre specialistii IT, care se referǎ la cât de bine se poate adapta un sistem hardware sau software la cerinte în crestere. De pildǎ, un sistem în retea scalabil este un sistem care poate fi alcǎtuit la început din câteva noduri dar care poate fi extins cu usurintǎ la mii de noduri. Scalabiltatea poate fi o caracteristicǎ foarte importantǎ deoarece ea aratǎ cǎ se poate face o investitie într-un sistem cu siguranta cǎ cresterea lui ulterioarǎ este deplin posibilǎ.
3
Istoric: diverse structuri organizationale inovatoare legate adesea de modele noi de programare. Solutiile s-au maturizat rapid sub puternice influente si restrictii tehnologice: microprocesoarele sunt de-acum omniprezente, iar laptop-urile si supercalculatoarele sunt în esentǎ similare, trendul tehnologic face ca tratǎrile diverse sǎ fie convergente. Aceleasi tendinte tehnologice fac calculul paralel inevitabil, îl aduc pe curentul principal al preocupǎrilor din domeniu.Apare necesitatea întelegerii nu numai a clasificǎrilor/ierarhizǎrilor ci si a principiilor fundamentale si a compromisurilor urmǎrite în proiectare: identificare, ordonare, multiplicare, performatele în comunicare.
Fortele motoare ale calculului paralel
Necesitǎtile aplicative, pofta de calcul generalǎ si insatiabilǎ: calcule stiintifice (în mecanica fluidelor, în biologie, în chimie, în fizicǎ …), calcule de uz general (video, graficǎ, CAD, baze de date, procesarea tranzactiilor…), aplicatii de Internet (cǎutare, comert electronic, clustering…)Trendul tehnologic.Trendul arhitecturilor.Aspectele economice.Tendintele curente:Toate microprocesoarele au suport pentru multiprocesare (MP) externǎ.Serverele si statiile de lucru sunt fǎrǎ exceptie MP-uri: Sun, SGI, Dell, COMPAQ…Microprocesoarele sunt ele însesi multiprocesoare.S-a realizat cu deplin succes multiprocesarea pe acelasi cip (SMP – Symmetric MultiProcessors).
Trendul aplicatiilor
Frecventa ceasului si (implicit) durata unui ciclu sunt caracteristici fundamental determinante în ceea ce priveste performanta sistemelor de calcul. Cererea de cicluri în numǎr cât mai mare în unitatea de timp alimenteazǎ progresele hardware si reciproc. Numǎrul în crestere de cicluri la secundǎ provoacǎ o crestere exponentialǎ a performantelor microprocesoarelor.Existǎ totodatǎ o presiune puternicǎ pe arhitecturile paralel, prin aparitia unor aplicatii foarte pretentioase.Cererea de amplificare a performantelor: sunt cerute performante ale sistemelor la un cost progresiv crescǎtor; se poate vorbi de o piramidǎ a platformelor de calcul.Telul în alicatiile care utilizeazǎ masini parelel este accelerarea (speedup):
)1()()(
procesoraPerformantprocesoarepaPerformantprocesoarepSpeedup =
Pentru o problemǎ de dimensiune fixǎ, performanta = 1/timp.
4
)()1()(
procesoarepTimpulprocesorTimpulprocesoarepSpeedup fixaproblema =
Cerintele calculelor stiintifice
Cerintele calculelor stiintifice sunt si acestea permanent în crestere: precizie mai mare, modelare pe niveluri superioare, cunostinte pe niveluri superioare, analiza unor cantitǎti de datemari la modul exploziv.Exemple din domeniul nr.1: modelarea climaticǎ si ecologicǎ.Aproximativ în 2010: rezolutia actualǎ mai curând simplǎ, timpul acoperit prin simulare si indicatiile fizice îmbogǎtite duc la o crestere a pretentiilor cu factori de la 104 la 107. Predictia mai sigurǎ (more reliable) a încǎlzirii globale, a dezastrelor naturale, a vremii vor fi de actualitate la sfârsitul deceniului curent.Aproximativ în 2015: vor fi implementate modele predictive ale distrugerii pǎdurilor tropicale, modele de sustenabilitate a pǎdurilor terrei, vor fi cuprinse efectele schimbǎrilor climatice asupra ecosistemelor si asupra surselor de alimente, se vor modela tendintele globale în sǎnǎtate.Aproximativ în 2020: modele verificate si verificabile ale ecosistemelor si epidemice globale, integrarea efectelor macro cu efectele locale si apoi cu micro efectele, efectele predictive ale activitǎtilor umane asupra suportului vietii pe pǎmânt, întelegerea sistemelor vii de pe pǎmânt.Exemple din domeniul nr.2: teme din biologie.Aproximativ în 2010: diagnoza molecularǎ computerizatǎ ex vivo si apoi in vivo.Aproximativ în 2015: vaccinuri pe bazǎ de model, medicina individualizatǎ, integrarea cuprinzǎtoare a datelor biologice (cele mai multe co-analizabile), modelul complet al unei celule.Aproximativ în 2020: modelul complet al tesuturilor/organismelor multicelulare, medicamente dezvoltate pur in-silico, medicamente inteligente personalizate, întelegerea sistemelor biologice complexe, celulele si organismele în ecosisteme, modele predictive verificabile ale sistemelor biologice.
Cerinte de calcul ingineresc
Masini paralele mari devin pǎrti principale în multe industrii: analiza rezervelor de petrol, simularea coliziunilor între vehicole de diferite tipuri, analiza de aderentǎ la frânare, eficienta combustiei în automobile, analiza deplasǎrii, eficienta motoarelor, mecanica structurilor, electromagnetismul în aeronauticǎ, proiectarea asistatǎ de calculator (CAD), modelarea molecularǎ în industria farmaceuticǎ, vizualizarea în domeniile deja mentionate dar si în industria de entertainment (cinematografie), arhitecturǎ (deplasǎri virtuale, interpretare), modelarea financiarǎ (randamente si analize derivate) etc.
5
Curbe de învǎtare pentru aplicatii paralele
Programul AMBER de simulare a dinamicii moleculare.Punctul de plecare a fost codul vectorial pentru masina Cray-1.Pe masina Cray90 – 145 Mflops, pe Paragon cu 128 de procesoare – 406 Mflops în versiunea finalǎ, pe Cray T3D cu 128 de procesoare – 891 Mflops.
Calcule de interes comercial
Calculele de interes comercial se bazeazǎ de asemenea, pentru scopuri înalte pe paralelism. Scara calculelor nu este asa de mare dar utilizarea este mult mai larg rǎspânditǎ. Puterea de calcul determinǎ scara la care se poate actiona pe o afacere.Bazele de date, procesarea tranzactiilor în timp real, suportul decizional, data mining, data warehousing s.a.Transaction Processing Performance Council (TPC) benchmarks (TPC-C order entry, TPC-D decision support): sunt furnizate criterii de scalare explicite (dimensiunea întreprinderii se scaleazǎ cu sistemul), dimensiunea problemei nu mai este fixatǎ/limitatǎ asa încât capacitatea de prelucrare este o mǎsurǎ a performantei (tranzactii pe minut, tpm).Comert electronic (e-commerce), cǎutare si alte servicii internet scalabile: aplicatii paralel care sunt executate pe clustere, dezvoltarea de noi modele si primitive software paralel.Examinare a analizei automate a datelor disparate de mare cuprindere.
6
Paralelismul este penetrant în domenii variate.Este foarte important atât paralelismul la scarǎ micǎ cât si cel la scarǎ moderatǎ.Este dificil a obtine instantanee (snapshot) pentru a compara platforme produse de producǎtori diferiti.
Sumar al tendintelor aplicative
Trecerea la calculul paralel s-a produs în zona stiintificǎ si inginereascǎ.De asemenea a apǎrut în calculul comercial: tranzactii cu bazele de date, zona financiarǎ; serviciile internet scalabile (cel putin paralelismul de granulatie grosierǎ).Programele pentru calculatoarele de birou utilizeazǎ si ele mai multe fire care sunt în mare mǎsurǎ asemenea programelor paralele.Cererea de capacitate mai mare pentru sarcinile secventiale: foarte largǎ utilizare a multiprocesoarelor de scarǎ micǎ.Cererea de aplicatii solide îsi mentine cresterea în timp.
Performance(tpmC)
Price-performance($/tpmC)
PerformancPerformanc Price-Price- 342K
19K 40K 57K
165K234K
12K7K0
50,0100,0150,0200,0250,0300,0350,0400,0
1996 1997 1998 1999 2000 2001 200 2003 $$1$2$3$4$5$6$7$8$9$10
7
4-wayCpq PL 5000
Pentium Pro 200 MHz
6,751 tpmC$89.62/tpmC
Avail: 12-1-96TPC-C v3.2(withdrawn)
4-wayCpq PL 5000
Pentium Pro 200 MHz
6,751 tpmC$89.62/tpmC
Avail: 12-1-96TPC-C v3.2(withdrawn)
8-wayDell PE 8450PIII Xeon 700
MHz57,015 tpmC$14.99/tpmC
Avail: 1-15-01TPC-C v3.5(withdrawn)
32-wayUnisys ES7000
Xeon MP 2 GHz234,325 tpmC$11.59/tpmC
Avail: 3-31-03TPC-C v5.0
32-wayNEC Express5800
Itanium2 1GHz342,746 tpmC$12.86/tpmC
Avail: 3-31-03TPC-C v5.0
6-wayUnisys AQ HS6Pentium Pro 200
MHz12,026 tpmC$39.38/tpmC
Avail: 11-30-97TPC-C v3.3(withdrawn)
8-wayCpq PL 8500PIII Xeon 550
MHz40,369 tpmC$18.46/tpmC
Avail: 12-31-99TPC-C v3.5(withdrawn)
32-wayUnisys ES7000PIII Xeon 900
MHz165,218 tpmC$21.33/tpmC
Avail: 3-10-02TPC-C v5.0
Provocarea majorǎ pentru toatǎ lumea este de a face programarea paralel mai usoarǎ: a profita de paralelismul penetrant cu sisteme multi-core.
Trendul tehnologic: cresterea microprocesoarelorP
erfo
rman
ce
0.1
1
10
100
1965 1970 1975 1980 1985 1990 1995
Supercomputers
Minicomputers
Mainframes
Microprocessors
Blocul de multiprocesoare este acum practic si cel mai rapid.
Performantele microprocesoarelor cresc anual cu 50-100%.Frecventa ceasurilor se dubleazǎ la fiecare trei ani.Numǎrul de tranzistoare se multiplicǎ cu patru la fiecare trei ani. Legea lui Moore: xtors pe cip = 1,59anul – 1959 (initial 2anul – 1959).Investitia imensǎ pe fiecare generatie este antrenatǎ de o piatǎ de commodity imensǎ.Cu fiecare scalare cu n a dimensiunii caracteristice (a unui element de cip) se obtin O(n2) tranzistori si frecventa posibilǎ a ceasului creste de O(n).Ar trebui sǎ obtinem o crestere a performantelor de O(n3). Se obtine? Sǎ vedem trendul arhitecturilor.
8
Scalarea cipului (die) si a dimensiunii caracteristice (feature size): cipul creste cu 7% pe an, dimensiunea caracteristicǎ scade cu 25-30%
Frecventa ceasului (familia Intel) creste anual cu o ratǎ de 30%.
9
Numǎrul de tranzistori (familia Intel) creste mai rapid decât frecventa ceasului, 40% pe an, o contributie mai mare cu un ordin de mǎrime în circa douǎ decenii.Lǎrgime/spatiu (width/space) are un potential mai mare decât viteza pe unitate.
Cum se pot utiliza mai multi tranzistori?
Sporirea performantei pe un singur fir prin arhitecturǎ: nu tine pasul cu potentialul dat de tehnologie.Utilizarea tranzistorilor pentru structuri de memorie pentru cresterea localismului datelor: nu aduce prea mari avantaje (de douǎ ori la de patru ori dimensiunea cahe-ului).Utilizarea paralelismului la nivel de instructiune, la nivel de fir.
Performantele microprocesoarelor
10
Limita de jos: nu pentru cǎ performanta pe un singur fir s-a plafonat, ci pentru cǎ paralelismul este natural pentru a rǎmâne pe o curbǎ mai bunǎ.
O poveste similarǎ pentru memorare (numǎr de tranzistori)
Povestea este cam aceeasi pentru memoria DRAM
11
Divergenta dintre capacitatea de memorare si viteza de calcul mai pronuntatǎ. Capacitatea a crescut de 1000 de ori între 1980 si 1995 si creste în continuare cu 50% pe an. Latenta se reduce cu numai 3% pe an (numai de douǎ ori în cei 15 ani mentionati). Banda de trecere pentru cipul de memorie creste de douǎ ori mai repede decât se reduce latenta.
Memoriile mai mari sunt mai lente în timp ce procesoarele sunt în crestere de vitezǎ. Apare necesitatea transferului de date în paralel. Ierarhia memoriilor cache se adânceste. Cum se organizeazǎ memoria cache?Paralelismul creste dimensiunea eficientǎ a fiecǎrui nivel al ierarhiei fǎrǎ a creste timpul de acces.Paralelismul si localismul în memoria sistemului, asemenea: conceptiile noi regǎsesc multi biti în cipul de memorie, urmeazǎ un transfer rapid în sistemul pipeline prin interfete mai înguste. Bufferele debiteazǎ (caches) datele accesate cele mai recent.Cu discurile la fel: discuri paralele si sectiuni cache.În general, cresterea dramaticǎ a vitezelor de care sunt capabile procesoarele, capacitatea de memorare si banda de trecere fatǎ de latente (în special) si fatǎ de viteza ceasurilor aratǎ spre paralelism ca directie de urmat din punct de vedere arhitectural.
Trendul arhitectural
Arhitectura traduce oferta tehnologiei în performante si abilitǎti.Rezolvǎ echilibrul între paralelism si localism. Microprocesoarele recent confectionate calculeazǎ 1/3 din timp, opereazǎ cache 1/3 din timp, se conecteazǎ cu alte echipamente 1/3 din timp. Echilibrul se poate negocia încǎ o datǎ cu scara si cu progresele tehnologice.Patru generatii în istoria arhitecturilor: tubul, tranzistorul, circuitele integrate si circuitele integrate pe scarǎ largǎ (VLSI). Ne concentrǎm aici numai pe generatia VLSI.
12
Cea mai importantǎ delimitare în VLSI a fost în ceea ce priveste scara/tipul de paralelism exploatat.
Trendul arhitectural în paralelism
Pânǎ în 1985: paralelismul la nivel de biti: 4 biti → 8 biti → 16 biti. Încetineste dupǎ 32 de biti. Adoptarea arhitecturii pe 64 de biti este în derulare mai mult decât promitǎtoare. Adoptarea arhitecturii pe 128 de biti este îndepǎrtatǎ si nu din motive de performante. Marea schimbare a adus-o structura cu 32 de biti când microprocesorul si memoria cache au încǎput, s-au potrivit pe un acelasi cip. Pipeline-ul de bazǎ, suportul hardware pentru operatii complexe cum este multiplicarea FP (floating point) etc. au adus cresteri de performate de O(n3). Intel: 4004 la 386.Între anii ’80 mijlocii si anii ’90 mijlocii se dezvoltǎ paralelismul la nivel de instructiune. Sistemul pipeline si seturile de instructiuni simple plus dezvoltarea compilatoarelor (RISC). Memorii cache mai mari pe cip, dar o ratǎ de ratǎri de numai pe jumǎtate la o cvadruplare a dimensiunii memoriei cache. Mai multe unitǎti functionale, executii superscalare, dar scalarea performantelor limitatǎ. Crestere în performante de O(n2). Intel: 486 la Pentium III/IV.Dupǎ mijlocul deceniului ultim al secolului trecut, rafinament mai mare: executii în afara ordinei (out-of-order), executie speculativǎ, executie predictivǎ. Toate acestea pentru a rezolva problemele de transfer al controlului si de latenţǎ. Procesoare de foarte mare cuprindere (issue): în multe aplicatii nu ajutǎ prea mult, necesitǎ exploatarea firelor multiple (SMT – Simultaneous Multi-Threading). Complexitatea sporitǎ si cresterea geometriei duce la o încetinire: fire globale lungi, timp de acces la date în crestere, timp pentru market.Pasul urmǎtor: paralelismul la nivel de fire (threads).
Ne poate duce nivelul instructiunilor acolo?
Accelerǎri (speedups) pentru procesoare superscalare publicate în literaturǎ:• Horst, Harris si Jardine [1990] ............................ 1,37• Wang si Wu [1988] ............................................. 1,70• Smith, Johnson si Horowitz [1989] ..................... 2,30• Murakami si altii [1989] ...................................... 2,55• Chang si altii [1991] ............................................ 2,90• Jouppi si Wall [1989] .......................................... 3,20• Lee, Kwok si Briggs [1991] ................................ 3,50• Wall [1991] .......................................................... 5• Melvin si Patt [1991] ........................................... 8• Butler si altii [1991] ............................................. 17+
13
O gamǎ mare de valori din cauza diferenţelor între domeniile aplicaţiilor studiate (numerice sau non-numerice), din cauza capabilitǎţilor diferite ale procesoarelor modelate.
Potentialul ideal al paralelismului la nivel de instructiune (ILP)
0 1 2 3 4 5 6+0
5
10
15
20
25
30
●
●
●● ●
0 5 10 150
0.5
1
1.5
2
2.5
3
Frac
tion
of to
tal c
ycle
s (%
)
Number of instructions issuedS
peed
upInstructions issued per cycle
Banda de trecere la regǎsire (fetch) si resurse infinite, predicţia perfectǎ a ramificaţiilor, redenumire perfectǎ. Memorii cache reale si latenţe nule pentru ratǎri.
Rezultatele studiilor de paralelism la nivelul instructiunilor
Studiile acestea s-au concentrat asupra paralelismului în masinile 4 issue.
1 x
2 x
3 x
4 x
J o u p p i _ 8 9 S m i t h _ 8 9 M u r a k a m i _ 8 9 C h a n g _ 9 1 B u t l e r _ 9 1 M e l v i n _ 9 1
1 b r a n c h u n i t / r e a l p r e d i c t i o n
p e r f e c t b r a n c h p r e d i c t i o n
14
Studiile realiste aratǎ o accelerare nu mai mare decât dublǎ. Mai de curând se cerceteazǎ ILP (Instruction Level Parallelism) care priveste la fire pentru paralelism.
Banda de trecere a bus-ului: sistemul Intel
Bus-urile scaleazǎ?
Bus-urile sunt o cale convenabilǎ de a extinde arhitectura la paralelism, dar nu sunt scalabile. Banda de trecere nu creste pe mǎsurǎ ce sunt adǎugate CPU-uri.Sistemele scalabile utilizeazǎ memorii fizic distribuite.
Switch
P$
XY
Z
External I/O
Memctrl
and NI
Mem
15
Aspecte economice
Costurile de fabricatie sunt grosier de O(1/dimensiunea caracteristicǎ). Produsele de 90 nm costǎ circa 1-2 milarde de dolari. Astfel, fabricatia procesoarelor este costisitoare.Numǎrul de proiectanti sunt, tot asa, de O(1/dimensiunea caracteristicǎ). Procesorul 4004 de 10 microni are 3 proiectanti. Procesoarele recente de 90 nm beneficiazǎ de 300. Proiectele noi sunt foarte costisitoare.Existǎ o presiune spre consolidarea tipurilor de procesoare.Complexitatea procesoarelor este din ce în ce mai costisitoare.Partea de bazǎ (cores) se reutilizeazǎ dar dezvoltarea este si ea costisitoare.
Complexitatea proiectǎrii si productivitatea
Complexitatea proiectului depǎseste productivitatea umanǎ.
Microprocesoarele obisnuite (commodity price) sunt nu numai rapide dar sunt si ieftine. Costul dezvoltǎrii este de zeci de milioane de dolari. Dar sunt vândute mult mai multe comparativ cu supercalculatoarele. Acesta este un fapt crucial pentru a profita de investiţie si de a uza de blocul constructiv “community”. Arhitecturile paralel exotice nu se fac decât pentru scopuri speciale.Multiprocesoarele sunt opţiunea presantǎ a producǎtorilor de software (de pildǎ pentru baze de date) dar si a producǎtorilor de hardware.Standardizarea de la Intel genereazǎ SMP-uri mici, bazate pe bus, de natura “commodity”.
16
Dar ce se poate spune despre proiectarea perocesorului pe cip?
Reluǎm: numǎrul de tranzistori creste rapid; metodele de utilizat pentru performatele la rularea uni-fir sunt pe cale de a pierde din avânt; problemele cu memoria pledeazǎ si ele pentru paralelism; paralelismul la nivel de instructiune este limitat si necesitǎ trecerea la nivelul de fire; consolidarea este o fortǎ redutabilǎ; totul pare a indica spre mai multe cores mai simple si nu spre un core unic mare si complex; argumente cheie suplimentare: fire (wires), putere (power), cost.
Întârzierea pe fire
Scǎderea/prǎbusirea întârzierii portilor, cresterea întârzierii interconectǎrii globale au condus la fire locale scurte.
Puterea
17
Puterea disipatǎ în procesoarele Intel de-a lungul timpului
Puterea si performanţele
Puterea
Puterea creste odatǎ cu numǎrul de tranzistoare si cu frecventa ceasului.Puterea creste cu tensiunea: P = CV2f.Trecând de la 12 V la 1,1 V se reduce consumul de putere de 120 de ori în 20 de ani.Se preconizeazǎ ca în 2018 voltajul sǎ fie 0,7 V. Asta micsoreazǎ puterea de numai 2,5 ori,
18
Vârful de putere pe cip în proiect: Itanium II a fost de 130 W, Montecito de 100 W. Puterea este o restrictie în proiectare de prim ordin.Tehnicile de alimentare la nivelul circuitelor practic aproape de ceea ce trebuie: porti pentru ceas, praguri multiple, tranzistori transversali (clock gating, multiple thresholds, sleeper transistors)
Puterea si frecvenţa ceasului
Douǎ generatii de procesoare; douǎ dimensiuni caracteristice
Implicatiile arhitecturǎ-putere
Mai puţini tranzistori în “core”, eficienţǎ mai mare la putere. Editare (de instrucţiuni) mai scurtǎ, pipeline mai scurt, ferestre OOO (Object Oriented Operations) mai mici; readuce performanţele procesoarelor pe curba O(n3); dar scad performanţele firului unic.Care complexitate este de eliminat? Speculaţia, multifirele, …? Toate sunt bune sub un aspect, dar trebuie avut grijǎ de raportul putere/beneficii.
19
Previziuni ITRS (International Technology Roadmap for Semiconductors)
Numǎrul mai mare de procesoare pe cip va duce la depǎsirea performantele procesorului individual
20
Costul dezvoltǎrii unui cip
Inginerie non-recursivǎ, costuri repede crescǎtoare pe mǎsurǎ ce complexitatea depǎseste productivitatea
Costurile recurente pe piesǎ (die) (1994)
21
Sumarul a ceea ce este/poate fi pe un cip
Dincolo de argumentele în favoarea paralelismului bazat pe procesoarele “commodity” în general: întârzierea pe conexiuni, puterea si aspectele economice toate aduc argumente pentru “cores” simple dar multiple pe un cip si nu “cores” unice din ce în ce mai complexe.Provocarea software (cum sǎ se programeze masinile paralele).
De ce arhitecturǎ paralel? (sumar)
Din ce în ce mai atractivǎ. Aspectele economice, tehnologia, ahitectura, cererea motivatǎ de/prin aplicatii.Se aflǎ deja de ceva timp în curentul principal.Paralelismul se exploateazǎ la mai multe niveluri: la nivel de instructiune, la nivel de fire în cazul multiprocesǎrii pe cip, pe serverele multiprocesoare, pe multiprocesoarele la scarǎ mare (MPP-uri – Massively Parallel Processing).Focalizare pe aceastǎ clasǎ: paralelismul la nivelul multiprocesare.Aceeasi poveste si din perspectiva sistemului de memorare: cresterea benzii de trecere, reducerea latentei medii cu multe memorii locale.Existǎ natural o gamǎ mare de arhitecturi paralele. Costuri, performante si scalabilitate diferite.
Tendinte în supercalculul stiintific
Supercalculul stiintific oferǎ teren fertil pentru arhitecturi si tehnici înnoitoare. Piata ocupatǎ de supercalculul stiintific este redusǎ fatǎ de cea comercialǎ desi MP-urile devin de interes principal. Începând din anii 70 dominante sunt masinile vectoriale. Microprocesoarele au câstigat imens în performantele în virgulǎ mobilǎ: viteze ale ceasului mari, unitǎti de virgulǎ mobilǎ pe principiul pipeline (exemplu: mult-add), paralelismul la nivel de instructiune, utilizarea eficientǎ a memoriilor cache. Plus o seamǎ de aspecte economice.Multiprocesoarele la scarǎ largǎ înlocuiesc supercalculatoarele vectoriale.
22
Performantele brute ale sistemelor uniprocesor: LINPACK
LIN
PAC
K (M
FLO
PS
)
▲
▲
▲
▲
▲
▲
◆
◆
◆
◆◆
◆
◆◆
◆
◆ ◆
1
10
100
1,000
10,000
1975 1980 1985 1990 1995 2000
▲ CRAY n = 100■
■
CRAY n = 1,000
◆ Micro n = 100●
●
Micro n = 1,000
CRAY 1s
Xmp/14se
Xmp/416Ymp
C90
T94
DEC 8200
IBM Power2/990MIPS R4400
HP9000/735DEC Alpha
DEC Alpha AXPHP 9000/750
IBM RS6000/540
MIPS M/2000
MIPS M/120
Sun 4/260
■
■■
■
■
■
●
●
●
● ●
●●●
●●
●
LIN
PAC
K (G
FLO
PS
)
■ CRAY peak● MPP peak
Xmp /416(4)
Ymp/832(8) nCUBE/2(1024)iPSC/860
CM-2CM-200
Delta
Paragon XP/S
C90(16)
CM-5
ASCI Red
T932(32)
T3D
Paragon XP/S MP(1024)
Paragon XP/S MP(6768)
■
■
■
■
●
●
■●
●
●
●●
●
●●
0.1
1
10
100
1,000
10,000
1985 1987 1989 1991 1993 1995 1996
Chiar si masinile Cray devin paralele: X-MP (2-4), Y-MP (8), C-90 (16), T94(32).Din 1993, Cray produce de asemenea MPP-uri (T3D, T3E)
23
Un alt unghi de vedere
Topul celor mai rapide 10 calculatoare (Linpack)
Rank Site Computer Processors/Year/Rmax1 DOE/NNSA/LLNL USA IBM BlueGene 131072 2005 2806002 NNSA/Sandia Labs, USA Cray Red Storm, Opteron 26544 2006 1014003 IBM Research, USA IBM Blue Gene Solution 40960 2005 912904 DOE/NNSA/LLNL, USA ASCI Purple - IBM eServer p5 12208 2006 757605 Barcelona Center, Spain BM JS21 Cluster, PPC 970 10240 2006 626306 NNSA/Sandia Labs, USA Dell Thunderbird Cluster 9024 2006 530007 CEA, France Bull Tera-10 Itanium2 Cluster 9968 2006 528408 NASA/Ames, USA SGI Altix 1.5 GHz, Infiniband 10160 2004 518709 GSIC Center, Japan NEC/Sun Grid Cluster (Opteron) 11088 2006 4738010 Oak Ridge Lab, USA Cray Jaguar XT3, 2.6 GHz dual 10424 2006 43480
Stiluri arhitecturale în Top 500
Tipuri de procesoare în Top 500
24
Tipuri de instalǎri în Top 500
Observatii speciale asupra Top-ului 500 din noiemrie 2006
• Calculatorul NEC Earth Simulator (la vârf în 5 liste succesive) a cǎzut pe locul 14.
• Sistemul de pe locul 10 si-a dublat performantele într-un singur an.• Numǎrul 359 de acum sase luni a ajuns pe locul 500 în aceastǎ listǎ.• Performanta totalǎ din Top 500 creste de la 2,3 Pflops acum un an, la 3,5
Pflops.• Clusterele sunt dominante la aceastǎ scarǎ: 359 de structuri din 500 sunt
calificate drept clustere.• Procesoarele dual core cresc în popularitate: 75 utilizeazǎ Opteron dual core
si 31 Intel Woodcrest.• IBM este producǎtorul principal cu aproape 50% din sisteme, HP este pe
locul secund.
25
• IBM si HP au 237 din cele 244 instalǎri comerciale si industriale.• Statele Unite au 360 din cele 500 de instalǎri, Marea Britanie 32, Japonia
30, Germania 19, china 18.
Performantele Linpack în timp, în Top 500
Un alt unghi de vedere asupra cresterii performantelor
26
Tipuri de procesoare în Top 500 (2002)
Sisteme distribuite si paralel
Evolutia si convergenta arhitecturilor paralele
Istoric
Din punct de vedere istoric, arhitecturile paralel sunt legate strâns de modelele de programare. Arhitecturi divergente, cu pattern de crestere impredictibil.
28
Incertitudinea în directia de urmat a paralizat dezvoltarea de software paralel!
Azi
Extindere a “arhitecturii calculatorului” pentru a suporta comunicarea si cooperarea. În trecut: arhitectura setului de instructiuni. Mai nou: arhitectura comunicǎrii.Se definesc abstractiile critice, limitele si primitivele (interfetele), structurile organizationale care implementeazǎ interfetele (hw si sw).Compilatoarele, bibliotecile si sistemele de operare sunt azi punti importante între aplicatii si arhitecturi.
Cadrul stratificat modern
Modelul de programare paralel
Ceea ce programatorul foloseste la scrierea aplicatiilor.Specificǎ comunicarea si sincronizarea.Exemple:• Multiprogramare: nu existǎ comunicare sau sincronizare la nivel de
program
Application Software
SystemSoftware SIMD
Message Passing
Shared MemoryDataflow
SystolicArrays
Architecture
29
• Spatiu de adresare partajat: ca un panou de afisaj (bulletin board).• Transfer de mesaje: ca srisorile sau ca apelurile telefonice, explicite si punct
la punct.• Paralel pe date: mai regimentat, actiuni globale asupra datelor. Implementat
si cu spatiu de adresare partajat si cu transfer de mesaje.
Abstractii (preocupǎri) de comunicare
Primitive de comunicare la nivel de utilizator furnizate de sistem. Realizeazǎ modelul de programare. Existǎ o asociere (mapping) între primitivele de limbaj ale modelului de programare si aceste primitive.Suportate direct de hardware sau via OS sau via software de utilizator.Dezbateri intense asupra a ceea ce se suportǎ software si asupra spatiului (gap) între straturi (layers).Azi: interfetele hardware/software tind a fi plate, adicǎ complexitatea este în linii mari uniformǎ. Compilatoarele si sofware-ul joacǎ roluri importante ca punti de legǎturǎ. Trendul tehnologic exercitǎ o influentǎ puternicǎ.Rezultatul este convergenta în structura organizationalǎ. Primitive relativ simple pentru scopul de a facilita comunicarea generalǎ.Arhitectura de comunicare
Este interfata utilizator/sistem la care se adaugǎ implementarea.Interfata utilizator/sistem: primitivele de comunicare expuse la nivelul utilizatorului de hardware si la nivel de sistem de software (uneori poate exista un nivel utilizator software între acesta si modelul de programare).Implementarea: structuri organizationale care implementeazǎ primitivele (hardware sau OS – Operating System). Cât de optimizate sunt acestea? Cât de integrate în nodul de procesare sunt? Structura retelei.Scopurile urmǎrite: performante, aplicabilitate largǎ, programabilitate, scalabilitate, cost redus.
Evolutia modelelor arhitecturale
Istoric, masinile au fost croite pe modelele de programare. Modelele de programare, abstractiunile de comunicare si organizarea masinii se întrunesc în “arhitecturǎ”.Întelegerea evolutiei lor ajutǎ întelegerea convergentelor. Identificǎ conceptul de “core”.Evolutia modelelor arhitecturale:• Spatiu de adresare partajat (SAS – Shared Address Space).• Transfer de mesaje.• Paralel pe date.• Altele (nediscutate aici): Dataflow, Systolic Arrays.Se examineazǎ modelul de programare, motivatia si convergentele.
30
Spatiu de adresare partajat (SAS)
Orice procesor poate accesa direct orice locatie de memorie. Comunicarea este implicitǎ, se produce odatǎ cu operatiile de încǎrcare si descǎrcare.Convenabilǎ: transparenţa locatiilor. Model de programare similar partajǎrii temporale pe sistemele uniprocesor, cu deosebirea cǎ procesele se deruleazǎ pe porcesoare diferite, randament (throughput) bun pe sarcini de lucru multiprogramate.Furnizate natural pe o varietate largǎ de platforme. Istoria consemneazǎ cel putin precursori de mainframes în anii 60 timpurii. O mare varietate de scarǎ: câteva procesoare la câteva sute de procesoare.Cunoscute popular ca masini sau modele cu memorie partajatǎ. Ambiguitate: memoria poate fi distribuitǎ fizic între procesoare.Procesul: spatiul de adresare partajat plus unul sau mai multe fire de control.Portiuni din spatiul de adresare al proceselor sunt partajate. Scrierile se fac în locatii de memorie vizibile si altor fire (si altor procese). O extensie naturalǎ a modelelor uniprocesor: pentru comunicare – operatii conventionale cu memoria, operatii atomice speciale pentru sincronizare. Sistemul de operare (OS) utilizeazǎ memoria partajatǎ pentru a coordona procesele.
Comunicarea hardware pentru SAS
Este si ea o extensie naturalǎ a uniprocesǎrii.Avem deja procesorul, unul sau mai multe module de memorie si controlere de I/O conectate toate la o (inter)conexiune hardware de un tip anumit. Capacitatea de memorare creste prin adǎugarea de module suplimentare, capacitatea I/O prin adǎugarea de controllere.
31
Se adaugǎ procesoare pentru procesare!
Istoria arhitecturilor SAS
Solutia “Mainframe”. Motivatǎ de multiprogramare. Extinde sistemul crossbar utilizat pentru lǎrgime de bandǎ cu memoria si dispozitivele I/O. La început costul procesoarelor a limitat structurile la mic, ulterior costul sistemului crossbar. Banda de trecere scaleazǎ cu numǎrul de procesoare. Costul incremental mare; se utilizeazǎ în loc schemele multietajate (multistage).
Solutia “minicomputer”. Aproape toate sistemele cu microprocesoare au un bus. Motivatǎ de multiprogramare, procesarea tranzactiilor (TP). Utilizatǎ din plin pentru calculul paralel. Denumitǎ multiprocesor simetric (SMP – Symmetric MultiProcessor). Latenţa mai mare decât la sistemele uniprocesor. Bus-ul este strangulant în ceea ce priveste banda de trecere: utilizarea memoriilor cache ridicǎ problema coerentei. Cost incremental scǎzut.
P
CI/
M MCI/
$
32
Exemplu: Intel Pentium Pro Quad
Toatǎ aderenţa de coerenţǎ si multiprocesare este integratǎ în modulul procesorului. Integrare înaltǎ, orientatǎ pe volum extins. Latentǎ si bandǎ mici.
33
Exemplu: SUN Enterprise
Gigaplane bus (256 data, 41 addr ess, 83 MHz)
SB
US
SB
US
SB
US
2 Fi
berC
hann
el
100b
T, S
CS
I
Bus interface
CPU/memcardsP
$2
$P
$2
$
Mem ctrl
Bus interface/switch
I/O cards
Memoria plasatǎ chiar pe plǎcile procesorului. 16 plǎci (cards) de fiecare tip (procesor + memorie sau dispozitive I/O).Toatǎ memoria accesatǎ pe bus, deci simetricǎ.Bandǎ mai largǎ, bus cu latentǎ mai înaltǎ.
34
Scalarea
Probleme cu interconectarea: costul (crossbar) sau banda (bus).Schema Dance-hall: banda de trecere este încǎ scalabilǎ, dar este mai ieftinǎ decât sistemul crossbar, latentele cu memoria sunt uniforme dar uniform de mari.Schema cu memorie distribuitǎ sau NUMA (Non-Uniform Memory Access): un construct de spatiu de adresare partajat din tranzactii prin mesaje simple pe o retea de utilitate generalǎ (de exemplu: read-request, read-response); caching pentru datele partajate (uzual nonlocale).
Exemplu: Cray T3E
Switch
P$
XY
Z
External I/O
Memctrl
and NI
Mem
Scalare posibilǎ pânǎ la 1024 de procesoare, legǎturi de 480 MB/secundǎ.Controllerul memoriei genereazǎ cererile de comunicare pentru referiri nonlocale. Arhitectura comunicǎrii strict integratǎ în nod.
M M M° ° °
° ° ° M ° ° °M M
N e t w o r kN e t w o r k
P
$
P
$
P
$
P
$
P
$
P
$
“Dance hall” Distributed memory
35
Nu existǎ vreun mecanism hardware pentru coerenţǎ (sistemel SGI Oeigin etc. asigurǎ aceasta).
Memoriile cache si coerenţa de cache
Memoriile cache joacǎ un rol cheie în toate cazurile. Reduc timpul mediu de acces la date, reduc cererea de bandǎ de trecere formulatǎ pentru interconectarea partajatǎ.Dar memoriile cache private ale procesoarelor creeazǎ o problemǎ. Copiile unei variabile pot fi prezente în mai multe cache-uri. O scriere fǎcutǎ de un procesor poate sǎ nu fie vizibilǎ celorlalte procesoare: ele vor pǎstra accesul la valorile depǎsite din cache-urile lor. Apare problema coerentei de cache. Trebuie luate mǎsuri pentru asigurarea vizibilitǎtii.
Exemplu de problemǎ de coerentǎ de cache
Procesoarele vǎd valori diferite ale lui u dupǎ evenimentul 3.Cu rescrierea cache-urilor, valoarea rescrisǎ în memorie depinde de circumstanta în care cache-ul evacueazǎ sau rescrie valoarea când procesul care accede la memoria principalǎ poate vedea chiar valoarea veche.Situaţie inacceptabilǎ pentru programe dar frecventǎ!
Coerenţa de cache
Citirea une locatii trebuie sǎ returneze cea mai recentǎ valoare scrisǎ de oricare dintre procese.Facil în sistemele uniprocesor. Exceptie: I/O; coerenta între dispozitivele I/O si procesoare. Aceste situatii sunt rare si solutiile software sunt acoperitoare.Ar fi de dorit ca si în cazul în care procesele ruleazǎ pe procesoare diferite lucrurile sǎ se petreacǎ la fel. De pildǎ ca atunci când procesele sunt intercalate pe un singur procesor.Dar problema coerentei cache-urilor este mult mai criticǎ în cazul multiprocesǎrii. Difuzǎ si criticǎ sub aspectul performantelor. A asigura un
36
suport eficient pentru modelul de programare este o problemǎ fundamentalǎ la proiectare.Este încǎ mai rǎu decât atât: ce înseamnǎ “cel mai recent” pentru procese independente? Se cer modele ale consistenţei de memorie.
SGI Origin2000
L2 cache
P
(1-4 MB)L2 cache
P
(1-4 MB)
Hub
Main Memory(1-4 GB)
Direc-tory
L2 cache
P
(1-4 MB)L2 cache
P
(1-4 MB)
Hub
Main Memory(1-4 GB)
Direc-tory
Interconnection Network
SysAD busSysAD bus
Masinile cu spatiu de adresare partajat (SAS) contemporane
Masinile bazate pe bus, cache coerente la scarǎ micǎ.Sistemele cu memorie distribuitǎ, cache coerente la scarǎ mare. Fǎrǎ coerenţǎ de cache, sunt în esenţǎ sisteme cu transmitere (rapidǎ) de mesaje.Clusterele acestora sunt la scarǎ încǎ mai mare.
Modelul de programare cu transmitere de mesaje (MP)
Send spune cǎ bufferul de date trebuie transmis la procesul receptor.Recv spune despre procesul expeditor si memoria de aplicatie în care se face primirea; o etichetǎ (tag) optionalǎ la trimitere si o regulǎ de potrivire-identificare la receptie.Copiere de la o memorie la alta, cu necesitatea numirii proceselor.
37
Procesul utilizator numeste numai datele si entitǎtile locale în spatiul proces/etichetǎ (tag).În forma ceam mai simplǎ, potrivirea send/recv face sincronizarea unor evenimente perechi. Mai sunt si alte variante.Multe overheaduri: cu copierea, cu mangementul bufferelor, cu protecţia.
Arhitecturi cu transfer de mesaje
Calculatorul complet ca bloc constructiv, inclusiv I/O. Comunicare prin operatii I/O explicite.Modelul de programare: acces direct numai la spatiul de adresare privat (memoria localǎ), comunicare prin mesaje explicite (send/receive).Diagrama bloc la nivel superior este similarǎ cu aceea a sistemului cu memorie partajatǎ (SAS) dar distribuitǎ. Dar comunicarea nu trebuie sǎ fie integratǎ în sistemul de memorare, ci numai ca I/O. Istoria integrǎrii mai stricte evolueazǎ cǎtre un spectru care include clusterele. Sistemele acestea sunt mai usor de construit decât SAS-urile scalabile. Pot fi folosite clustere de PC-uri, de SMP-uri pe o retea localǎ (LAN).Modelul de programare mult independent de operatiile hardware de bazǎ. Interventii ale bibliotecii sau ale sistemului de operare (OS).
Evolutia masinilor cu transfer de mesaje
000001
010011
100
110
101
111
Primele masini erau de tipul FIFO (First In First Out) pe fiecare legǎturǎ. Hardware aproape de modelul de programare; operatii sincrone. Înlocuit de DMA (Direct Memory Access), care abiliteazǎ operatiuni fǎrǎ blocare, bufferizare de cǎtre sistem la destinatie pânǎ când este pregǎtitǎ receptia (recv).
38
Diminuarea rolului topologiei. În rutarea store&forward topologia este importantǎ. Introducerea rutǎrii pipeline face topologia mai putin importantǎ. Costul este în interfata nod-retea. Programarea se simplificǎ.
Exemplu: IBM SP-2
Memory bus
MicroChannel bus
I/O
i860 NI
DMA
DR
AM
IBM SP-2 node
L2 $
Power 2CPU
Memorycontroller
4-wayinterleaved
DRAM
General inter connectionnetwork formed fr om8-port switches
NIC
În esentǎ, sistemul este alcǎtuit din statii de lucru RS6000 complete.Interfata de retea integratǎ în bus-ul I/O (bandǎ de trecere limitatǎ de bus-ul I/O). Nu este necesar a vedea referirile la memorie.
Exemplu: Intel Paragon
Interfata de retea integratǎ în bus-ul de memorie pentru performante.
39
Spre o convergentǎ arhitecturalǎ
Evolutia si rolul software-lui au estompat granitele. Send/recv suportate pe masini SAS via buffere. Se poate construi un spatiu de adresare global pe sistemele MP prin utilizarea metodei hashing2. Software-ul pe memorie partajatǎ (de pildǎ, utilizarea de pagini ca unitǎti de comunicare).Organizarea hardware converge si ea. Integrarea mai strictǎ a NI (Network Interface) chiar pentru sisteme MP (latenţǎ redusǎ, bandǎ mai largǎ). La nivelul mai de jos, chiar hardware-ul SAS transferǎ mesaje hardware. Suport hardware pentru comunicatie fin granulatǎ face si software-ul MP mai rapid.Chiar clusterele de statii de lucru sau SMP-urile sunt sisteme paralel. Sisteme de retele zonale (SAN – System Area Network) rapide.Modele de programare distincte dar organizǎrile converg. Noduri conectate prin retele generale si comunicare asistatǎ. Asistarea se regǎseste în gradul de integrare, pe tot parcursul spre clustere.
Sisteme paralel pe date
Modelul de programare. Operatii executate în paralel pe fiecare element al structurii de date. Logic, un singur fir de control. Acesta executǎ secvential pasi paraleli. Conceptual, un procesor asociat fiecǎrui articol-datǎ.
PE PE PE° ° °
PE PE PE° ° °
PE PE PE° ° °
° ° ° ° ° ° ° ° °
Controlprocessor
Modelul arhitectural. Masive de multe procesoare simple fiecare cu putinǎ memorie. Procesoarele nu trec secvential prin instructiuni.Atasat la un procesor controlor care genereazǎ instructiuni.Comunicare specializatǎ si generalǎ, sincronizare globalǎ ieftinǎ.
2 Hashing – a produce valori hash pentru accesarea datelor sau pentru securitate. O valoare hash (sau simplu un hash), denumit si un digest de mesaj este un numǎr generat dintr-un sir/text. Hash-ul este substantial mai mic decât textul însusi si este generat printr-o formulǎ într-o asa manierǎ încât este extrem de improbabil ca vreun alt text sǎ producǎ aceeasi valoare hash.
40
Motivatia initialǎ. Se potrivesc cu rezolvarea ecuatiilor diferentiale simple. Se centreazǎ pe costul ridicat al regǎsirii instructiunii si al secventierii.
Aplicatii ale paralelismului pe date
Un stat de functiuni contine o înregistrare pentru fiecare salariat care reprezintǎ salariul.
if salariu > 1000 then salariu = salariu *1.05else salariu = salariu *1.10
Logic, întreaga operatie constǎ dintr-un singur pas. Unele procesoare sunt abilitate pentru operatii aritmetice, altele nu.Alte exemple: diferente finite, algebra liniarǎ, cǎutarea de documente, graficǎ, procesarea de imagini, …Câteva masini recente: Thinking Machines CM-1, CM-2 (si CM-5), masiv paralelele MP-1 si MP-2.
Evoluţie si convergenţǎ
Structurǎ de control rigidǎ (SIMD în clasificarea Flynn). SISD pentru uniprocesoare, MIMD pentru multiprocesoare.Populare când reducerile de costuri ale secventiatorului centralizat vor fi mari. În anii ’60 când un CPU era un dulap. Înlocuit de vectori la mijlocul anilor ’70: mai flexibile în ceea ce priveste dispunerea memoriei si mai usor de administrat.Revitalizat în anii ’80 mijlocii când cǎile de date de 32 de biti s-au potrivit pe cip. Ceea ce nu mai este adevǎrat pentru microprocesoarele moderne.Alte ratiuni pentru disparitie. Aplicatiile obisnuite, simple au un bun localism, pot lucra bine oricum. Pierdere în aplicabilitate din cauza circulatiei pe fire în paralelismul de date: masinile MIMD sunt la fel de eficiente si pentru paralelismul pe date si în general.Modelul de programare este convergent cu SPMD (Single Program Multiple Data). Contributii necesare pentru sincronizarea globalǎ rapidǎ. Spatiul de adresare global este structurat, implementat fie cu SAS, fie cu MP.
Convergenţǎ: arhitectura paralel genericǎ
Mem
° ° °
Network
P
$
Communicationassist (CA)
41
Un sistem multiprocesor generic modern.
Nodul: procesor/procesoare, sistem de memorie, plus asistenţa la comunicare. Controller al interfetei de retea si al comunicǎrii. Retea scalabilǎ. Asistentul de comunicare furnizeazǎ primitive cu profil perfect. Se construieste modelul de comunicare pe acesta. Convergenta permite multe inovatii, acum în cadru. Integrarea asistentului cu nodul, care operatii, cât de eficace…
Contractul model-sistem
Modelul specificǎ o interfatǎ (contractul) cǎtre programator:• Numirea: cum sunt partajate logic datele si/sau procesele la care se face
referire.• Operatii: ce operatii sunt furnizate pe aceste date.• Ordonarea: cum sunt ordonate si coordonate accesǎrile la date.• Replicarea: cum sunt replicate datele pentru a reduce comunicarea.Implementarea realizatǎ face obilgatoriu referiri la aspecte de performantǎ. Costul comunicǎrii: latentǎ, bandǎ de trecere, overhead, gradul de ocupare.Se vor prezenta aceste aspecte prin exemple.
Suportul contractului
Fiind dat un model de programare, acesta poate avea suport în modalitǎti variate în straturi variate.
În fapt, fiecare strat are o pozitie în toate privintele (numirea, operatiile, performantele etc.) si orice set de pozitii poate fi asociat (mapped) altui set prin software.Elementele cheie pentru a oferi suport modelelor de perogramare:• Ce primitive sunt furnizate în stratul abstractiilor de comunicare.• Cât de eficient sunt ele suportate (hardware/software).• Cum sunt sociate (mapped) modelele de programare cu ele.
42
Recapitulare asupra arhitecturilor paralele
Arhitecturile paralele reprezintǎ un fir important în evolutia generalǎ a arhitecturilor. La toate nivelurile, cu nivelul procesoarelor multiple pe curentul principal din domeniul calculului.Proiectele exotice au contribuit mult, dar s-a renuntat la ele de dragul convergentei. Presiunea tehnologicǎ, a costurilor si a performantelor aplicative. Arhitectura de bazǎ procesoare-memorie este în linii mari aceeasi. Elementele arhitecturale cheie sunt în arhitectura comunicǎrii: cum este integratǎ comunicarea în memorie si în sistemul I/O din nod.Probleme de proiectare fundamentale:• Functionale: numirea, operatiile, ordonarea• Performante: organizare, replicare, caracteristicile de performantǎDeciziile de proiectare sunt dictate de evaluǎri dirijate de încǎrcare. Parte integrantǎ a focalizǎrii ingineriei.
Credinte vechi cu fata la zid
Puterea este gratuitǎ, tranzistorii sunt scumpi
Zidul puteriiPuterea este scumpǎ, tranzistorii sunt gratuiti
Multiplicarea este lentǎ, accesul la memorie este rapid
Zidul memorieiMultiplicarea este rapidǎ si accesul la memorie este lent
Paralelismul la nivel de instructiune (ILP – Instruction Level Parallelism) trebuie crescut prin compilatoare, prin inovatii (out-of-order, speculatii, VLIW – Very Long Instruction Word, …)
Zidul ILPSatisfactii în diminuare de la mai mult ILP
Conceptia veche: performantele uniprocesoarelor cresc de 2 ori la fiecare 1,5 ani.Mai nou: performantele uniprocesoarelor cresc de 2 ori la fiecare 5 ani.
Din nou despre tendintele tehnologice
43
Performantele uniprocesoarelor (SPECint3)
• VAX: 25% pe an din 1978 pânǎ în 1986• RISC + x86: 52% pe an din 1986 pânǎ în 2002• RISC + x86: ??% pe an din 2002 pânǎ azi
3 SPECint este o specificatie de testare standard (benchmark) pentru puterea de procesare în întregi a unitǎtii centrale. Norma este întretinutǎ de Standard Performance Evaluation Corporation (SPEC).
44
Sistemele multi-core sunt din ce în ce mai prezente
“We are dedicating all of our future product development to multicore designs. … This is a sea change in computing”
Paul Otellini, Intel (2005)(“Toatǎ activitatea de dezvoltare a produselor noastre viitoare o dedicǎm proiectǎrii sistemelor multicore. … Acestea reprezintǎ un val imens de schimbare în calcul,”).
Intel a fǎcut demonstratii cu un chip în faza de cercetare cu 80 de cores.Cipul metro-chip CISCO are 188 de cores.
Programe paralel
De ce ne preocupǎ programele?
Ele sunt acelea care sunt executate pe masinile pe care le proiectǎm. Asadar ajutǎ deciziile de proiectare, ajutǎ evaluarea concesiilor (trade-offs) din sisteme.
45
Au condus la progresele cheie din arhitectura uniprocersor. Memoriile cache si proiectarea setului de instructiuni.Mai importante în sistemele multiprocesor. Grade de libertate noi, penalitǎti mai mari pentru nepotriviri între programe si arhitecturi.
Importante pentru cine?
Pentru proiectantii de algoritmi. Proiectarea de algoritmi care vor rula pe sisteme reale.Pentru programatori. Întelegerea problemelor cheie si obtinerea celor mai bune performante.Pentru arhitecti. Întelegerea încǎrcǎrilor, a interactiunilor, a importantei gradelor de libertate. Valoroase pentru proiectare si pentru evaluare.
Lectii despre programe în acest curs
• Programe paralel• Procesul de paralelizare• Cum aratǎ programele paralel în modelele de programare majore• Programarea pentru performante• Evaluǎri arhitecturale dictate de încǎrcare• Beneficiile pentru arhitecti dar si pentru utilizatori la procurarea de masini.Spre deosebire de masinile secventiale, nu se poate lua ca garantie sarcina (workload).Baza software nu este maturǎ; evolueazǎ odatǎ cu arhitecturile cu obiectivul performante.Asa cǎ trebuie deschisǎ cutia.Sǎ începem cu programele paralel…
Outline
Probleme motivante (studii de cazuri aplicative).Pasi în crearea unui program paralel.Cum aratǎ un program paralel simplu. Trei modele majore de programare. Primitivele necesitǎ suport în sistem.Mai târziu: interactiunea aspectelor de performantǎ cu arhitectura.
Probleme motivante
Simularea curentilor oceanici. Structurǎ regulatǎ, calcul stiintific.Simularea evolutiilor galactice. Structurǎ neregulatǎ, calcul stiintific.Interpretarea scenelor prin urme/efecte ale razelor (Raytrace). Structurǎ neregulatǎ, graficǎ computerizatǎ.Filtrare (paralelism pipeline).
46
Data mining. Structurǎ neregulatǎ, procesarea informatiei (subiect aparte, studii speciale).
Simularea curentilor oceanici
Model pe grilǎ bidimensionalǎ.Se discretizeazǎ în spatiu si în timp. Rezolutii spatiale si temporale mai fine înseamnǎ precizii mai bune, solutii mai exacte.Multe si diferite calcule la fiecare pas de timp. Constituirea si rezolvarea de ecuatii.Calcule la concurentǎ între si în grile.
Simularea evolutiilor galactice
Se simuleazǎ interactiunile multor stele care evolueazǎ în timp.Calculul fortelor este costisitor.Tratarea brutǎ a fortelor – cost cam de ordinul O(n2).Metodele ierarhice profitǎ de legea universalǎ a fortelor G = m1m2/r2.
Pasi temporali numerosi, concurentǎ bogatǎ între stele în cadrul fiecǎrui pas.
Interpretarea scenelor prin urme/efecte ale razelor (Raytrace)
Se trimit raze într-o scenǎ prin pixeli de imagine planǎ. Se urmǎreste drumul lor: ele se împrǎstie în jur când lovesc obiecte, genereazǎ raze noi, un arbore de raze la fiecare razǎ incidentǎ.
47
Rezultatul este culoarea si transparenta/opacitatea acelui pixel.Paralelism pe raze.Toate cazurile studiate aratǎ o concurentǎ4 abundentǎ.
Crearea unui program paralel
Se admite cǎ este cunoscut un algoritm secvential. Uneori este necesar un algoritm foarte diferit, dar asta este dincolo de preocupǎrile de fatǎ.Pǎrtile lucrǎrii:• Identificarea lucrului care poate fi fǎcut în paralel.• Partitionarea lucrului si probabil a datelor între procese.• Se gestioneazǎ accesul la date, comunicarea si sincronizarea.• De notat: lucrul include calcul, accesul la date si operatiile I/O.Telul principal: accelerarea (speedup) la care se adaugǎ efortul de programare redus si necesarul de resurse.
)1()()(
eperformancpeperformancpspeedup =
4 Concurenţa (concurrency). În stiinta calculatoarelor concurenta este o proprietate a sistemelor conform cǎreia mai multe procese de calcul se deruleazǎ concomitent si interferǎ adesea între ele. Studiul concurentei cuprinde o categorie largǎ de sisteme, de la cele strâns cuplate, puternic sincrone în sistemele de calcul paralel, la cele slab cuplate, vǎdit asincrone, întâlnite în sistemele distribuite. Procesele concurente se pot derula realmente simultan în cazul în care ele ruleazǎ pe procesoare separate sau pasi din derularea lor pot fi intercalati pentru a produce aparenta concurentei ca în cazul proceselor separate care ruleazǎ într-un sistem multi-task. Deoarece procesele într-un sistem concurent pot interactiona în timpul derulǎrii, numǎrul de cǎi de executie posibile pe sistem poate fi extrem de mare si comportarea rezultantǎ poate fi foarte complexǎ. Dificultǎtile asociate concurentei au fost si sunt rezolvate atât prin construirea de limbaje si concepte pentru a face complexitatea executiei concurente gestionabilǎ cât si prin dezvoltarea de teorii potrivite rationamentelor asupra proceselor concurente care mai si interactioneazǎ.Diferenta dintre sistemele secventiale si cele concurente constǎ în faptul cǎ procesele care fac un sistem concurent pot interactiona. Utilizarea concurentǎ de resurse partajate este sursa multor dificultǎti. Conditiile “race” care implicǎ resurse partajate pot produce comportǎri inprevizibile ale sistemului. Introducerea excluderii mutuale poate preveni conditiile “race” dar pot conduce la probleme de genul blocajelor deadlock si de înfometare (starvation).În afara interactiunilor interne, multe sisteme concurente, cum sunt sistemele de operare si bazele de date sunt gândite sǎ participe si la interactiuni curente cu utilizatorii si cu alte sisteme. Notiunile traditionale de corectitudine a programelor care sunt bazate pe punerea în relatie a unor intrǎri initiale cu iesirile asteptate sǎ aparǎ la terminarea programului nu mai sunt realmente aplicabile. Sunt necesare modalitǎti diferite de definire a ceea ce înseamnǎ un sistem concurent care opereazǎ corect.Proiectarea unui sistem concurent implicǎ adesea stabilirea de tehnici cât mai sigure pentru coordonarea executǎrii, pentru schimbul de date, pentru alocarea de memorie si pentru esalonarea executiei cu scopul de a minimiza durata de rǎspuns si de a maximiza capacitatea de prelucrare (throughput).Teoria concurentei a fost si este un câmp activ de cercetare în stiinta calculatoarelor în latura ei teoreticǎ de când în anii 1960 timpurii Carl Adam Petri a publicat lucrarea fundamentalǎ despre retelele Petri. În anii care au urmat s-a dezvoltat o varietate cuprinzǎtoare de formalisme destinate modelǎrii si rationamentelor relative la concurentǎ.
48
Pentru o problemǎ fixǎ:
)()1()(
ptimetimepspeedup =
Pasii creǎrii unui program paralel
Sunt patru pasi: descompunerea, atribuirea, orchestrarea, associere (mapping). Pasii sunt executati de programator sau de software-ul de sistem (la compilare, la executie…). Problemele sunt aceleasi asa cǎ mai departe se admite cǎ programatorul face totul în mod explicit.
Câteva concepte importante
Task: o bucatǎ arbitrarǎ a unei lucrǎri nedescompuse în calculul paralel; se executǎ secvential cu concurentǎ numai între taskuri; exemple: o particulǎ/celulǎ în metoda Barnes-Hut, o razǎ sau un grup de raze în Raytrace; taskuri fin granulate, taskuri grosier granulate.Proces (fir): o entitate abstractǎ care executǎ taskurile atribuite proceselor; procesele comunicǎ si se sincronizeazǎ pentru a executa taskurile lor.Procesor: suportul fizic pe care se executǎ procesul; procesele virtualizeazǎ masina pentru programator: se scrie mai întâi programul ca reuniune de procese si apoi se aplicǎ (to map) pe procesoare.
Descompunerea
Spargerea calculului în taskuri pentru a fi împǎrtite între procese. Taskurile pot fi distribuite dinamic. Numǎrul de taskuri disponibile poate varia în timp. Altfel spus, se identificǎ concurenta si se decide nivelul la care aceasta este exploatatǎ.Telul: suficiente taskuri pentru a tine procesele ocupate, dar nu prea multe.Numǎrul de taskuri disponibile la un moment dat este limita suprioarǎ a accelerǎrii (speedup) obtenabile.
49
Concurenta limitatǎ: legea lui Amdahl
Limitarea fundamentalǎ în accelerarea prin paralelism.Dacǎ fractia de lucru serial/secvential inerent este s atunci speedup ≤ 1/s.Exemplu: calculul în douǎ faze: traversarea unei grile nxn si executarea unor calcule independente, traversarea a doua oarǎ si adunarea fiecǎrei valori într-o sumǎ globalǎ. Timpul consumat în prima fazǎ este n2/p. Timpul pentru faza a doua serializatǎ într-o variabilǎ globalǎ este n2.Accelerarea este
22
22
np
nnspeedup+
=
si nu poate depǎsi valoarea 2.Artificiu de calcul, truc: faza a doua se divide în douǎ. Se acumuleazǎ în suma privatǎ în timpul traversǎrii, apoi se adunǎ sumele private per-proces în suma globalǎ. Timpul paralel este n2/p + n2/p + p si accelerarea este în cel mai bun caz
22
2
22
pnnspeedup+
=
Descrierea graficǎ
Profilele concurentiale
Uzual, divizarea în partea serialǎ si partea paralelǎ nu poate fi fǎcutǎ.
50
Aria de sub curbǎ este lucrul total sau timpul cu un procesor. Extinderea orizontalǎ este limita inferioarǎ a timpului consumat (cu procesoare în numǎr nelimitat)Accelerarea este raportul
∑
∑∞
=
∞
=
1
1
kk
kk
pkf
kf
în cazul de bazǎ
pss −+ 1
1
Legea lui Amdahl se aplicǎ la orice overhead, nu numai la concurentǎ limitatǎ.
Tipuri de paralelism
Paralelism de taskuri. Paralelism care apare explicit în algoritm. Între filtre fǎrǎ relatii producǎtor/consumator.
51
Paralelism de taskuri, paralelism pe date, paralelism pipeline.Relativ la taskuri, paralelismul este între taskuri grosier independente. Între filtre nu au relatii producǎtor/consumator (de rezultate).Relativ la paralelismul pe date, este un paralelism între iteratii ale unui filtru fǎrǎ stare (stateless). Se plaseazǎ între o pereche distribuire/colectare (scatter/gather) – fisiune.Nu poate paraleliza filtre cu stare. Paralelismul pipeline se practicǎ între procese producǎtoare si consumatoare. Se pot paraleliza filtrele cu stare.
52
Paralelism de taskuri, paralelism pe date, paralelism pipeline.Relativ la taskuri, paralelismul este de tipul pe fire, adicǎ ramificǎ/recompune (fork/join).Relativ la paralelismul pe date, este de tipul forall (bucle paralel pe date).Paralelismul pipeline se practicǎ în programele multor servere. Manipularea cozilor (queues) prin bufferizare între etape. Unul sau mai multe fire în fiecare etapǎ pipeline.
Asignarea
Specificarea mecanismului prin care se divizeazǎ lucrul între procese. De pildǎ, care proces evalueazǎ fortele asupra unei anumite stele sau care razǎ este în evaluare a unui proces. Împreunǎ cu descompunerea, denumitǎ si partitionare. Echilibreazǎ încǎrcarea, reduce costul comunicǎrii si managementului.Tratarea structuratǎ lucreazǎ de regulǎ bine. Inspectarea codului (bucle paralel) sau întelegerea aplicatiei. Euristicile binecunoscute. Asignarea poate fi staticǎ sau dinamicǎ.Programatorii sunt preocupati mai întâi de partiţionare. Uzual este independentǎ de arhitecturǎ sau de modelul de programare. Dar costul si complexitatea utilizǎrii primitivelor pot afecta deciziile.Arhitecţii presupun cǎ programul face o treabǎ raţionalǎ din ea.
Orchestrarea
• Numirea datelor• Structurarea comunicǎrii• Sincronizarea• Organizarea structurilor de date si planificarea temporalǎ a taskurilorTeluri• Reducerea costului comunicǎrii si sincronizǎrii cu vedere dinspre
procesoare• Prezervarea localismului datelor de referinţǎ (inclusiv organizarea
strucutralǎ a datelor)• Planificarea taskurilor pentru a satisface timpuriu dependenţele• Reducerea overheadului managementului paralelApropierea foarte clarǎ de arhitecturǎ (si de modelul si limbajul de programare)• Alegerile depind mult de abstractiile de comunicare, de eficienta
primitivelor• Arhitecţii trebuie sǎ furnizeze eficient primitive adecvate.
Mapping
Dupǎ orchestare, existǎ deja un program paralel.Douǎ aspecte ale asocierii (mapping):
53
• Care procese vor rula pe acelasi procesor dacǎ este necesar• Care proces ruleazǎ pe un procesor particularAsocierea cu o topologie de retea.O extremǎ: spatiu partajat. Masina este divizatǎ în subseturi, pe un subset la fiecare moment o singurǎ aplicatie. Procesele pot fi prinse (pinned) de procesoare sau lǎsate în seama sistemului de operare (OS).Altǎ extremǎ: OS are controlul complet al administrǎrii resurselor. Sistemul de operare utilizeazǎ tehnici de performantǎ care vor fi discutate mai departe.Lumea realǎ se încadreazǎ între aceste extreme. Utilizatorul specificǎ dorinţele sale în anumite privinţe, sistemul le poate ignora.Se adoptǎ uzual punctul de vedere: proces ↔ procesor.
Paralelizarea calculului fatǎ-n fatǎ cu paralelizarea pe date
Vederea de mai sus este centratǎ pe calcul. Calculul este descompus si asignat (partiţionat).O vedere la fel de naturalǎ este adesea partitionarea datelor. Calculul îsi urmeazǎ datele: proprietarul calculeazǎ. Exemplul pe grilǎ; data mining; HPF – High Performance Fortran.Dar în general nu este suficient. Distinctia între calcul si date este mai accentuatǎ în multe aplicatii (Barnes-Hut, Raytrace). Rǎmâne de retinut punctul de vedere centrat pe calcule. Accesul la date si comunicarea este parte din orchestrare.
Ţinte de nivel înalt
Performanţe înalte (accelerarea faţǎ de programul secvential)
Dar efort redus pentru utilizarea resurselor si dezvoltare.
54
Implicaţii pentru proiectanţii de algoritmi si pentru arhitecţi. Proiectanţii de algoritmi: performanţe ridicate, necesitǎţi reduse de resurse. Arhitecţii: performante ridicate, cost redus, efort de programare redus. Ca exemplu, cresterea gradualǎ a performantelor cu effort de programare pe mǎsurǎ poate fi de preferat unui salt brusc dupǎ un effort de programare considerabil.
Cum aratǎ un program paralel
Paralelizarea unui program (exemplu)
Problemele motivante toate duc la programe ample si complexe.Sǎ examinǎm o versiune simplificatǎ a unui fragment din simularea oceanicǎ. Un program-solutie iterativ.Se ilustreazǎ cu un program paralel într-un limbaj paralel de nivel scǎzut. Un pseudocod asemǎnǎtor C-ului cu extensii simple pentru paralelism. Sunt expuse primitivele de bazǎ pentru comunicare si sincronizare care trebuie sǎ aibe suportul necesar. Aceasta este starea celor mai multe programe paralel reale de azi.
Exemplu cu program-solutie pe grilǎ
Expresia pentru actualizarea punctelor interioareA[I, J]=0.2*(A[I, J] + A[I, J – 1] + A[I – 1, J] + A[I, J + 1] + A[I + 1, J])
O versiune simplificatǎ de program-solutie pentru simularea oceanicǎ.Metoda Gauss-Seidel (vecinii apropiati) merge la convergentǎ.Punctele interioare, nxn din cele (n + 2)x(n + 2) sunt actualizate la fiecare pas în fiecare parcugere a grilei.Actualizǎrile sunt fǎcute pe loc în grilǎ si sunt diferite de valorile calculate anterior.Se acumuleazǎ diferentele partiale într-o diferentǎ globalǎ la finalul fiecǎrei parcurgeri.Se verificǎ dacǎ eroarea este la convergentǎ (într-o limitǎ de tolerantǎ); dacǎ da calculul înceteazǎ, dacǎ nu se reia parcurgerea grilei.
55
1. int n; /*dimensiunile matricei: (n + 2)x(n + 2) elemente*/2. float **A, diff = 0;3. main()4. begin5. read(n); /*se citeste parameterul de intrare: dimensiunea matricei*/6. A ← malloc (a 2-d array of size n + 2 by n + 2 doubles);7. initialize(A); /*se initializeazǎ cumva matricea A*/8. Solve (A); /*se apeleazǎ rutina de rezolvare a ecuatiei*/9. end main10. procedure Solve (A) /*rezsolvǎ sistemul de ecuatii*/11. float **A; /*A este un masiv de (n + 2)-pe-(n + 2) elemente*/12. begin13. int i, j, done = 0;14. float diff = 0, temp;15. while (!done) do /*bucla ultimǎ în toate parcurgerile*/16. diff = 0; /*se initializeazǎ diferenta maximǎ la 0*/17. for i ← 1 to n do/*se parcurge grila pe toate punctele care nu sunt pe frontierǎ*/18. for j ← 1 to n do19. temp = A[i,j]; /*de salveazǎ vechea valoare a elementului*/20. A[i,j] ← 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] + A[i,j+1] + A[i+1,j]); /*se calculeazǎ media*/21. diff += abs(A[i,j] - temp);22. end for23. end for24. if (diff/(n*n) < TOL) then done = 1;25. end while26. end procedure
Descompunerea
Calea simplǎ de a identifica concurenta constǎ în examinarea iteratiilor din buclǎ: analiza concurentei, dacǎ nu este suficientǎ concurentǎ.Aici, la acest nivel nu-i prea multǎ concurentǎ (toate buclele sunt secventiale).Se examineazǎ dependentele fundamentale ignorând structura buclelor.
56
Concurenta este de O(n) în lungul antidiagonalelor, serializarea este de O(n) pe diagonale. De retinut structura buclei, utilizarea sincronizǎrilor punct-la-punct; probleme? Restructurarea sincronizǎrilor globale; probleme?
Exploatarea cunostintelor asupra aplicatiei
Reordonarea traversǎrii grilei: ordonarea rosu-negru.
Ordonarea diferitǎ a actualizǎrilor: poate duce la o convergentǎ mai rapidǎ sau mai lentǎ.Parcursul pe rosu si parcursul pe negru sunt fiecare deplin paralele: sincronizare globalǎ între ele (conservativǎ dar convenabilǎ. Simularea oceanicǎ utilizezǎ rosu-negru; utilizǎm ilustrativ una mai simplǎ, asincronǎ. Nu rosu-negru ci, simplu, ignorǎm dependentele în parcurs. Ordinea rǎmâne secventialǎ ca altǎdatǎ, programul paralel este nondeterminist.
Numai descompunere
15. while (!done) do /*o buclǎ secventialǎ*/16. diff = 0;
17. for_all i ← 1 to n do /*o buclǎ paralel continentǎ*/18. for_all j ← 1 to n do19. temp = A[i,j];20. A[i,j] ← 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] +
A[i,j+1] + A[i+1,j]);21. diff += abs(A[i,j] - temp);22. end for_all23. end for_all24. if (diff/(n*n) < TOL) then done = 1;25. end while
Descompunerea în elemente: gradul de concurentǎ n2.Descompunerea în linii, face bucla din linia 18 a programului secventialǎ; de gradul n.for_all lasǎ asignarea în seama sistemului; sincronizarea este globalǎ si implicitǎ la finalul buclei for_all.
57
Asignarea
Asignarea staticǎ (fiind datǎ descompunerea în linii).
Asignarea pe blocuri de linii: linia i este atribuitǎ procesului
pi
.
Asignarea de linii ciclicǎ: procesului i îi sunt atribuite liniile i, i + p s.a.m.d.
Asignarea dinamicǎ: se preia un indice de linie, se lucreazǎ pe acea linie, se preia o linie nouǎ, s.a.m.d.Asignarea staticǎ pe linii reduce concurenta (de la n la p); asignarea în blocuri reduce comunicarea prin retinerea laolaltǎ de linii adiacente.Sǎ adâncim problema orchestrǎrii din punct de vedere al modelelor de programare.
Programul-solutie paralel pe date
1. int n, nprocs;/*dimensiunea grilei (n + 2-pe-n + 2) si numǎrul de procese*/
2. float **A, diff = 0;3. main()4. begin5. read(n); read(nprocs);
/*se citesc dimensiunea grilei si numǎrul de procese */6. A ← G_MALLOC (a 2-d array of size n+2 by n+2 doubles);7. initialize(A); /*se initializeazǎ cumva matricea A*/8. Solve (A); /*se apeleazǎ rutina de rezolvare a ecuatiei*/9. end main10. procedure Solve(A) /*se rezolvǎ sistemul de ecuatii*/11. float **A; /*A este un masiv de (n + 2-pe-n + 2)*/12. begin13. int i, j, done = 0;14. float mydiff = 0, temp;14a. DECOMP A[BLOCK,*, nprocs];15. while (!done) do /*bucla exterioarǎ pe toate parcurgerile*/16. mydiff = 0; /*se initializeazǎ diferenta maximǎ la 0*/17. for_all i ← 1 to n do
58
/*parcurgere pe punctele grilei care nu sunt pe frontierǎ*/18. for_all j ← 1 to n do19. temp = A[i,j]; /*se salveazǎ vechea valoare a elementului*/20. A[i,j] ← 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] +
A[i,j+1] + A[i+1,j]); /*se calculeazǎ media*/21. mydiff += abs(A[i,j] - temp);22. end for_all23. end for_all23a. REDUCE (mydiff, diff, ADD);24. if (diff/(n*n) < TOL) then done = 1;25. end while26. end procedure
Programul-solutie în varianta SAS
Program unic date multiple (SPMD – Single Program Multiple Data)
Asignarea este controlatǎ de valori ale variabilelor utilizate ca limite ale buclelor.
1. int n, nprocs;/*dimensiunea matricei si numǎrul de procesoare utilizate*/
2a. float **A, diff;/*A este un masiv global (partajat) care reprezintǎ grila*//*diff este diferenta maximǎ globalǎ (partajatǎ) pentru parcurgerea curentǎ*/
2b. LOCKDEC(diff_lock);/*declaratie de lock/lacǎt pentru a introduce excluderea mutualǎ*/
2c. BARDEC (bar1);/*declaratie de barierǎ pentru sincronizarea globalǎ între parcurgeri*/
3. main()4. begin5. read(n); read(nprocs);
/*se citesc dimensiunea matricei de intrare si numǎrul de procese*/
59
6. A ← G_MALLOC;/*un masiv bidimensional de mǎrimea n + 2 pe n + 2 în dublǎ precizie*/
7. initialize(A); /*se initializeazǎ A într-un mod neprecizat*/8a. CREATE (nprocs–1, Solve, A);8. Solve(A); /*procesul principal devine si el un proces lucrǎtor*/8b. WAIT_FOR_END (nprocs–1);
/*se asteaptǎ ca toate procesele descendente create sǎ finalizeze*/9. end main10. procedure Solve(A)11. float **A;
/*A este masivul partajat integral n + 2-pe-n + 2 ca în programulsecvential*/
12. begin13. int i,j, pid, done = 0;14. float temp, mydiff = 0; /*variabile private*/14a. int mymin = 1 + (pid * n/nprocs);
/*pentru simplitate, se presupune cǎ n este divizibilcu numǎrul de procese*/
14b. int mymax = mymin + n/nprocs – 1;15. while (!done) do /*bucla exterioarǎ pe toate elementele diagonale*/16. mydiff = diff = 0;
/*se pune la zero diferenta globalǎ diff (OK pentru tot ce-i de fǎcut)*/16a. BARRIER(bar1, nprocs);
/*ne asigurǎm cǎ toate procesele ajung aici înainte cavreunul sǎ modifice diff*/
17. for i ← mymin to mymax do/*pentru fiecare din liniile atribuite unui proces*/
18. for j ← 1 to n do/*pentru toate elementele acelei linii care nu sunt pe frontierǎ*/
19. temp = A[i,j];20. A[i,j] = 0.2 * (A[i,j] + A[i,j-1] + A[i-1,j] +
A[i,j+1] + A[i+1,j]);21. mydiff += abs(A[i,j] - temp);22. endfor23. endfor24a. LOCK(diff_lock);
/*dacǎ este necesar se actualizeazǎ diferenta globalǎ diff */24b. diff += mydiff;24c. UNLOCK(diff_lock);24d. BARRIER(bar1, nprocs);
/*ne asigurǎm cǎ toate procesele ajung aici înainte deverificarea conditiei done*/
24e. if (diff/(n*n) < TOL) then done = 1;/*se verificǎ convergenta; toate procesele obtin acelasi rǎspuns*/
24f. BARRIER(bar1, nprocs);25. endwhile26. end procedure
60
Observatii asupra programului SAS
SPMD: nu existǎ lockstep5 sau nici mǎcar în mod necesar aceleasi instructiuni.Asignarea este controlatǎ de valorile variabilelor utilizate ca limite pentru bucle. Pid (process identificator) unic pe fiecare proces utilizat pentru asignarea controlului.Conditia “done” evaluatǎ redundant de toate procesele.Codul nu face updatarea identicǎ cu aceea a unui program secvential. Fiecare proces detine o variabilǎ privatǎ mydiff.Cele mai interesante operatii speciale sunt cele de sincronizare. Acumulǎrile în variabila diff partajatǎ trebuie sǎ fie mutual exclusive. De ce sunt necesare bariere pentru toate procesele?
Necesitatea excluderii mutuale
Codul pe care-l executǎ fiecare procesor:
load the value of diff into register r1add the register r2 to register r1store the value of register r1 into diff
O posibilǎ intercalare (procesoarele P1 si P2):
r1 ← diff {P1 primeste 0 în registrul sǎu r1}r1 ← diff {P2 primeste de asemenea 0}r1 ← r1+r2 {P1 seteazǎ registrul sǎu r1 la 1}r1 ← r1+r2 {P2 seteazǎ registrul sǎu r1 la 1}diff ← r1 {P1 seteazǎ cell_cost la 1}diff ← r1 {P2 seteazǎ cell_cost la 1}
Este necesar ca operatiunile de setare sǎ fie atomice (mutual exclusive – Mutex).
Excluderea mutualǎ
5 Sistemele lockstep sunt sisteme de calcul redundante care executǎ acelasi set de operatii în acelasi timp în paralel. Iesirea din operatiile lockstep poate fi comparatǎ pentru a determina dacǎ s-a produs o eroare.Pentru a rula în lockstep, fiecare sistem este pus sǎ treacǎ de la o stare bine definitǎ la urmǎtoarea stare bine definitǎ. Când un set nou de intrǎri ajung la sistem, acesta le proceseazǎ, genereazǎ iesiri noi si updateazǎ starea sa. Acest set de schimbǎri (intrǎri noi, iesiri noi, stare nouǎ) este consideratǎ definitorie pentru acel pas si trebuie tratatǎ ca o tranzactie atomicǎ; cu alte cuvinte, fie de se produc toate sau nu se produce nici una, dar nimic între ele.Termenul lockstep are originea în limbajul puscǎriilor si se referǎ la mersul sincronizat în care cei care mǎrsǎluiesc sunt atât de aproape unul de altul pe cât este posibil fizic.
61
Excluderea mutualǎ este furnizatǎ de perechea LOCK-UNLOCK din jurul sectiunii critice. Set de operatii pe care îl dorim executat atomic. Implementarea perechii LOCK-UNLOCK trebuie sǎ garanteze excluderea mutualǎ.
Use Pthreads:#include <stdio.h>#include <pthread.h>pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;...pthread_mutex_lock( &mutex1 );diff += mydiff;pthread_mutex_unlock( &mutex1 );
Probleme cu Mutex pe masini mari?
Sincronizarea evenimentelor globale
BARRIER(nprocs): asteaptǎ aici pânǎ cele nprocs procese ating acest punct. Se construieste din primitive de nivel scǎzut.Exemplu cu suma globalǎ: asteaptǎ pentru ca toate sǎ acumuleze înaintea utilizǎrii sumei sum. Adesea utilizatǎ pentru a separa fazele calculului.
Global Event Synchronization
O formǎ conservatoare de a pǎstra dependentele, dar usor de utilizat.WAIT_FOR_END (nprocs – 1).
Sincronizarea evenimentelor de grup
Este implicat un subset de procese. Poate utiliza flag-uri sau bariere (care implicǎ numai subsetul). Conceptele de producǎtor si de consumator.Tipuri principale: producǎtor unic, consumatori multipli; producǎtori multipli consumator unic; producǎtori multipli, consumatori multipli.
Sincronizarea evenimentelor punct-la-punct
62
Un proces face o notificare altuia despre un eveniment, astfel încât notificatul poate continua. Un exemplu comun: producǎtor-consumator (buffer limitat).
Programele concurente pe un sistem uniprocesor: semafoare. Programele paralel cu spatiul de adresare partajat: semafoare sau variabile obisnuite utilizate ca flag-uri.
Sincronizarea si cozile
Paralelismul pipeline.Cozile între etapele unei pipeline producǎtor-consumator.Firele multiple pot coopera pe o etapǎ pipeline; de exemplu, în schema paralel pe date sau în modalitatea taskuri-paralele.Numai firele care coopereazǎ într-o etapǎ trebuie sǎ se sincronizeze (lock, barrier etc.) în acea etapǎ.Dar accesul la aceeasi coadǎ necesitǎ a fi sincronizat.
Programarea cu fire:
Creare si jonctiune
#include <pthread.h>void *parallel_work( void *ptr );main(){pthread_t threads[N];int i;...for (i=1; i < N; i++ )pthread_create( &threads[i], NULL,
63
parallel_work, (void*) &input[i]);parallel_work( &input[0] ); /* optional */for (i=1; i < N; i++ )pthread_join( threads[i], NULL);}void *parallel_work( void *ptr ){... /* work here */}
Mai multe despre programarea cu fire
Este numǎrul de fire diferit de numǎrul de procesoare? În ce conditii e de dorit a fi egale? În ce conditii e de dorit a fi diferite?Firul “master” trebuie sǎ execute sau nu lucru paralel? Face lucru paralel: creazǎ N – 1 fire. Firul master este special: coordoneazǎ si vegheazǎ.Creazǎ N fire.
Mai mult despre programarea cu p-fire (Pthreads)
Transfer de date. Transferǎ intrǎri/ieisiri prin pointeri I/O. Transfer prin date partajate.Caracteristicile firelor. Controlate prin atribute struct, similar unui obiect C++. Preferintele se seteazǎ înaintea creǎrii firelor cum ar fi alternativa uniprocesor-multiprocesor.Încheierea firelor. Firele se isprǎvesc când functia lor revine (returns). Firul se poate termina mai devreme prin apelul la functia pthread_exit(). Celelalte fire pot fi oprite (kill) prin apelul la functia pthread_cancel().
Monitor în stilul Mesa (un limbaj de programare de nivel înalt – Xerox)
#include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
64
...
Este aici o relatie consumator-producǎtor? Este vreo problemǎ cu codul?
Consumator-producǎtor cu monitor stilul Mesa.
#include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t full = PTHREAD_COND_INITIALIZER;pthread_cond_t empty = PTHREAD_COND_INITIALIZER;
Insert(Buf_t buffer,item_t item)
{pthread_mutex_lock(&mutex);if (count==N)
pthread_cond_wait(&full, &mutex);
insert item into buffercount++;pthread_cond_signal(empty);pthread_mutex_unlock(&mutex);}
Item_t Remove(Buf_t buffer){
pthread_mutex_lock(&mutex);if (!count)
pthread_cond_wait(&empty, &mutex);
remove item from buffercount--;pthread_cond_signal(&full);pthread_mutex_unlock(&mutex);}
Vreo problemǎ cu asta?
#include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t full = PTHREAD_COND_INITIALIZER;pthread_cond_t empty = PTHREAD_COND_INITIALIZER;
Insert(Buf_t buffer,item_t item)
{pthread_mutex_lock(&mutex);while (count==N)
pthread_cond_wait(&full, &mutex);
insert item into buffercount++;pthread_cond_signal(empty);
pthread_mutex_unlock(&mutex);}Item_t Remove(Buf_t buffer){
pthread_mutex_lock(&mutex);while (!count)
pthread_cond_wait(&empty, &mutex);
remove item from buffer
65
count--;pthread_cond_signal(&full);pthread_mutex_unlock(&mutex);}
Acesta este idiomul monitorului în stil Mesa
Programul-solutie pentru grilǎ, cu transfer de mesaje
Masivul A nu mai poate fi declarat ca fiind partajat. Masivul trebuie compus si recompus logic din masive private per-proces: alocat uzual în concordantǎ cu asignarea lucrului, procesul a asignat un set de linii alocate local.Transfer de linii întregi între transversale.Structural este similar cu SAS (de pildǎ SPMD), dar orchestrarea este diferitǎ. Structura datelor si accesul/numirea datelor, comunicarea, sincronizarea.
1. int pid, n, b;/*identificator al procesului, dimensiunea matricei si numǎrul deprocesoare care vor fi utilizate*/
2. float **myA;3. main()4. begin5. read(n); read(nprocs);
/*se citeste dimensiunea matricei de intrare si numǎrul de procese*/8a. CREATE (nprocs-1, Solve);8b. Solve(); /*procesul principal devine el însusi lucrǎtor*/8c. WAIT_FOR_END (nprocs–1);
/*asteptare pentru ca toate procesele descendente create sǎ se încheie*/9. end main10. procedure Solve()11. begin13. int i,j, pid, n’ = n/nprocs, done = 0;14. float temp, tempdiff, mydiff = 0; /*variabile private*/6. myA ← malloc(a 2-d array of size [n/nprocs + 2] by
n+2); /*liniile din A asignate acestui proces*/7. initialize(myA);
/*se initializeazǎ liniile din A asignate, într-o manierǎ nespecificatǎ*/15. while (!done) do16. mydiff = 0; /*se pune variabila localǎ diff egalǎ cu 0*/16a. if (pid != 0) then SEND(&myA[1,0],n*sizeof(float),pid-1,ROW);16b. if (pid = nprocs-1) thenSEND(&myA[n’,0],n*sizeof(float),pid+1,ROW);16c. if (pid != 0) then RECEIVE(&myA[0,0],n*sizeof(float),pid-1,ROW);16d. if (pid != nprocs-1) thenRECEIVE(&myA[n’+1,0],n*sizeof(float), pid+1,ROW);
66
/*liniile de frontierǎ ale vecinilor sunt copiate aici în myA[0,*] si în myA[n’+1,*]*/
17. for i ← 1 to n’ do/*pentru fiecare din liniile din myA (nonghost)*/
18. for j ← 1 to n do/*pentru toate elementele acelei linii care nu sunt pe frontierǎ*/
19. temp = myA[i,j];20. myA[i,j] = 0.2 * (myA[i,j] + myA[i,j-1] + myA[i-1,j] +21. myA[i,j+1] + myA[i+1,j]);22. mydiff += abs(myA[i,j] - temp);23. endfor24. endfor
/*se comunicǎ valorile locale diff si se determinǎ dacǎ “done = true”;poate fi înlocuitǎ cu operatii de reducere si broadcast*/
25a. if (pid != 0) then/*procesul 0 detine valoarea globalǎ totalǎ diff*/
25b. SEND(mydiff,sizeof(float),0,DIFF);25c. RECEIVE(done,sizeof(int),0,DONE);25d. else /*se executǎ de cǎtre procesul cu pid 0*/25e. for i ← 1 to nprocs-1 do /*pentru toate celelalte procese*/25f. RECEIVE(tempdiff,sizeof(float),*,DIFF);25g. mydiff += tempdiff; /*se acumuleazǎ într-un total*/25h. endfor25i if (mydiff/(n*n) < TOL) then done = 1;25j. for i ← 1 to nprocs-1 do /*pentru toate celelalte procese*/25k. SEND(done,sizeof(int),i,DONE);25l. endfor25m. endif26. endwhile27. end procedure
Note asupra programului cu transfer de mesaje
Sunt în program câteva linii fantomatice…Receive nu transferǎ date, send transferǎ. Spre deosebire de programul SAS care este initiat uzual ca primitor (receiver – încarcǎ date localizate).Comunicarea se executǎ la începutul unei iteratii, deci nu existǎ asincronism.Comunicarea se face în linii întregi, nu element cu element.Miezul este similar dar indicii/limitele lor sunt evidentiate ca variabile locale si nu globale.Sincronizarea se face prin send-uri si receive-uri. Actualizarea variabilei globale diff si evenimentul sincronizǎrii pentru conditiile îndeplinite. Se pot implementa lacǎte si bariere (locks and barriers) cu mesaje.Se pot utiliza apelurile la functiile de bibiliotecǎ REDUCE si BROADCAST pentru a simplifica codul.
67
/*se comunicǎ valorile locale diff si se determinǎ dacǎ “done = true”;poate fi înlocuitǎ cu operatii de reducere si broadcast*/
25b. REDUCE(0,mydiff,sizeof(float),ADD);25c. if (pid == 0) then25i. if (mydiff/(n*n) < TOL) then done = 1;25k. endif25m. BROADCAST(0,done,sizeof(int),DONE);
Variante de send si receive
Functionalitatea poate fi extinsǎ: stride (a merge cu pasi mari), scatter-gather (împrǎstie-adunǎ), groups (pe grupe).Arome semantice: pe baza momentului când este returnat controlul.Efect atunci când structurile de date sau bufferele pot fi reutilizate la ambele extremitǎti.
Afecteazǎ evenimentul sincronizare (excludere mutualǎ prin ordin (fiat): numai un proces detine accesul la date).Afecteazǎ usurinta programǎrii si performantele. Mesajele sincrone asigurǎ sincronizarea prin ele însesi, prin potrivire (match).Pentru mesajele asincrone, este necesarǎ sincronizarea separatǎ a evenimentelor. Cu mesaje de sincronizare, codul de mai sus este blocat (deadlocked). Cum se reparǎ?
Orchestratia: sumar
Pentru spatiu de adresare partajat. Datele private si cele partajate sunt separate explicit. Comunicarea este implicitǎ în pattern-uri de acces. Pentru distribuirea datelor nu este necesarǎ corectitudinea. Sincronizarea prin operatii atomice pe datele partajate. Sincronizarea este explicitǎ si distinctǎ de comunicarea datelor.
Pentru transferul de mesaje. Sunt necesare spatii de adresare locale pentru distribuirea datelor. Nu existǎ structuri de partajare explicite (sunt implicite în patternurile de comunicare). Comunicarea este explicitǎ. Sincronizarea este implicitǎ în comunicare (cel putin în cazul sincron). Excluderea mutualǎ prin ordin (fiat).
68
Corectitudinea programelor-solutie pentru grilǎ
Descompunerea si asignarea sunt similare în SAS si MP.Orchestratia este diferitǎ pe: structurile de date, accesul/numirea datelor, comunicare, sincronizare.
Cerintele privind performantele sunt o altǎ poveste …
69
Exemplu privind problema coerentei memoriei cache
Dupǎ evenimentul 3, procesoarele vǎd pentru variabila u valori diferite.Cu rescrierea memoriilor cache, valoarea rescrisǎ în memorie depinde de secventa de întâmplǎri mai mult sau mai putin aleatoare în care memoriile sunt evacuate sau rescrise când procesoarele care au acces la memoria principalǎ pot vedea valori depǎsite, ceea ce este inacceptabil pentru un program!
Un sistem coerent de memorii (discutie intuitivǎ)
La lectura unei locatii trebuie sǎ se vadǎ cea mai recentǎ valoare scrisǎ de vreunul dintre procesoare. Pe sistemele uniprocesor nu apar probleme între procese: existǎ o coerentǎ între operatiile DMA (Direct Memory Access) si memoria cache a procesorului. În sistemele cu mai multe procesoare: problema coerentei apare ca si când procesele ar fi intercalate pe un sistem uniprocesor.
Probleme cu rationamentul intuitiv
Valoarea returnatǎ de o operatie de citire ar trebui sǎ fie ultima valoare scrisǎ, dar adjectivul “ultima” nu este binedefinit. În cazul secvential, “ultima” se defineste în raport cu ordinea datǎ de program, nu ca o ordine temporalǎ ci ca ordine a operatiilor prezentate procesorului în limbajul-masinǎ.În cazul paralel, ordinea programatǎ este definitǎ în cadrul unui program. Trebuie gǎsit un sens pentru ordinea generalǎ, pe toate procesele.
Câteva definitii de bazǎ
Operatie cu memoria: un singur acces la memorie de tipurile read (load), write (store) sau readmodify-read. Operatiile acestea sunt presupuse a fi executate atomic una în raport cu alta.
71
Issue: o operatie cu memoria se editeazǎ (issues) când pǎrǎseste ambianta internǎ a procesorului si este prezentatǎ sistemului de memorie (cache, buffer, …)Perform: operatia se considerǎ cǎ a avut loc, decât când procesorul poate “vorbi” de alte operatii cu memoria pe care le genereazǎ/editeaǎ (issues).Un write face un perform în raport cu procesorul când un read urmǎtor al procesorului returneazǎ valoarea acelui write sau a unui write ulterior.Un read face un perform în raport cu procesorul când write-uri urmǎtoare generate de procesor nu pot afecta valoarea returnatǎ de read.În sistemele multiprocesor definitia rǎmâne, dar se înlocuieste “procesorul” cu “un procesor”. De asemenea, perform complet: o operatie perform în raport cu toate procesoarele.Este încǎ necesar a da sens termenului de ordine în operatiile din diferite procese.
Ascutind intuitia
Sǎ ne imaginǎm o singurǎ memorie partajatǎ fǎrǎ vreun cache. Fiecare read si write adresate unei locatii are acces la aceeasi locatie fizicǎ. Operatia este completǎ când:• Memoria impune o ordine serialǎ sau totalǎ pe operatiile cu locatia• Operatiile cu locatia de la un procesor anumit sunt în ordinea din program• Ordinea operatiilor cu locatia de la procesoare diferite este un gen de
intercalare care prezervǎ ordinile individuale de program.“Last” înseamnǎ acum cel mai recent într-o ordine serialǎ ipoteticǎ care mentine aceste proprietǎti.Pentru ca ordinea serialǎ sǎ fie consistentǎ, toate procesoarele trebuie sǎ vadǎ scrierile (the writes) în locatie în aceeasi ordine (dacǎ au intentia sǎ vadǎ adicǎ sǎ facǎ o citire).De observat cǎ ordinea totalǎ nu este realmente niciodatǎ construitǎ în sistemele reale. Nici mǎcar memoria sau vreun hardware nu doreste sǎ vadǎ toate operatiile. Dar programul ar trebui sǎ se comporte ca si când se forteazǎ (enforced) o anumitǎ ordine serialǎ. Ordinea în care lucrurile par a se produce, nu cea în care realmente se produc.
Definitia formalǎ a coerentei
Rezultatele unui program: valorile returnate de operatiile lui de citire (read).Un sistem de memorii este coerent dacǎ rezultatele oricǎrei executii a unui program sunt astfel ca (pentru) fiecare locatie este posibil a construi o ordine serialǎ ipoteticǎ a tuturor operatiilor cu o locatie, care sunt consistente cu rezutatele executiei si în care:1. Operatiile generate (issued) de orice proces apar în ordinea generatǎ
(issued) de acel proces si
72
2. Valoarea returnatǎ de un read este valoarea scrisǎ (written) de ultimul write în acea locatie în ordinea serialǎ ipoteticǎ.
Sunt necesare douǎ proprietǎti:• Propagarea scrierilor: valoarea scrisǎ trebuie sǎ devinǎ vizibilǎ tuturor
imediat• Serializarea scrierilor: operatiile write într-o locatie, oricare, sǎ fie vizibile
în aceeasi ordine de toti.Dacǎ un procesor vede w1 dupǎ w2, nici un alt procesor nu trebuie sǎ vadǎ invers. Nu este necesarǎ o serializare similarǎ pentru operatiile read deoarece citirile nu sunt vizibile altora.
Solutii potentiale de coerentǎ hardware
Solutia detectivisticǎ (snooping):Toate cererile de date se trimit tuturor procesoarelor. Procesoarele cautǎ si detecteazǎ dacǎ au o copie proprie a detelor solicitate si rǎspund în consecintǎ.Solutia cere o difuzare (broadcast) deoarece informatia cache-atǎ este plasatǎ la procesoare.Solutia snooping lucreazǎ bine cu bus-ul (este un mediu de broadcast natural).Este solutie dominantǎ pe masinile relativ mici (cea mai mare parte din piatǎ).Scheme/solutii bazate pe director:Un director tine evidenta a ceea ce este partajat într-un loc logic centraliza(n)t.Pentru sistemele cu memorie distribuitǎ si directorul este distribuit din ratiuni de scalabilitate (se evitǎ astfel locurile înguste – bottleneck).Se trimit solicitǎri punct-la-punct la procesoare prin retea.Se scaleazǎ mai bine decât snooping-ul.Ideea a existat înainte de schemele bazate pe actiunea detectivisticǎ (snooping).
Topologia pentru snooping-ul pe bus
Memoria: centralizatǎ cu acces uniform (UMA – Uniform Memory Access) si interconectare pe bus.Exemple timpurii: Firefly, Encore, Sequent, …Un exemplu curent: Unisys.
73
Protocoale de bazǎ pentru Snoopy
Protocolul Write InvalidateCitiri multiple, scriere unicǎScrierea în zona de date partajatǎ: o instructiune de invalidare este expediatǎ cǎtre toate cache-urile, care detecteazǎ si invalideazǎ orice (altǎ) copie.Ratare de citire (read miss):• Write-through (scrie complet, pânǎ la capǎt): memoria este tot timpul
actualǎ (up-to-date)• Write-back: sondeazǎ (snoop) în cache-uri pentru a afla copia cea mai
recentǎ.Protocolul Write Broadcast (este tipic un write-through):Scriere la date partajate: broadcast pe bus, supravegherea (snoop) procesoarelor si actualizarea oricǎrei cópii.Ratare de read: memoria este totdeauna up-to-date.Serializarea scrierilor: bus-ul serializeazǎ cererile!Bus-ul este singurul punct de arbitraj.Write Invalidate fatǎ-n fatǎ cu Write Broadcast:Varianta Invalidate cere o tranzactie constând într-o executie de write.Varianta Invalidate utilizeazǎ localismul spatial: o tranzactie pe un bloc de memorie.Varianta Broadcast are latenţǎ mai micǎ între write si read.
Un exemplu de protocol Snoopy
Protocolul cu invalidare, rescrierea memoriei cache. Fiecare bloc de memorie este în una din stǎrile:• Curat în toate memoriile cache si actualǎ în memorie (partajatǎ)• SAU exact un cache murdar (dirty) (exclusiv)• SAU nu în nici un cache.Fiecare bloc de cache este în una din stǎrile:• Partajat: blocul poate fi citit• SAU exclusiv cache-ul are o copie exclusivǎ, ea se poate citi si este murdarǎ• SAU invalid: blocul nu contine date (de luat în considerare).Ratǎri la citire (read miss): produce o documentare (snoop) a tuturor cache-urilor pe bus.Scrierile (writes) pentru a curǎta o linie sunt tratate ca ratǎri (miss).
74
Masina de stare cu snoopy-cache (I)
Masina de stare cu snoopy-cache (II)
Masina de stare cu snoopy-cache (III)
75
Exemplu
Se admite cǎ starea initialǎ a cache-ului este invalidǎ si A1 si A2 se asociazǎ (map) aceluiasi bloc de cache, dar A1 ≠ A2
Exemplu: pasul 1
Arcul orientat activ este încadrat într-un paralelogram.
Exemplu: pasul 2
76
Paşi
Proc.1 (P1) Proc.2 (P2) Bus Mem.
Star
e
Adr
esa
Val
oare
Star
e
Adr
esa
Val
oare
Act
iune
Proc
esor
Adr
esa
Val
oare
Adr
esa
Val
oare
1. P1 scrie 10 în A1 E
xclu
siv
A1 10
WrM
s
P1 A1
2. P1 citeste pe A1 E
xclu
siv
A1 10
3. P2 citeste pe A1 Pa
rtaj
at
A1R
dMs
P2 A1
Part
ajat
A1 10
WrB
k
P1 A1 10 A1 10
Part
ajat
A1 10
RdD
a
P2 A1 10 A1 10
4. P2 scrie 20 în A1 In
valid
Exc
lusi
v
A1 20
WrM
s
P2 A1 A1 10
5. P2 scrie 40 în A2 W
rMs
P2 A2 20 A1 10
Exc
lusi
v
A2 40
WrB
k
P2 A1 20 A1 20
78
Variante de cache cu snooping
Protocolul de bazǎ
Protocolul Berkeley Protocolul Illinois Protocolul MESI
ExclusivePartajatInvalid
Proprietate exclusivǎ
Proprietate partajatǎPartajatInvalid
Privat şi murdarPrivat şi curat
PartajatInvalid
Modificat (privat, ≠ memorie)
Exclusiv (privat, = memorie)
Partajat (partajat, = memorie)
Invalid
Proprietarul poate updata prin bus operatiile invalidate.Proprietarul trebuie sǎ re-scrie când înlocuieste în cache.Dacǎ citirea (read) are sursa în memorie, atunci este vorba de “privat si curat”.Dacǎ citirea are sursa în alt cache, atunci este vorba de “partajat”.Se poate scrie (write) în cache dacǎ se mentine “privat curat” sau “privat murdar”.Se tin sub observatie (snoop) si extensiile de cache.
Complicatii la implementare
Competitia pentru scriere (Write Races): nu se poate updata cache-ul pânǎ când nu se obtine accesul la bus. Altminteri, un alt procesor poate prelua bus-ul primul si apoi scrie în acelasi bloc de cache!Un proces în douǎ etape: arbitrajul de bus, plasare de “miss” pe bus si completarea operatiei. Dacǎ apare “miss” pentru a bloca în timp ce este asteptat bus-ul, se manipuleazǎ “miss”-ul (poate fi necesarǎ invalidarea) si apoi se reia.
79
Bus cu tranzactii divizate (split): tranzactia pe bus nu este atomicǎ; poate avea tranzactii importante multiple pentru un bloc. “Miss”-urile multiple se pot intercala, permitând ca douǎ cache-uri sǎ acapareze blocul în starea Exclusiv. “Miss”-urile multiple pentru un bloc trebuie urmǎrite si prevenite. Este necesar suport pentru interventii si invalidǎri.
Implementarea de cache-uri snooping
Procesoarele multiple trebuie sǎ fie pe bus, acces atât la adrese cât si la date. Se adaugǎ câteva comenzi noi pentru a executa operatii legate de coerentǎ, suplimentar la read si write.Procesoarele spioneazǎ continuu pe bus-ul de adrese. Dacǎ adresa se potriveste la etichetǎ (tag) atunci fie se face invalidarea fie updatarea.Deoarece fiecare tranzactie pe bus verificǎ etichetele de cache, ar putea interfera cu accesul CPU la cache:Solutia 1: duplicarea setului de etichete pentru cache-urile de nivelul L1 tocmai pentru a permite verificǎri în paralel cu CPU.Solutia 2: cache-ul de nivelul L2 deja este un duplicat dat fiind cǎ nivelul 2 se supune regulii incluziunii cu nivelul L1. În ceea ce priveste dimensiunea blocului, asociativitatea din L2 afecteazǎ nivelul L1.Bus-ul serializeazǎ scrierile, asigurând prin aceasta cǎ nici un alt procesor nu poate executa operatii cu memoria.La un “miss” într-un cache de rescriere (write back cache), s-ar putea avea copia doritǎ si varianta ei murdarǎ asa încât trebuie rǎspuns/replicare.Se adaugǎ la cache un bit suplimentar pentru a determina dacǎ este partajat sau nu.Se adaugǎ a patra stare (MESI – Modified, Exclusive, Shared, Invalid)
Multiprocesoare extinse
Memorie separatǎ pe fiecare procesor.Accesul local sau la distantǎ printr-un controller de memorie.Alternativǎ: director pe fiecare cache care tine evidenta (tracks) stǎrii fiecǎrui bloc din fiecare cache.Care cache-uri au o copie a blocului, curatǎ sau murdarǎ, …Informatii pe bloc de memorie si pe bloc de cache?PLUS: în memorie protocol mai simplu (centralizat/o locatie)MINUS: în memorie directorul este functie de dimensiunea memoriei sau functie de dimensiunea cache-ului.Prevenirea strangulǎrii pe director? Distribuirea articolelor din director cu memoria, fiecare detinând informatia privitoare la care procesoare au cópii în blocurile lor.
80
Multiprocesoare ccNUMA
ccNUMA = Cache Coherent Non-Uniform Memory Access.
Protocol cu/pe director
Este similar protocolului snoopy: se disting trei stǎriShared: mai mult de un procesor detine data, memorie up-to-date.Uncached: nici un procesor nu detine data; invalidǎ în orice cache.Exclusive: un procesor (proprietar) are data; memoria depǎsitǎ (out-of-
date).Directorul trebuie sǎ urmǎreascǎ starea cache-ului, care procesoare au data când starea este shared.• Vector de biti, bitul este 1 dacǎ un procesor anumit are o copie.• Combinatie de ID si vector de biti.Mentinerea simplitǎtii:Scriere pe date non-exclusive, write miss.Procesorul blocheazǎ pânǎ când accesul se încheie.Se presupune cǎ asupra mesajelor primite se actioneazǎ în ordinea în care au fost trimise.În cazul lipsei de bus si a lipsei intentiei de broadcast:Interconectarea nu mai are un singur punct de arbitraj, toate mesajele au rǎspuns explicit.Termeni: o situatie tipicǎ cu implicarea a trei procesoare.Nod local (local node) – nodul de unde provine cererea.Nodul de bastinǎ (home node) – locul în memorie de rezidentǎ a unei adrese.Nodul la distantǎ (remote node) – are o copie a blocului de cache, fie exclusiv, fie partajat.Exemple de mesaje:P = numǎrul procesorului, A = adresa.Mesaje prin protocolul cu director
81
ReadMiss(P, A): de la cache-ul local la directorul HomeProcesorul P citeste data din A, îl face pe P partajant la citire si cere
retur al datei (data back).WriteMiss(P, A): de la cache-ul local la directorul HomeProcesorul P scrie data în A, îl face pe P proprietar exclusiv si cere retur
al datei (data back).Invalidate(P, A): din directorul Home la cache-ul îndepǎrtatInvalideazǎ o copie partajatǎ a lui A la procesorul P.Fetch(P, A): din directorul Home la cache-ul îndepǎrtat (remote)Localizeazǎ si aduce data la adresa A din cache-ul lui P.Fetch&Invalidate(P, A): din directorul Home la cache-ul îndepǎrtatLocalizeazǎ si aduce data din directorul Home din cache-ul lui P si
invalideazǎ directorul cache-ului din nod.DataReply(P, A): din directorul Home la cache-ul îndepǎrtatReturneazǎ data din directorul Home (read miss).
Implemetarea unui director
Probleme:Operatiile nu sunt atomice, de ce?Putem avea blocǎri (deadlocks), de ce?Solutii:Douǎ retele, una pentru cereri si una pentru rǎspunsuri.Cum poate fi de ajutor o astfel de schemǎ?Optimizǎri:Pentru read miss sau pentru write miss în Exclusive, se transmite data direct la cel care a cerut-o de la proprietar la memorie si apoi de la memorie la cel care a cerut-o.Nodul Exclusive este totdeauna proprietarul, este treaba aceasta dificilǎ?
Sincronizare
De ce sincronizare? Trebuie stiut când este sigur pentru procese diferite a utiliza date partajate.Probleme cu sincronizarea:Instructiuni care nu pot fi întrerupte pentru a regǎsi si a updata memoria (operatii atomice); operatii de sincronizare la nivelul utilizatorului care utilizeazǎ aceastǎ primitivǎ; pentru MP-uri de mare capacitate sincronizarea poate fi un loc îngust (o strangulare); tehnici de a reduce controversele si latenta de sincronizare.
Instructiuni atomice pentru lucrul cu memoria
Schimbarea mutualǎ de continut între un registru si o locatie de memorie este atomicǎ.
82
0 ⇒ variabilǎ de sincronizare liberǎ1 ⇒ variabilǎ de sincronizare blocatǎ (locked) sau indisponibilǎSe pune registrul la 1 si se face schimbul.Noua valoare din registru determinǎ succesul în obtinerea blocǎrii (lock)
0 dacǎ blocarea este un succes (procesorul este primul venit)1 dacǎ alt procesor a obtinut deja accesul
Testeazǎ-si-seteazǎ (test-and-set)Testeazǎ o valoare si seteaz-o dacǎ valoarea trece testul.Regǎseste-si-opereazǎ (fetch-and-op): returneazǎ valoarea unei locatii de memorie si executǎ atomic o operatie.0 ⇒ variabilǎ de sincronizare liberǎ
Încarcǎ blocat si memoreazǎ conditional (Load Locked and Store Conditional)
Pe un multiprocesor de mare cuprindere este dificil de implementat o instructiune atomicǎ.Load linked (or load locked) + store conditional.Load linked returneazǎ valoarea initialǎ.Store conditional returneazǎ 1 dacǎ reuseste (nimeni altcineva nu depune în aceeasi locatie de memorie de la precedentul load) si 0 altminteri.Exemplu de schimbare (swap) atomicǎ cu LL (Load Linked) si SC (Store conditional):
try: mov R3,R4 ; mov exchange valuell R2,0(R1) ; load linkedsc R3,0(R1) ; store conditionalbeqz R3,try ; branch store fails (R3 = 0)mov R4,R2 ; put load value in R4
Exemplu de fetch & increment cu LL si SC:
try: ll R2,0(R1) ; load linkedaddi R2,R2,#1 ; increment (OK if reg–reg)sc R2,0(R1) ; store conditionalbeqz R2,try ; branch store fails (R2 = 0)
Blocare ca regulǎ (Always Block)
Acquire(lock) { while (!TAS(lock.value)) Block(lock); }
Release(lock) { lock.value = 0; Unblock(lock); }
Care sunt problemele acestui mod de tratare?
83
Împletire ca regulǎ (Always Spin)
Acquire(lock) { while (!TAS(lock.value)) while(lock.value) ; }
Release(lock) { lock.value = 0; }
Douǎ bucle împletite (spinning) în Acquire()?Probleme cu aceastǎ tratare?
Algoritmi optimali
Care este solutia optimǎ între spin si block?Cunoasterea viitorului. Exact când sǎ se facǎ spin si când sǎ se facǎ block. Dar viitorul nu ne este cunoscut. Nu existǎ un algoritm optimal online.
Algoritm optimal offline.Dupǎ o executie, se poate deduce exact când sǎ se apeleze la block si când la spin (“what if”).Util pentru a face comparatii cu algoritmii online.
Algoritmi competitivi
Un algoritm este c-competitiv dacǎ pentru orice secventǎ de intrare σCA(σ) ≤ c × Copt(σ) + k
84
cu c o constantǎ, CA(σ) costul cerut de algoritmul A în procesarea secventei σ si Copt(σ) costul cerut de algoritmul optim în procesarea aceleiasi secvente σ.Este de dorit o valoare pentru c cât mai micǎ posibil.Determinist. Randomizat.
Algoritmi constant competitivi
Acquire(lock, N) {int i;while (!TAS(lock.value))for (i = 0; i < N; i++)if (!lock.value) break;if (lock.value)Block(lock);}
Dacǎ N este numǎrul recurgeri la spin egal cu timpul de comutare contextual (context-switch), care este factorul competitiv al algoritmului?
Algoritmi optimali online aproximativi
Ideea principalǎ: utilizeazǎ trecutul pentru a prezice viitorul.Tratarea: cea mai simplǎ metodǎ este random walk.• Descreste pe N cu o unitate dacǎ ultimul Acquire() a blocat• Incrementeazǎ pe N cu o unitate dacǎ ultimul Acquire() n-a blocatRecalculeazǎ pe N de fiecare datǎ pentru fiecare Acquire() bazat pe o anumitǎ distributie a asteptǎrii (E) de lock (lock-waiting) pentru fiecare lock.Rezultate teoretice:
E {CA(σ(P))} ≤ (e/(e – 1)) × E{Copt(σ(P))}Factorul de competitie este de circa 1,58.
Rezultate empirice
Tabelul 1. Costurile sincronizǎrii pentru fiecare programraportat la algoritmul off-line optimal
85
Tabelul 3. Timpul consumat al Regsim utilizând strategii variate de spinning
Tabelele conform A. Karlin, K. Li, M. Manasse, and S. Owicki, “Empirical Studies of Competitive Spinning for a Shared-Memory Multiprocessor” în Proceedings of the 13th ACM Symposium on Operating Systems Principle, 1991.
Bariere în arbori combinativi
Sumar
Memoria cache este cheia implementǎrii unui sistem multiprocesor.Coerenta de cache este centralǎ în proiectare.Protocoalele snooping si directory sunt similare: bus-ul faciliteazǎ snooping-ul din cauza broadcast-ului (snooping ⇒ acces uniform la memorie).Directory are o structurǎ suplimentarǎ care retine stǎrile tuturor blocurilor de cache.Director distribuit, sisteme multiprocesor scalabile cu adrese partajate: ccNUMA (cache coherent, Non Uniform Memory Access).
86
Sincronizarea.Necesitǎ suport hardware: instructiuni atomice.Necesitatea de prudentǎ în folosirea primitivelor de sincronizare pe sistemele multiprocesoare mari.
87
Paralelismul la nivel de fire pe întelesul tuturor
Autor: Kunle Olukotun Computer Systems Lab.Stanford University2007
Traducerea si adaptarea: Gheorghe M.Panaitescu
Lumea s-a schimbat si este în schimbare
Procesul tehnologic a încetat sǎ mai progreseze. Se face referire le legea lui Moore, dar… Tranzistoarele nu merg mai repede si au pierderi mai mari (65 nm fatǎ-n-fatǎ cu 45 nm). Firele, legǎturile sunt într-o situatie si mai rea.Performantele firului de control/executie unic s-au plafonat. Complexitatea proiectǎrii si verificǎrilor este coplesitoare. Consumul de putere creste dramatic. Paralelismul la nivel de instructiune (ILP – Instruction-level parallelism) a fost epuizat.Viraj la dreapta: îndepǎrtarea de performanta prin frecventǎ, pretutindeni apare prefixul “multi” (MT – Multi-Threading, CMP – Cellular MultiProcessing).Informatii recente de la Intel Developer Forum (septembrie 2004).
Era multiprocesoarelor pe cip unic
Multiprocesoarele pe cip unic furnizeazǎ o alternativǎ scalabilǎ. Se bazeazǎ pe forme de paralelism scalabile. Paralelism la nivel de solicitare (request), paralelism la nivelul datelor. Proiectare modularǎ cu tolerantǎ la defecte inerentǎ si potrivitǎ tehnologiei VLSI.Multiprocesoarele pe cip unic sunt deja prezente. Toti producǎtorii de procesoare urmeazǎ calea aceasta, în sisteme încorporate, în servere, chiar în sistemele desktop.Cum se creazǎ arhitecturi de CMP pentru a exploata cât mai bine paralelismul la nivel de fire? În aplicatiile server: capacitatea de prelucrare (throughput). În aplicatiile stiintifice si de uz general: latenţa.
Liniile generale ale discutiei
Motivatie: era multiprocesoarelor pe cip unic.Capacitate de prelucrare (throughput) si putere micǎ: Sun Niagara.Latenţa: Stamford TCC (Transactional Coherence and Consistency).
88
TLP (Thread-Level Parallelism) pe întelesul tuturor (Google)
Trei platforme hardware (cf. Luiz Barroso, ACM Queue, sept.2005)
CAGR (Cumulative Average Growth Rate)
89
TCO (Total Cost of Operations) este dominat de costul energiei. Un ciclu de viatǎ de 4 ani al unui server la 0,09 $ kWh. Performanta/watt trebuie crescutǎ. (cf. Luiz Barroso, ACM Queue, sept.2005)
Încǎrcarea serverelor comerciale
Capacitatea de prelucrare proiectatǎ a serverelor
Aplicatiile comerciale ale serverelor. Multimea de taskuri atrage folosirea firelor multiple. ILP scǎzut si întârzieri mari cu memoria.Foarte bune performante (throughput) obtinute cu fire multiple. O formǎ scalabilǎ de paralelism. Se face un compromis sub aspectul latentei pentru productivitatea (throughput) firelor multiple. Se renuntǎ la un CPU OOO6 unic si mare pentru mai multe CPU simple. Memorii cache de la medii la mari. Banda de trecere spre si dinspre memorie mare.
Maximizarea productivitǎtii (throughput) CMP (cellular multiprocessors) cu cores simple
Se recomandǎ articolul semnat de J. Davis, J. Laudon si K. Olukotun PACT 2005.Sunt examinate mai multe proiecte UltraSPARC II, III, IV si Niagara bazate pe tehnologii diferite.
6 OOO: out of order (scris uneori si O-O-O). Pentru cresterea performantelor, unele microprocesoare pot executa instructiunile date prin program altfel decât în ordinea lor originarǎ din sirul de instructiuni înainte de a extrage rezultate în ordine.
90
S-a construit un model pentru arie bazat pe aceste explorǎri.S-a presupus o suprafatǎ ocupatǎ de cip (die) de arie fixǎ (400 mm2) si s-a tinut seamǎ de overheadul datorat monturii, pinilor, rutǎrii.S-au urmǎrit performantele pentru o gamǎ largǎ de proiecte de core cu procesoare scalare si superscalare ordonate (in-order).
Cores mai simple oferǎ performante mai înalte
Pentru detalii a se vedea articolul mentionat mai devreme (PACT 2005).Optimizarea dupǎ IPC-ul (Instruction Per Cycle) cipului. Arhitecturi de 4-20 cores pe o arie de 400 mm2. Memorii cache de nivelul 2 de la 1,5 MB la 2,5 MB. Importante firele multiple si pipes-urile multiple. Pipes-urile scalare sunt cu 37% la 46% mai bune decât pipes-urile superscalare (12 fatǎ de 7 cores).
Importanta echilibrului procesor-cache
Dimensiunea cache-ului secundar
Performante pe TPC-C.
91
C1: 64 kB cache de nivelul 1, C2: 32 kB cache de nivelul 1, ambele variante cu cores 2p4t.
Cores mai simple oferǎ putere mai redusǎ
Sursa: Tilak Agerwala Micro May-June 2005
Cores simple fac peformante mai bune per watt. Aceleasi performante la 20% putere. Opt cores simple consumǎ aceeasi putere ca si douǎ cores complexe.
Principii de proiectare la Niagara 1
Sun Microsystems a ahizitionat în 2003 Afara Websystems apǎrutǎ în 2002.Proiectat pentru productivitate si putere micǎ în aplicatii comerciale server. Niagara 1 (UltraSPARC T1) 2005.Multe cores simple în opozitie cu putine cores complexe. Exploateazǎ paralelismul la nivel de fire (request) în opozitie cu ILP (Instruction Level Parallelism). O crestere a eficientei raportatǎ la putere (MIPS/watt). Cost de dezvoltare scǎzut, risc de planificare (schedule risk) cu pipeline simplu. Randament sporit prin vânzare de pǎrti non-perfect.Proiectat pentru performante bune cu ratǎri de cache (cache missis). Bandǎ mare de trecere cu memoria per cip. Executǎ aplicatii reale mai bine chiar decât reperele standard (benchmarks). Ascunde cache, ramificǎ stagnǎrile cu fire, în opozitie cu ILP.
Niagara CMP overview
Implementare de SPARC V9.Opt cores a câte patru fire = 32 de fire.Comutare crossbar de 90 GB/secundǎ.Bandǎ de trecere înaltǎ, patru cǎi partajeazǎ cache de nivelul 2 de 3 MB pe cip.
92
Patru canale DDR2.Circa 300 M de tranzistori.Suport (die) de 378 mm2.
Pipeline SPARC
Pipeline cu generare simplǎ (single issue).Patru fire, comutare în fiecare ciclu.Registre repartizate pe fiecare fir, buffere de instructiuni si buffere de memorare. Overhead de arie 20%.
93
Sistemul de memorie Niagara
Cache-ul de instructiuni. 16 kB, asociativ pe seturi în patru moduri, dimensiunea liniei 32 B.Cache-ul de date. 8 kB, asociativ pe seturi în patru moduri, dimensiunea liniei 16 B. Cache write-through, write-around la miss.Cache-ul de nivel 2. 3 MB, asociativ pe seturi în 12 moduri, dimensiunea liniei 64 B. Write-through. Bancat (banked) pe linii în patru moduri.Coerentǎ. Liniile cache de date au douǎ stǎri: validǎ sau invalidǎ. Când cache-ul de date este scris în maniera write-through atunci nu are loc vreo modificare de stare. Cache-ul este mentinut coerent prin linii de evidentǎ (tracking) în directoare în cache-ul de nivelul 2.Consistentǎ. TSO asigurat prin crossbar. Punctul de consistentǎ este nivelul 2, firele care folosesc partajat cache-ul de nivelul 1 trebuie sǎ astepte pentru a avea vedere spre memorii.
Performantele sistemului de memorare
Latenţe. Încǎrcare pentru utilizare: 3 cicluri. Latenţa la descǎrcare pentru nivelul 2: 22 de cicluri. Latenţa la descǎrcare a memoriei: ~90 ns.Banda de trecere (bandwidth). Pentru nivelul 2: 76,8 GB/s, pentru memorie: 25,6 GB/s.
Performanţele multifir TPC-C
O crestere la triplu a productivitǎtii (throughput) pentru o crestere a ariei de 20%. O crestere a latenţei de 33%.
94
Fotografia suportului fizic (die) pentru Niagara 1
O unitate de virgulǎ mobilǎ (FPU).90 nm.279 M de tranzistori.378 mm2.
Comparatie pentru microprocesorul de 90 nm
95
Strangulǎri în pipeline si la interfaţa DRAM.Bandǎ de trecere cu rezerve în cache-uri.
Transformarea de Niagara 1 în Niagara 2
Scopul: dublarea productivitǎtii la aceeasi putere. Dublarea numǎrului de cores?Dublarea numǎrului de fire de la 4 la 8. S-au ales 2 fire din 8 pentru a fi executate în acelasi ciclu.Dublarea unitǎtilor de executie de la 1 la 2 si adǎugarea de FPU.Dublarea asociativitǎtii în seturi pentru cache-ul de instructiuni de nivelul 1 la 8 cǎi.Dublarea dimensiunii pentru DTLB total asociativ de la 64 la 128 de intrǎri.Dublarea bǎncilor la nivelul L2 de la 4 la 8. Pierdere de performantǎ de 15% cu numai 4 bǎnci si 64 de fire.
Niagara 2 dintr-o privire
97
Opt cores a câte patru fire. Douǎ pipes/core, douǎ grupe de fire.Un FPU per core.Procesor Crypto per core. DES, 3DES, AES, RC4 etc.Nivelul 2 de cache de 4 MB, 8 bǎnci, 16 cǎi/moduri S.A.De patru ori porturi FBDIMM dublu canal (60+ GB/s).Productivitatea si productivitatea/watt mai mult decât dublǎ fatǎ de cele pentru Niagara 1.De 1,4 ori Niagara 1 la întregi.De 10 ori Niagara 1 la FP.
Suportul fizic (die) pentru Niagara 2
98
65 nm.342 mm2.
Crizǎ din imaginatie (looming)
Prin 2010, dezvoltatorii de software vor fi în fata unor structuri noi.CPU-uri cu (Niagara 2 si cele ce vor urma): peste 20 de cores, peste 100 de fire hardware, cores eterogene si acceleratori specifici de aplicatie.CPU-uri cu capacitǎti de calcul generale.Gaura (gap) din programarea paralel: o uimitoare separare între capacitǎtile programatorilor de azi, a limbajelor de programare, a modelelor si instrumentelor si provocǎrile viitoarelor arhitecturi si aplicatii paralele.
Provocǎri în programrea paralel
Stabilirea de taskuri independente.Asocierea taskurilor cu firele.Definirea si implementarea protocoalelor de sincronizare.Conditiile de competitie (race).Evitarea blocajelor (deadlock).Model al memoriei.Compunerea de taskuri.Scalabilitatea.
99
Analiza performantelor paralel.Recuperarea din eroare.Tranzactiile reclamǎ un numǎr mare de probleme de programare paralel.
Coerenta si consistenta tranzactiilor (TCC – Transactional Coherence & Consistency)
A se urmǎri lucrǎrile lui Christos Kozyrakis (Stanford University).Ţelul: a aduce programarea paralel pe memorie în indiviziune (partajatǎ) la îndemâna dezvoltatorilor medii.Programarea paralel pe memorie în indiviziune (partajatǎ) cu tranzactii. Nu fire, nu locks, numai tranzactii…Tranzactiile definite de programator sunt singurele abstractii (the only abstraction): lucru paralel, comunicare si sincronizare, coerenta si consistenta memoriei, atomicitatea esecurilor si recuperarea, optimizarea performantelor.
Definirea memoriei tranzactionale
Tranzactie cu memoria: o secventǎ de operatii cu memoria care fie se executǎ complet (commit) sau nu au nici un efect (abort).O secventǎ de operatii “totul sau nimic”. La commit, toate operatiile cu memoria apar ca având efect unitar (toate deodatǎ). La abort, nici una din operatiile de depozitare (store) nu apare a avea efect.Executarea tranzactiilor în izolare. Efectele de depozitare nu sunt vizibile pânǎ când tranzactia nu se încheie (commits). Nu existǎ acces concurent conflictual din partea altor tranzactii.Similare proprietǎtilor bazelor de date ACID.
Limbajul memoriilor tranzactionale
Construct
Constructul de bazǎ atomic: lock(L); x++; unlock(L) ⇒ atomic {x++}Declarativ – utilizatorul specificǎ pur si simplu, sistemul implementeazǎ “sub acoperire”.Constructul atomic de bazǎ universal propus. Limbajele HPCS (Fortress, X10, Chapel) furnizeazǎ atomic în loc de locks. Cercetǎri extise la alte limbaje – Java, C#, Haskell, …Recent, activitate de cercetare sustinutǎ. Constructe de limbaj pentru memorii tranzactionale. Compilare si optimizare atomicǎ. Implementǎri hardware si software de memorii tranzactionale.
100
Programarea tranzactionalǎ Atomos
Limbajul
Atomos a derivat din Java.Memorie tranzactionalǎ pentru concurentǎ. Blocuri atomice definesc bazele tranzactiilor una-în-alta. Eliminare sincronizatǎ si volatilǎ.Tranzactia bazatǎ pe asteptare conditionatǎ. Derivatǎ din regiuni critice conditionate (Conditional Critical Regions) si revenirea (retry) Harris. Eliminarea de wait, notify si notifyAll. Seturi de veghe (Watch sets) pentru implementare eficientǎ. Tranzactii una-în-alta deschise. Blocuri deschise care executǎ (committing) tranzactia inclusǎ child înainte de parent. Utile pentru implementarea limbajului dar si disponibile pentru aplicatii.Handlere pentru violǎri. Manipuleazǎ violǎrile asteptate fǎrǎ revenire (rolling back) în toate cazurile. Nu sunt pǎrti ale limbajului, sunt utilizate numai în implementarea limbajului.
Beneficiile memoriei tranzactionale
Mai usor a obtine rezultate scalabile.Locks:Locks-urile grosier granulate sunt simplu de utilizat. Totusi cu limitare de scalabilitate.Locks-urile fin granulate pot spori scalabilitatea. Totusi dificil de a obtine dreptul de utilizare.Tranzactii:La fel de usor de utilizat ca si locks-urile grosier granulate, scaleazǎ la fel de bine ca si locks-urile fin granulate.
Performanta HashMap
101
Tranzactiile scaleazǎ la fel de bine ca si locks-urile fin granulate.
SPECjbb2000 cu tranzactii cu includere
Accelerare de 5,4 ori cu un CMP cu opt procesoare.Timpul cu violǎrile s-a redus si s-a îmbunǎtǎtit comportarea cache-ului.Detalii în [ISCA’06].
Modelul de executie TCC
102
Coerentǎ/consistentǎ tranzactionalǎ cu garantii de non-blocare.Pentru detalii a se vedea [ISCA’04].
TCC scalant
Eliminǎ commit broadcast din TCC original.Eliminǎ proiectarea cache-ului write-through7.Suportǎ commits paralele.Prima implementare TM scalabilǎ a unui sistem cu memorie distribuitǎ în indiviziune (partajatǎ), bazatǎ pe director lipsitǎ de blocaje de tip livelock.
Performante pentru TCC scalabil
DSM cu 64 de procesoare
Commit-ul write-through nu mai lucreazǎ. Commit în douǎ faze ⇒ commit paralel. Commit-ul nu mai este o strangulare.Scalabilitate excelentǎ.
7 Cache write-back – o metodǎ de caching în care modificǎrile aduse datelor din cache nu sunt copiate în sursa cache atât timp cât nu este absolut necesar. Caching-ul write-back este disponibil în multe microprocesoare, inclusiv în procesoarele Intel de dupǎ 80486. Cu aceste microprocesoare, modificǎrile de date (operatiunile write de pildǎ) pe datele stocate în cache-ul de prim nivel nu sunt copiate în memoria principalǎ decât atunci când este absolut necesar. În contrast, cache-ul write-through executǎ toate operatiile de scriere în paralel – datele sunt scrise în memoria principalǎ si în cache-ul de nuvelul 1 simultan.Caching-ul write-back produce performante întrucâtva mai bune decât caching-ul write-through deoarece reduce numǎrul de operatii de scriere în memoria principalǎ. Cu aceastǎ crestere de performantǎ vine totodatǎ un usor risc ca datele sǎ fie pierdute dacǎ sistemul clacheazǎ.Un cache write-back este denumit uneori si cache copy-back.
103
Concluzii
Sun Niagara: CMP optimizat pentru performanta/watt pe aplicatii de server comerciale. Proiectarea: concesiile la latentǎ pentru productivitate ⇒ putere mai micǎ. Pipelines simple, CMP si multithreading, ierarhia memoriei la bandǎ de trecere largǎ. Cresteri de performante/watt de la 2 la 4 ori în comparatie cu microprocesoarele conventionale pe aplicatii comerciale.Stanford TCC: un model paralel cu memorie în indiviziune (partajatǎ) cu tranzactii. Tranzactii definite prin software ca singurele abstractii pentru paralelism, comunicare, atomicitate la eşec si optimizare. Calea simplǎ spre codul corect: prin paralelism speculativ si atomicitate/ordonare bazatǎ pe hardware. Ajustare a performantei intuitivǎ, condusǎ de feedback (feedback driven). Prin urmǎrirea si înregistrarea (data tracking and logging) continuǎ a datelor. Rezultate initiale încurajatoare. 90% din performante la 10% effort de programare.
104
Programarea pentru performante
Simularea curentilor oceanici
(a) Sectiune transversalǎ (b) Discretizarea spatialǎ a unei sectiuni transversale
Se modeleazǎ prin grile bidimensionale. Se discretizeazǎ în spatiu si în timp. Cu cât este mai finǎ rezolutia spatialǎ si temporalǎ cu atât mai ridicatǎ este precizia rezultatelor obtinute.Calcule multe si diferite pentru fiecare pas de timp; scrierea de ecuatii si rezolvarea lor. Concurentǎ de calcul în grilǎ si între grile. Staticǎ si obisnuitǎ.
(a) (b)
105
Simularea evolutiei galactice
Se simuleazǎ interactiunea între foarte multe stele cu evolutie în timp.Calculul fortelor este costisitor. Tratarea fortelor la modul brut: O(n2). Metodele ierarhice fac uz de legea fortelor: G = m1m2/r2.
Star on which for cesare being computed
Star too close toapproximate
Small group far enough away toapproximate to center of mass
Large gr oup farenough away toapproximate
Multi pasi de timp, concurentǎ bogatǎ între stele în fiecare pas.
Explorarea de scene prin urmǎrirea dispersǎrii razelor
Se trimit raze în scenǎ prin spatiul restrâns al unor pixeli de imagine planǎ.Se urmǎresc parcursurile lor. Ele ajung si lovesc obiecte din scenǎ. Sunt generate raze noi, secundare: un arbore de raze pentru fiecare razǎ incidentǎ.Rezultǎ o culoare si o opacitate pentru acel pixel.Paralelismul este aici între raze.Câtǎ concurenţǎ este în aceste exemple?
106
Patru pasi în crearea unui program paralel
P0
Tasks Processes Processors
P1
P2 P3
p0 p1
p2 p3
p0 p1
p2 p3
Partitioning
Sequentialcomputation
Parallelprogram
Assignment
Decomposition
Mapping
Orchestration
Descompunerea calculelor în taskuri.Asignarea taskurilor la procese.Orchestrarea accesului la date, comunicarea, sincronizarea.Asocierea (mapping) proceselor pe procesoare.
Ţinta performanţelor implicǎ accelerarea (speedup)
Ţinta arhitectului: observarea modului în care programul utilizeazǎ masina si proiectarea pentru a ameliora perfomanţele.
107
Ţinta programatorului: observarea modului în care programul utilizeazǎ masina si îmbunǎtǎtirea implementǎrii pentru a ameliora performanţa.Ce se observǎ? Cine la ce lucreazǎ?
Cadrul analizei
Accelerarea (speedup) este inferioarǎ raportului dintre timpul de lucru secvential si maximul sumei lucru + timpi de asteptare pentru sincronizare + timpul de comunicare + lucru suplimentar.Solutia comunicǎrii si echilibrarea încǎrcǎrii este în cazul general NP-dificilǎ (Nondeterministic Polynomial – NP-hard8). Dar solutiile simple euristice lucreazǎ destul de bine în practicǎ.Existǎ o tensiune fundamentalǎ între patru factori: încǎrcare echilibratǎ, sincronizare minimalǎ, comunicare minimalǎ si lucru suplimentar minimal.Masinile bine proiectate o atenueazǎ prin compromisuri (trade-offs) judicioase.
Descompunerea
Se identificǎ concurenta si se decide nivelul la care ea trebuie exploatatǎ.Se sparg calculele în taskuri care sunt împǎrtite între procese. Taskurile pot deveni accesibile dinamic. Numǎrul de taskuri disponibile poate varia în timp.Scopul: taskuri suficiente pentru a tine procesele ocupate, dar nu prea multe. Numǎrul de taskuri disponibile la un moment dat este limita superioarǎ a accelerǎrii (speedup) obtenabile.
Concurentǎ limitatǎ: legea lui Amdahl
Limitarea cea mai importantǎ a accelerǎrii prin paralelism.Dacǎ fractia s din secventa de executie este inerent serialǎ, atunci speedup ≤ 1/s.Exemplu: un calcul în douǎ faze: parcurgerea unei grile de nxn pentru a executa un anumit calcul independent, reluarea parcurgerii si adunarea fiecǎrei valori obtinute într-o sumǎ globalǎ.Timpul consumat pentru prima fazǎ este n2/p (p numǎrul de procesoare).Pentru faza a doua serializatǎ pe o variabilǎ globalǎ, se consumǎ timpul n2.Accelerarea este
8 NP-hard, în teoria complexitǎtii calculelor este o clasǎ de probleme care sunt “cel putin la fel de dificile ca si problemele cele mai dificile NP”. O problemǎ H este NP-hard dacǎ si numai dacǎ existǎ o problemǎ NP-completǎ L care este reductibilǎ Turing în timp polinomial la H, adicǎ L ≤T H. Cu alte cuvinte L poate fi rezolvatǎ în timp polinomial de o masinǎ oracol cu un oracol pentru H. Informal se poate imagina un algoritm care poate apela o asemenea masinǎ oracol ca o subrutinǎ de rezolvare a lui H si rezolvǎ pe L în timp polinomial dacǎ apelul subrutinei necesitǎ numai un pas pentru a desǎvârsi caculul. Problemele NP-hard pot fi de tipuri variate: decizionale, de cǎutare, de optimizare.
108
+ 2
2
22
np
nn
limitatǎ superior de valoarea 2.Truc: divizarea fazei a doua în douǎ
( )22
2
22
pnn+
cu acumulare în sume private pe parcursul primar urmatǎ de adunarea sumelor partiale (pe proces) private în suma globalǎ.Timpul paralel este
pp
np
n ++22
si se obtine cea mai bunǎ accelerare.
Întelesul legii lui Amdahl
1
p
1
p
1
n2/p
n2
p
Lucru
executat
concurential
n2
n2
Timpn2/p n2/p
(c)
(b)
(a)
109
Profile concurentiale
Aria de sub curbǎ este lucrul total executat sau timpul pe un procesor.Intervalul pe orizontalǎ este limita de jos a timpului (infinit procesoare)Accelerarea este
∑
∑∞
=
∞
=
1
1
kk
kk
pkf
kf
cu cazul de bazǎ
pss −+ 1
1
Con
curr
ency
150
219
247
286
313
343
380
415
444
483
504
526
564
589
633
662
702
733
0
200
400
600
800
1,000
1,200
1,400
Clock cycle number
Legea lui Amdahl se aplicǎ la orice overhead, nu este limitatǎ numai la concurentǎ.
Programarea ca rafinare succesivǎ
Spatiu bogat în tehnici si probleme. Compromisuri în interactiunea unora cu celelalte.Pot apǎrea probleme de naturǎ software sau hardware. Tehnici algoritmice si/sau de programare. Tehnici arhitecturale.Nu toate problemele de programare pentru performantǎ se ocupǎ de partea vizibilǎ. Partitionarea este adesea independentǎ de arhitecturǎ si se face înainte de toate. Apoi se iau în considerare interactiunile cu arhitectura: comunicatia suplimentarǎ datoratǎ interactiunilor arhitecturale, costul comunicatiei depinde de modul cum este ea structuratǎ, poate inspira schimbǎri în partitionare.
110
Partitionare pentru performantǎ
Echilibrarea sarcinii si reducerea timpilor de asteptare la punctele de sincronizare.Reducerea comunicǎrii inerente.Reducerea lucrului suplimentar.Compromisuri chiar si cu aceste probleme algoritmice: minimizarea comunicatiei ⇒ rulare pe un procesor ⇒ debalansare drasticǎ a încǎrcǎrii; maximizarea echilibrǎrii sarcinii ⇒ asignarea aleatoare de taskuri mici ⇒ lipsa de control asupra comunicǎrii; o partitionare bunǎ poate implica lucru suplimentar pentru a o calcula si pentru a o administra.Scopul este de a realiza compromisuri potrivite; din fericire, adesea nu foarte dificile de atins practic.
Echilibrarea sarcinii si sincronizarea
Speedupproblema(p) ≤ lucrul secvential/max[lucru pe oricare dintre procesoare]
Debalansǎrile de sarcinǎ instantanee se manifestǎ prin timpi de asteptare: la finalizare, la bariere, la primiri (receive), la flags, chiar la mutex (mutual exclusion).
Speedupproblema(p) ≤ lucrul secvential/max[lucru + timpul de asteptare cu sincronizarea]
P0
P1
P2
P3
P0
P1
P2
P3
111
Echilibrarea si timpul de asteptare cu sincronizarea
Limitare pentru accelerare:Speedupproblema(p) ≤ lucrul secvential/max[lucru pe oricare dintre procesoare]
Lucru include accesul la date si alte costuri. Nu tocmai egal de lucru, dar gradul de ocupare simultanǎ mare.Patru pǎrti pentru echilibrarea sarcinii si reducerea timpului de asteptare pentru sincronizare:1. Se identificǎ suficientǎ concurenţǎ.2. Se decide cum se administreazǎ concurenţa.3. Se determinǎ granularitatea la care trebuie exploatatǎ concurenţa.4. Se reduce serializarea si costul de sincronizare.
Reducerea comunicǎrii inerente
Comunicarea este costisitoare!O mǎsurǎ: raportul comunicare/calcul.Aici, focalizare pe comunicarea inerentǎ. Determinatǎ prin asignarea de taskuri pe procese. Mai departe se va vedea cum comunicarea realǎ poate fi mai mare.Asignarea de taskuri care acceseazǎ aceleasi date aceluiasi proces.În cazul general, rezolvarea comunicǎrii si echilibrului de încǎrcare este NP dificilǎ.Dar solutiile euristice simple lucreazǎ destul de bine în practicǎ. Aplicatiile au o structurǎ proprie!
Descompunerea de domeniu
Lucreazǎ bine pentru aplicatii stiintifice, ingineresti, de graficǎ, …Exploateazǎ natura local-particularǎ a problemelor fizice. Cererile de informatie sunt adesea de razǎ redusǎ. Sau de razǎ îndepǎrtatǎ dar scǎzǎtoare rapid cu distanta.Exemplu simplu: calculele pe grile pe baza vecinilor celor mai apropiati.
P0 P1 P2 P3
P4
P8
P12
P5 P6 P7
P9 P11
P13 P14
P10
n
n np
np
P15
112
Raportul comunicare/calcul circa egal cu raportul perimetru/arie (arie/volum pentru cazul tridimensional). Raportul depinde de n si p: scade cu n, creste cu p.Cea mai bunǎ descompunere de domeniu depinde de cererile de informatie.Exemplul cu vecinii cei mai apropiati: descompunere în blocuri fatǎ de descompunerea în fâsii.
P0 P1 P2 P3
P4
P8
P12
P5 P6 P7
P9 P11
P13 P14 P15
P10
n
n
n
p------
n
p------
Rapotul comunicare/calcul este: 4*√p/n pentru descompunerea în blocuri, 2*p/n pentru benzi/fâsii.Raportul depinde de aplicatie: fâsiile pot fi mai bune în alte cazuri, de pildǎ pentru curgerea de particule într-un tunel.
Stabilirea unei descompuneri a domeniului
Staticǎ, prin inspectie. Trebuie sǎ fie predicitibilǎ: exemplul grilei de mai sus.Staticǎ, dar nu prin inspectie. Dependentǎ de intrare, cere analiza structurii intrǎrilor. Exemplu: calculele cu matrici rare.Semistatic (re-partitionare periodicǎ). Caracteristicile se schimbǎ dar lent: exemplu problema celor N corpuri.Static sau semistatic cu “furtul” dinamic de taskuri. Se face descompunerea initialǎ a domeniului, dar apoi devine foarte nepredictibilǎ: exemplu urmǎrirea razelor (ray tracing).
Problema celor N corpuri: simularea evolutiei galactice
Se simuleazǎ interactiunea multor stele cu evolutie în timp. Calculul fortelor este costisitor. Tratarea brutǎ a fortelor consumǎ timp O(n2). Metodele ierarhice iau în considerare legea fortelor
G = m1m2/r2
113
Star on which for cesare being computed
Star too close toapproximate
Small group far enough away toapproximate to center of mass
Large group farenough away toapproximate
Pasi temporali multipli, concuremtǎ bogatǎ între stele la fiecare pas.
O metodǎ ierarhicǎ: Barnes-Hut
(a) The spatial domain (b) Quadtree representation
Localismul ca obiectiv: particolele apropiate spatial trebuie grupate pe acelasi procesor.Dificultǎti: neuniformitate, schimbare dinamicǎ.
Structura aplicatiei
Computeforces
Updateproperties
Tim
e-s
teps
Build tree
Computemoments of cells
Traverse tr eeto compute for ces
114
Structura principalǎ a datelor: masiv de corpuri, de celule si de pointeri cǎtre ele. Fiecare corp/celulǎ are mai multe câmpuri: masa, pozitia, pointeri cǎtre altele. Pointerii sunt asignati proceselor.
Partitionarea
Descompunerea: corpuri în majoritatea fazelor (uneori celule).Provocǎri pentru asignare:Distributia neuniformǎ a corpurilor produce lucru si comunicare neuniforme. Nu se poate face asignarea prin inspectie.Distributia se schimbǎ dnamic de la un pas de timp la altul. Nu se poate face asignarea static.Necesitǎtile de informatie scad considerabil cu distanta de la corp. Partiţiile trebuie sǎ fie contigue spatial pentru localism.Faze diferite au distribuţii de lucru diferite între corpuri. Nu existǎ o asignare idealǎ unicǎ pentru toate corpurile. Focalizare pe faza calculului fortelor.Necesitǎtile de comunicare granulate fin în mod natural si neregulate.
Echilibrarea încǎrcǎrii
Numǎr egal de particule nu înseamnǎ lucru egal. Solutia: atribuirea de costuri pe particule pe baza lucrului pe care îl fac, îl genereazǎ.Lucrul necunoscut si schimbǎri la fiecare pas de timp. Sistemul evolueazǎ lent. Solutia: se contorizeazǎ lucrul pe particulǎ si se utilizeazǎ rezultatul ca valoare de cost în pasul urmǎtor.Tehnicǎ puternicǎ pentru sisteme fizice evolutive.
O tratare a problemei partitionǎrii: ORB – Orthogonal Recursive Bisection
Se face recursiv bisectia spatiului în subspatii de lucru egal. Lucrul este asociat cu corpurile ca mai sus.Se continuǎ pânǎ se obtine câte o parte din partitie pe fiecare procesor.
115
Overhead masiv pentru numǎr mare de procesoare.
O altǎ tratare: zone de cost
Arborele contine deja o codare pentru localismul spatial.
(a) ORB (b) Costzones
P1 P2 P3 P4 P5 P6 P7 P8
Zonele de cost au overhead mai scǎzut si sunt foarte usor de programat.
Curbe care umplu spatiul
Ordinea Morton Ordinea Peano-Hilbert
Analiza scenelor prin urmǎrirea razelor
Se trimit raze în scenǎ prin pixelii unei imagini plane.
116
Se urmǎreste parcursul lor. La incidenta pe obiecte razele se împrǎstie în jur. Se genereazǎ raze noi, un arbore de raze pentru fiecare razǎ incidentǎ.Rezultatul este culoarea si opacitatea acelui pixel.Paralelismul este între raze.Toate cazurile au o concurentǎ abundentǎ.
Partitionarea
Tratarea orientatǎ pe scenǎ. Se partitioneazǎ celulele scenei, se proceseazǎ razele care sunt într-o celulǎ datǎ.Tratarea orientatǎ pe razǎ. Se partitioneazǎ razele primare (pixeli), se abordeazǎ datele scenei dupǎ necesitǎti. Este mai simplǎ si este utilizatǎ si aici.Este necesarǎ asignarea dinamicǎ; se utilizeazǎ blocuri contigue pentru a exploata coerenţa spaţialǎ a razelor învecinate, plus acoperiri (tiles) pentru “hoţia” de taskuri.
Se poate utiliza si asignarea intercalatǎ bidimensionalǎ (împrǎştiatǎ) de acoperiri (tiles).
Alte tehnici
Descompunerea împrǎstiatǎ (scatter), de pildǎ partitia initialǎ în Raytrace.
1
3 4 3 4 3 4 3 4
3 4 3 4 3 4 3 4
3 4 3 4 3 4 3 4
3 4 3 4 3 4 3 4
1
43
Domain decomposition Scatter decomposition
2 1 2 1 2 1 2
1 2 1 2 1 2 1 2
1 2 1 2 1 2 1 2
1 2 1 2 1 2 1 2
2
117
A block,the unit ofassignment
A tile,the unit of decompositionand stealing
Pǎstreazǎ localismul în “furtul” de taskuri. Se “furǎ” taskuri mari pentru localism, se “furǎ” din aceleasi fire de asteptare (queues), …
Determinarea granularitǎtii taskului
Granularitatea taskului: cantitatea de lucru cu un task.Regulǎ generalǎ: granularitate grosierǎ înseamnǎ adesea debalansare de încǎrcare, granularitate finǎ înseamnǎ overhead mai mare, adesea mai multǎ comunicare, conflicte.Comunicarea, conflictele sunt afectate de fapt de asignare, nu de dimensiuni. Existǎ un overhead si datorat dimensiunii, în particular în legǎturǎ cu cozile de taskuri.
Lucrul dinamic cu cozile de taskuri
Cozi centralizate sau distribuite?“Furtul” de taskuri cu cozi distribuite. Poate compromite comunicarea si localismul si creste necesitatea de sincronizare. De unde trebuie furat, cât de multe taskuri sǎ fie furate. Detectarea epuizǎrii taskurilor. Debalansarea maximǎ legatǎ de dimensiunea taskului.
QQ 0 Q2Q1 Q3
All remove tasks
P0 inserts P1 inserts P2 inserts P3 inserts
P0 removes P1 removes P2 removes P3 removes
(b) Distributed task queues (one per pr ocess)
Others maysteal
All processesinsert tasks
(a) Centralized task queue
Pǎstreazǎ localismul în furtul de taskuri. Se furǎ taskuri mari pentru localism, se furǎ din aceleasi cozi, …
Sumar asupra asignǎrii
Se sepcificǎ mecanismul prin care se divide lucrul între procese. Care proces calculeazǎ forţele pentru anumite stele, sau pentru care raze. Se echilibreazǎ sarcina, se reduce comunicarea si costul administrǎrii/managementului.
118
Tratǎrile structurate lucreazǎ uzual bine. Inspectarea codului (bucle paralele) sau întelegerea aplicatiei. Euristici binecumoscute. Asignare staticǎ sau dinamicǎ.Ca programator, prima grijǎ este cea a partiţionǎrii. Uzual este independentǎ de arhitecturǎ sau de modelul de programare. Dar costul si complexitatea utilizǎrii primitivelor poate afecta deciziile.
Paralelizarea calculelor/paralelizarea datelor
Calculul este descompus si asignat (partitionat).Partitionarea datelor iese adesea firesc în vedere. Calculele urmeazǎ datele: proprietarul calculeazǎ. Exemplul grilei; data mining.Distinctia între calcul si date este mai puternicǎ în multe alte aplicatii. Barnes-Hut. Raytrace.
Reducerea lucrului suplimentar
Surse obisnuite de lucru suplimentar:Calculul unei partitii bune, de pildǎ partitionarea Barnes-Hut sau a matricilor rare.Utilizarea de calcule redundante pentru a evita comunicarea.Overheadul managementului taskurilor, datelor si proceselor. Aplicatii, limbaje, sisteme de executie, sisteme de operare.Impunerea unei structuri asupra comunicǎrii. Coalescenta de mesaje, acceptarea de (de)numiri eficiente (allowing effective naming).Implicatii arhitecturale:Se reduc necesitǎtile prin eficientizarea comunicǎrii si orchestrǎrii.Speedup ≤ lucrul secvential/Max(lucru + timpul de asteptare la sincronizare +
costul comunicǎrii + lucrul suplimentar)
119
Nu este responsabilǎ numai partitionarea
Comunicarea inerentǎ din algoritmii paralel nu reprezintǎ totul. Comunicarea prin artefacte produse de implementarea programului si de interactiunea arhitecturalǎ poate fi încǎ dominantǎ. Astfel, cantitatea de comunicatie este tratatǎ inadecvat.Costul comunicǎrii nu este determinat numai de cantitate. Depinde si de modul cum este structuratǎ comunicarea si de costul comunicǎrii în sistem. Ambele sunt dependente de arhitecturǎ si se trateazǎ în etapa de orchestrare.
Structurarea comunicǎrii
Fiind datǎ o cantitate de comunicare (inerentǎ sau artefactualǎ), obiectivul este reducerea costului.Costul comunicǎrii asa cum este vǎzut de proces:
C = f *(o + l + nc/m + tc – overlap)– f = frecventa mesajelor– o = overhead-ul pe mesaj (la ambele capete)– l = întârzierea în retea a mesajului– nc = date totale trimise– m = numǎrul de mesaje– B = banda de trecere (bandwidth) pe calea de comunicare (determinat de
retea, de interfete (NI), de asistentul de comunicare)– tc = costul indus de conflicte pe mesaj– overlap = cantitatea din latenţǎ ascunsǎ prin suprapunerea calculului cu
comunicarea.Continutul parantezei este costul unui mesaj asa cum este vǎzut de procesor. Acelasi continut, dar cu ignorarea termenului overlap este latenţa mesajului. Obiectiv: reducerea termenilor din latenţǎ si cresterea suprapunerilor (overlap).
Reducerea de overhead
Se poate reduce numǎrul mesajelor m sau overheadul pe mesaj o.Overheadul o este determinat uzual de hardware sau de software-ul de sistem. Programul trebuie sǎ încerce sǎ reducǎ m prin coalescenţa de mesaje. Control mai mult când comunicarea este explicitǎ.Coalescenţa datelor în mesaje mai mari:Facilǎ pentru comunicarea obisnuitǎ, granulatǎ grosier.Poate fi dificilǎ pentru comunicarea mai putin obisnuitǎ, granulatǎ fin prin natura ei. Poate reclama schimbǎri de algoritm si poate implica lucru suplimetar.Coalescenţǎ a datelor si determinarea a ce si cui trebuie trimis.
120
Reducerea întârzierilor pe reţea
Componenta de întârziere pe retea este f*h*th cu– h = numǎrul de sǎrituri (hops) traversate în reţea– th = latenţa per hop, legǎturǎ plus comutare
Reducerea lui f: comunicare mai putinǎ sau mesje mai mariReducerea lui h:Asocierea (mapping) patternurilor de comunicare cu topologia retelei; vecinii cei mai apropiati pe retele mesh sau ring; all-to-all.Cât de important este acest aspect? Era odatǎ un un obiectiv major legat de algoritmii paralel. Depinde de numǎrul procesoarelor, de modul cum th se comparǎ cu celelalte componente. Este mai putin important în masinile moderne: mai importante sunt overhead-urile, numǎrul de procesoare, multiprogramarea.
Reducerea conflictelor
Toate resursele sunt ocupate (nonzero occupancy). Si memoria, si controllerul de comunicare, si legǎtura la retea, si toate cele. Numai sǎ poatǎ manipula atât de multe tranzactii în unitatea de timp.Efectul de conflict/concurentǎ: creste costul de la un cap la altul al mesajelor; reduce banda de trecere disponibilǎ pentru alte mesaje; produce debalansǎri între procesoare.Probleme de performantǎ în particular insidioase. Usor de ignorat în faza de programare. Încetineste mesaje care nici mǎcar nu au nevoie de acele resurse, prin actiunea de congestionare a altor resurse dependente. Efectul poate fi devastator: nu inundati o resursǎ! (Don’t flood a resource!)
Tipuri de conflicte
Conflicte în retea si conflicte la capǎtul de sosire (hot-spots).Hot-spots Location si Module.Location: de pildǎ la acumularea într-o variabilǎ localǎ, la o barierǎ. Solutia: comunicare structuratǎ în manierǎ arborescentǎ.
Flat Tree structured
Contention Little contention
121
Module: comunicare all-to-all personalizatǎ în transpunerea unei matrici. Solutia: acces esalonat temporal de cǎtre procesoare diferite la acelasi nod.În general, se reduce nota intempestivǎ, explozivǎ, ceea ce pate fi în conflict cu a face mesaje mai mari.
Comunicare suprapusǎ
Nu ne putem permite asteptǎri pentru latente înalte, chiar si pe sisteme uniprocesor!Suprapunere cu calculul sau cu comunicarea pentru a ascunde latenta.Se cere o extraconcurentǎ (slackness), bandǎ de trecere mai mare.Tehnici:
PrelocalizareaTransfer de date în blocuriProceduri peste comunicareMultifire
Scalarea comunicǎrii (NPB2)
Mesaje normalizate pe procesor Dimensiunea medie a mesajului
1.00E+02
1.00E+03
1.00E+04
1.00E+05
1.00E+06
1.00E+07
0 10 20 30 40
FTISLUMGSPBT
0
1
2
3
4
5
6
7
8
0 10 20 30 40
FTISLUMGSPBT
122
0
1
2
3
4
5
6
7
8
0 10 20 30 40
FTISLUMGSPBT
1.00E+02
1.00E+03
1.00E+04
1.00E+05
1.00E+06
1.00E+07
0 10 20 30 40
FTISLUMGSPBT
Scalarea comunicǎrii: volum
Asocierea (mapping)
Douǎ aspecte:Care proces ruleazǎ pe care procesor? Asocierea cu o topologie de retea.Vor rula procese multiple pe acelasi procesor?Partajare spatialǎ (Space-sharing)Masina divizatǎ în subseturi, pe un subset numai o aplicatie la fiecare moment.Procesele pot fi legate (pinned) de procesoare sau lǎsate în gestiunea sistemului de operare.Alocarea sistemului.În realitate: partial, unele aspecte sunt formulate dupǎ dorinta utilizatorului, altele sunt lǎsate pe seama sistemului.Uzual se adoptǎ schema simplǎ: proces ⇔ procesor.
Recapitulare: compromisuri (trade-offs) vizând performantele
Performanta asa cum e vǎzutǎ de programator:Speedup ≤ lucrul secvential/Max(lucru + timpul de asteptare la sincronizare +
costul comunicǎrii + lucrul suplimentar)Scopuri diferite au adesea cerinte conflictuale.Echilibrarea încǎrcǎrii – taskuri cu granulatia finǎ, asignare aleatoare sau dinamicǎ.Comunicare – taskuri granulate grosier, descompunere pentru a obtine localism.Lucru suplimentar – taskuri granulate grosier, asignare simplǎ.Costul comunicǎrii – transferuri mari pentru amortizarea overheadului si latentei; transferuri mici pentru a reduce ciocnirile.Punctul de vedere arhiectural:Nu se poate rezolva debalansarea de încǎrcare si nici nu se poate elimina comunicarea inerentǎ.Dar poate:
Bytes per Processor
0
0.2
0.4
0.6
0.8
1
1.2
0 10 20 30 40
FTISLUMGSPBT
Total Bytes
0.00E+00
1.00E+09
2.00E+09
3.00E+09
4.00E+09
5.00E+09
6.00E+09
7.00E+09
8.00E+09
9.00E+09
0 10 20 30 40
FTISLUMGSPBT
123
Reduce stimularea creǎrii de programe care se comportǎ rǎu – naming eficient, comunicare si sincronizare.Reduce artefactele de comunicare.Furnizeazǎ naming eficient pentru asignare flexibilǎ.Permite suprapunere eficientǎ a comunicǎrii.
Punctul de vedere uniprocesor
Performanta depinde mult de ierarhia memoriei. Administare prin hardware.Timpul consumat de program
Timeprog(1) = Busy(1) + Data Access(1)Se împarte la cicluri pentru a obtine ecuatia CPI.Timpul de acces la date poate fi redus prin:Optimizarea masinii – cache-uri mai mari, latentǎ mai scǎzutǎ…Optimizarea programului – localism spatial si temporal.
P
Time (
s)
100
75
50
25
Busy-useful
Data-local
124
% ti
mp
Aceeasi perspectivǎ centratǎ pe procesor
Ce este un multiprocesor?
Este o colectie de procesoare care comunicǎ între ele.Scopuri: echilibru de încǎrcare, reducerea comunicatiei inerente si reducerea lucrului suplimentar.
Un sistem multi-cache, multi-memorie. Rolul acestor componente este esential indiferent de modelul de programare. Modelul de programare si abstractiile comunicationale afecteazǎ compromisurile specifice de performantǎ.
P 0 P 1 P 2 P 3
Busy-overhead Busy-useful
Data-localSynchronization
Data-remote
Time (s)
100
75
50
25
100
75
50
25
% ti
mp
P P P...
P P P...
125
% ti
mp
Relatia între perspectivele (enumerate)
Synch wait
Data-remote
Data-localOrchestration
Busy-overheadExtra work
Performance issueParallelization step(s) Processor time component
Decomposition/assignment/orchestration
Decomposition/assignment
Decomposition/assignment
Orchestration/mapping
Load imbalance and synchronization
Inherent communication volume
Artifactual communication and data locality
Communication structure
Speedup ≤ [ocupat(1) + data(1)]/[ocupateutil(p) + datelocale(p) + sincronizare(p) + datela distantǎ(p) + ocupateoverhead(p)]
Comunicarea artefactualǎ
Accesul nu este deplin satisfǎcut în portiunea localǎ a ierarhiei de memorie, ceea ce impune comunicare.Comunicarea inerentǎ implicitǎ sau explicitǎ produce transferuri determinate prin program.Comunicarea artefactualǎ este determinatǎ de implementarea programului si de interactiunile arhitecturale; alocarea proastǎ a datelor în memoria distribuitǎ; date nenecesare într-un transfer; transferuri nenecesare datorate granularitǎtii sistemului; comunicarea de date redundantǎ; capacitate de replicare finitǎ (în cache sau în memoria principalǎ).Comunicatia inerentǎ este cea ce se produce cu capacitate nelimitatǎ, transferuri mici si cunoasterea perfectǎ a ceea ce este necesar.
Exemplu de localism spatial
Parcurgerea repetatǎ a unei grile 2D, de fiecare datǎ adunând 1 la elementele vizitate.
126
P6 P7P4
P8
P0 P1 P2 P3
P5
Încǎlecǎri de pagini în delimitarea partitiei: dificil de distribuit
memory well
Încǎlecǎri de blocuri de cache la
partitionare
(a) Un masiv bidimensional
Contiguitate în asezareaîn memorie
P6 P7P4
P8
P0 P1 P2 P3
P5
Pagina traverseazǎ granitele partitiei: dificil de distribuit
bine memoria.
Bloc de cache care traverseazǎ
partiţia
(a) Un masiv bidimensional
P0 P3
P5 P6 P7P4
P8
P2P1
Pagina nu traverseazǎ
partitia.
Blocul de cache este în partitie
(b) Un masiv cu patru dimensioni
Contiguitate în asezarea în memorie
127
De la situatia ilustratǎ în 2D se poate imagina o situatie în mai multe dimensiuni.
Compromisuri (trade-offs) în comunicarea inerentǎ
Rezultatul depinde de n si de p.
Exemplu de impact asupra performantei
Equation solver pe SGI Origin2000.
Spe
edup
Number of processors
Spe
edup
Number of processors
●●
●
●
●
●
▲▲
▲
▲
▲
▲
■■
■
■
■
■
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 310
5
10
15
20
25
30
● ●●
●
●
●
●
■ ■■
■
■
■
■
▲▲
▲
▲
▲
▲
▲
◆ ◆◆
◆
◆
◆
◆
✖✖
✖
✖
✖
✖
✖
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 310
5
10
15
20
25
30
35
40
45
504D4D-rr
■ 2D-rr▲ 2D◆ Rows-rr
✖ Rows● 2D■ 4D▲ Rows
(a) Problemǎ de dimensiune micǎ (b) Problemǎ de dimensiune mare
Localism spatial bunla accesul non-local la
partionarea pe linii
Localism spatial slabla accesul non-local lapartionarea pe coloane
128
1 4 1 6 6 4 2 5 6 1 0 2 4 4 0 9 60
2
4
6
8
1 0
1 2
1 4
D i m e n s i u n e a c a c h e - u l u i l a f i e c a r e p r o c e s o r ( k B )
S C H I M B A R E A C U P A M U L T I M I L O R D E L U C R U
4
81 6
3 2
B e n e f i c i u l as c a l a r e
N i c i u nb e n e f i c i ul a s c a l a r e
L U
Reducere de 8 ori a ratei de ratǎri de la 4 la 8 procesoare
Implicatii pentru modelele de programare
Spatiu de adresare în indiviziune (partajat) coerent si transfer de mesaje explicit.În toate cazurile se presupune cǎ memoria este distribuitǎ.Se reaminteste cǎ orice model poate avea ca suport orice arhitecturǎ. Se admite cǎ ambele sunt suportate eficient. Se admite cǎ în SAS comunicarea este numai prin încǎrcǎri si depozitǎri. Se admite cǎ în SAS (Shared Address Space) comunicarea este la granularitatea blocului de cache.
Probleme de luat în consideratie
Probleme functionale:Naming: cum sunt partajate logic datele si/sau procesele la care se face referire?Operatii: ce operatii sunt furnizate pe aceste date?Ordonarea: cum sunt ordonate si coordonate accesǎrile la date?Probleme de performantǎ:Granularitatea si overheadul la punctul final al comunicǎrii (latenta si banda de trecere depind de retea si sunt considerate similare)Replicarea: cum sunt datele replicate pentru a reduce comunicarea?
129
Usurinta de a modela performanta.Probleme de cost: Costul hardware si complexitatea proiectului.
Modelul de programare secvential
Contract:Naming: poate numi orice variabilǎ (în spatiul de adresare virtual). Hardware-ul (si probabil compilatoarele) face translatia la adrese fizice.Operatii: încǎrcare, depozitare, aritmetice, de control.Ordonare: ordine programatǎ secvential.Optimizǎri de performante:Compilatoarele si hardware-ul violeazǎ ordinea programului fǎrǎ a fi prinse (caught). Compilatorul: reordonare si alocare de registre. Hardware-ul: în afara ordinei, bypass-are pipeline, buffere de scriere.Retine ordinea dependentei pe fiecare “locatie”.Replicare transparentǎ în cache-uri.Usurinta în modelarea performantei: complicatǎ prin operatiile cu cache-ul.
Modelul de programare SAS
Naming: orice proces poate apela pe numele ei orice variabilǎ din spatiul în indiviziune (partajat).Operatii: încǎrcare si depozitare plus cele necesare pentru ordonare.Cel mai simplu sistem de ordonare:În cadrul unui proces/fir: oridinea programatǎ secvential.Între fire: o arecare intercalare (ca la eşalonarea în timp din cazul uniprocesoarelor).Ordonare suplimentarǎ prin sincronizare explicitǎ.Pot compilatoarele/hardware-ul sǎ slǎbeascǎ ordinea fǎrǎ a fi (sur)prinse? Sunt posibile de asememea modele de ordonare diferite, mai subtile (vor fi discutate mai departe).
Sincronizarea
Excluderea mutualǎ (mutex, locks): Asigurǎ ca anumite operatii pe anumite date sǎ poatǎ fi executate la un moment dat de numai un proces.Un spatiu în care nu poate intra decât câte o persoanǎ (toaletǎ?...).Nu sunt garantii pentru vreo ordonare.Sincronizarea evenimentelor: Ordonarea evenimetelor pentru a pǎstra dependentele: de pildǎ producǎtor apoi consumator de date.Trei tipuri principale: punct-la-punct, global, pe grupe.
130
Modelul de programare al transmiterii de mesaje
Naming: procesele nu pot numi/apela direct date private. Nu existǎ un spatiu de adresare partajat.Operatii: comunicare explicitǎ prin send si receive.Send transferǎ date de la spatiul de adresare privat la un alt proces.Receive copiazǎ date de la un proces în spatiul de adresare privat.Trebuie sǎ fie capabil a numi/apela procese.Ordonare: Ordine prin program în cadrul unui proces.Send si receive pot asigura sincronizare punct-la-punct între procese. Complicatǎ la transferul de mesaje asincron.Excluderea mutualǎ inerentǎ, optimizǎrile conventionale legale.Se poate construi un spatiu de adresare global: Numǎrul procesului plus adresa internǎ din spatiul de adresare al procesului. Dar nu operatii directe pe aceste nume.
Naming
La uniprocesoare: se poate numi orice variabilǎ (în spatiul de adresare virtual). Hardware-ul (si probabil compilatorul) face translatia la adrese fizice.SAS: similar cu uniprocesorul, sistemul face totul.MP: fiecare proces poate numi direct datele din spatiul de adresare propriu.Trebuie sǎ se specifice de unde se obtin sau unde se transferǎ date nonlocale.Facil pentru aplicatii obisnuite (de pildǎ aplicatia referitoare la ocean).Dificil pentru aplicatii cu necesar de date neregulat, variabil în timp. Barnes-Hut: unde sunt pǎrtile de arbore care sunt necesare (se schimbǎ în timp)? Raytrace: unde sunt pǎrtile de scenǎ care sunt necesare (impredicitibil)?Existǎ metode-solutie:Barnes-Hut: o fazǎ suplimentarǎ stabileste necesarul si transferurile înainte de faza calculului.Raytrace: tratarea orientatǎ pe scenǎ mai curând decât orientatǎ pe razǎ.Ambele: prin hashing, se emuleazǎ un spatiu de adresare în indiviziune (partajat) specific aplicatiei.
Operatii
La secvential: de încǎrcare, de depozitare, aritmetice, de control.SAS: de încǎrcare si de depozitare la care se adaugǎ cele necesare ordonǎrii.MP: comunicare explicitǎ prin send si receive.Send transferǎ date de la spatiul de adresare privat cǎtre un alt proces.Receive copiazǎ date de la un proces în spatiul de adresare privat.Trebuie sǎ existe posibilitatea de a numi procesele.
131
Replicarea
Cine o administreazǎ (adicǎ cine face cópii locale ale datelor)? În SAS – sistemul, în MP – programul.Unde în ierarhia memoriei locale se face mai întâi replicarea? În SAS – cache (sau si în memorie), în MP – memoria principalǎ.La ce granularitate sunt alocate datele în spatiul-depozit de replicare? În SAS – blocul de cache, în MP – determinatǎ prin program.Cum sunt mentinute coerente datele replicate? În SAS – sistemul, în MP – programul.Cum este administratǎ înlocuirea datelor replicate? În SAS – dinamic la granulatie finǎ spatialǎ si temporalǎ (la fiecare acces), în MP – la limitele fazei sau prin emularea software de cache în memoria principalǎ.Desigur, SAS îsi permite chiar mult mai multe optiuni (se va reveni)
Overheadul si granularitatea de comunicare
Overheadul este direct legat de suportul hardware asigurat. Este mai mic în SAS (un ordin de mǎrime sau mai mult).Taskuri majore:Translatia de adrese si protectia. SAS utilizeazǎ MMU (Memory Management Unit), MP necesitǎ protectie software cu implicarea uzualǎ a sistemului de operare.Administrarea bufferelor. În SAS mesajele mici de dimensiune fixǎ sunt usor de lucrat în hardware. În MP mesajele de dimensiuni flexibile necesitǎ implicarea software-ului.Verificare si potrivirea de tipuri. MP o face în software: multe tipuri de mesaje posibile datoritǎ flexibilitǎtii.Se consumǎ eforturi de cercetare apreciabile pentru reducerea costurilor din MP, dar este încǎ mult de lucrat.Naming, replicarea si overheadul sunt în favoarea SAS. Multe aplicatii MP neobisnuite emuleazǎ acum prin software SAS/cache.
Transferul blocurilor de date
Comunicarea la granulatie finǎ nu este cea mai eficientǎ pentru mesaje lungi. Latenta si overheadul la fel ca si traficul (headers pentru fiecare linie de cache)SAS: poate utiliza transferul de blocuri de date. În sistemele presupuse aici, explicit, dar poate fi în general automatizat la nivel de paginǎ sau obiect (se va relua). Important în special pentru amortizarea overheadului când este mare; latenta poate fi ascunsǎ si prin alte tehnici.Transferul de mesaje: overheadul este mai mare asa încât transferul de blocuri este mai important; dar este foarte natural a fi utilizat deoarece mesajele sunt explicite si flexibile, inerent în model.
132
Sincronizarea
SAS: separatǎ de comunicare (de transferul de date). Programatorul trebuie sǎ facǎ orchestrarea separat.MP: excluderea mutualǎ prin fiat; sincronizarea evenimentelor este deja fǎcutǎ în împerecherea send-receive în cazul sincron; în cazul asincron este necesarǎ o orchestrare separatǎ (prin utilizarea de probes sau flags).
Costul hardware si complexitatea proiectului
Cost mare în SAS, în special pentru SAS cache-coerent.Dar ambele sunt probleme mai complexe.Costul: trebuie comparat cu cel al replicǎrii în memorie; depinde de factori de piatǎ, de volumul de vânzǎri si de alti factori nontehnici.Complexitatea: trebuie comparatǎ cu complexitatea scrierii de programe de înaltǎ performantǎ; se reduce prin cresterea experientei.
Modelul performantei
Trei componente:Modelarea costului evenimentelor primitive din sistem de tipuri diferite.Modelarea aparitiei acestor evenimente la încǎrcare.Integrarea celor douǎ într-un model pentru prezicerea performantei.Componenta a doua si a treia sunt cele mai provocatoare.A doua corespunde cazului SAS cache-coerent care este mai dificil. Replicarea si comunicarea sunt implicite, asa încât evenimentele de interes sunt si ele implicite; similarǎ problemelor aduse de caching în monoprocesoare.MP are o linie directoare bunǎ: mesajele sunt costisitoare, trimiteri cât mai rare.Dificultǎti pentru aplicatiile neobisnuite în ambele cazuri (dar mai mult în SAS).Transferul în blocuri, sincronizarea, costul/complexitate si modelarea performantei sunt avantaje pentru MP.
Sumar pentru modelele de programare
Date fiind compromisurile (trade-offs), arhitectul trebuie sǎ se refere la:Suportul hardware pentru SAS (naming transparent) este de valoare?Suportul hardware pentru replicare si coerentǎ este de valoare?În SAS, trebuie asigurat si suport pentru comunicare explicitǎ?Trendul curent:Suport de multiprocesoare strâns cuplate pentru SAS cache-coerent în hardware.Alte platforme majore sunt clustere de statii de lucru sau multiprocesoare. În prezent nu suportǎ SAS în hardware, cele mai multe utilizeazǎ transferul de mesaje.
133
Ca obiectiv cel mai înalt, clustere de multiprocesoare SAS cache-coerente.
Sumar
Crucial în a întelege caracterisiticile programelor paralel. Implicatii pentru o multime de probleme de arhitecturǎ la toate nivelurile.Convergenta arhitecturalǎ a condus la:Mai mare portabilitate a modelelor de programare si a software-ului. Multe probleme de performantǎ similare pentru multe modele de programare.O articulare mai clarǎ a problemelor de performantǎ. Utilizate pentru modelul PRAM pentru proiectarea de algoritmi. Acum modele care încorporeazǎ costul comunicǎrii (BSP, logP, …). Accentul în modelare deplasat la punctele finale (end-points), unde costul este cel mai mare. Dar sunt necesare tehnici de a modela comportarea aplicatiei, nu numai a masinii.Problemele de performantǎ, compromisuri între ele; rafinarea iterativǎ.Gata pentru a întelege utilizarea de încǎrcǎri (workloads) pentru a evalua problemele sistemului.
134
Multiprocesoare scalabile
Subiecte
Problema scalabilitǎtiiSuport pentru modele de programareInterfata de reteaReteaua de interconectareConsideratii în proiectul Bluegene/L
Scalarea limitatǎ a unui bus
Caracteristicile unui busLungimea fizicǎ: ~ 1 ftNumǎrul de conexiuni: fixatBanda de trecere maximǎ: fixatǎInterfata cu mediul de comunicare: memoriaOrdinea globalǎ: arbitrarǎProtectia: virtualǎ ⇒ fizicǎÎncredere: totalǎSistem de operare: unicAbstractii de comunicare: HW
Limitǎ la scalareCuplare strânsǎ între componente.
135
Comparatie cu o retea LAN
Characteristica: Bus LANLungimea fizicǎ: ~1 ft kmNumǎr de conexiuni: fixat multeBanda de trecere maximǎ: fixatǎ ???Interfata cu mediul de comunicare: memoria perifericeOrdinea globalǎ: arbitrarǎ ???Protectia: virtualǎ ⇒ fizicǎ OSÎncredere: totalǎ micǎSistem de operare: unic independentAbstractii de comunicare: HW SW
În cazul LAN nu existǎ o limitǎ clarǎ pentru scalarea fizicǎ, încrederea este redusǎ, ordinea globalǎ este inexistentǎ, este greu de atins consensul.Defectǎrile si repornirile sunt independente.
Calculatoare scalabile
Care sunt compromisurile (trade-offs) si între care aspecte la proiectarea spectrului impresionant de masini?Noduri specializate sau obisnuite (din categoria commodity, comune, ieftine)?Capabilitatea interfetelor nod-retea.Cât suport pentru modelele de programare?Ce înseamnǎ scalabilitate?Evitarea limitelor inerente ale proiectului asupra resurselor.Largimea de bandǎ creste odatǎ cu n.Latenţa nu creste cu n.Costul creste lent cu n.
Scalabilitatea benzii de trecere
136
Comutatoare (switches)
Ce limiteazǎ fundamental banda de trecere?Un set unic de fire.Trebuie sǎ aibe multe fire independente.Se conecteazǎ modulele prin comutatoare (switches).
Modele de programare realizate prin protocoale
Primitive pentru tranzactii pe retea
Transfer de informatie unidirectional de la un buffer de iesire (sursǎ) la un buffer de intrare (destinatie).
137
Produce o anumitǎ actiune la destinatie.Aparitia (occurrence) nu este vizibilǎ direct la sursǎ.Se depun datele, schimbare de stare, rǎspuns.
Abstractii pentru spatiul de adresare în indiviziune (partajat)
Fundamental un protocol bilateral cerere/rǎspuns (request/response). Scrierile (writes) au o confirmare (acknowledgement).Probleme:Transferuri de lungime fixǎ sau variabilǎ (bulk)?Adrese virtuale la distantǎ sau fizice, unde este executatǎ actiunea?Evitarea blocajelor (deadlock) si umplerea bufferului de intrare.
Problema localizǎrii blocajului
Chiar dacǎ un nod nu poate emite o cerere, el trebuie sǎ observe tranzactiile de pe retea.Tranzactiile care sosesc pot fi o cerere care va genera un rǎspuns.Sisteme închise (buferizare finitǎ).
Proprietǎti cheie ale abstractiilor SAS9
Adresele datelor la sursǎ si la destinatie sunt specificate de sursa solicitǎrii. Un grad mare de cuplare logicǎ si de încredere. Nu existǎ logic memorare “în afara spatiului/spatiilor de adresare ale aplicatiei”.
9 SAS (se pronuntǎ ca litere separate) – Prescurtare pentru Serial Attached SCSI, o evolutie a SCSI (Small Computer System Interface) paralele într-o interfatǎ perifericǎ punct-la-punct în care controllerele sunt legate direct la discuri. SAS prezintǎ o ameliorare de performantǎ fatǎ de traditionalele SCSI deoarece SAS abiliteazǎ dispozitive multiple (pânǎ la 128) de dimensiuni si tipuri diferite conectate simultan cu cabluri mai subtiri si mai lungi; transmiterea de semnale full-duplex duce pânǎ la 3,0 Gb/s. În plus, drive-urile SAS pot fi hot-plugged (introduse din mers, cu recunoastere imediatǎ de cǎtre sistemul de operarea).
138
Dar poate angaja temporar buffere pentru transport. Operatiile sunt în esentǎ solicitare/rǎspuns. Operatiile la distantǎ pot fi efectuate pe memoria la distantǎ. Nu necesitǎ logic interventia procesorului situat la distantǎ.
Transferul de mesaje
Transfer bulk.Semantica sincronizǎrii complexǎ.Protocoale mai complexe.Actiuni mai complexe.Sincron:Un send se încheie dupǎ ce îsi gǎseste perechea recv si datele de la sursǎ sunt expediate.Un recv se încheie dupǎ ce se încheie transferul de la send-ul pereche.Asincron:Un send se încheie când bufferul de expediere poate fi reutilizat.
Transferul de mesaje sincron
Modelul de programare este restrictionat. Determinist! Ce se întâmplǎ când sunt adǎugate fire? Conflictele de destinatie foarte limitate.
139
Transferul de mesaje asincron: varianta optimistǎ
Un model de programare mai puternic. Primirea (recv) cu wildcard îl face non-determinist. Se cere memorie în stratul mesajelor?
Transferul de mesaje asincron: varianta conservatoare
Unde este bufferizarea?Controlul conflictelor? Protocol initiat de recv?Optimizarea mesajelor scurte.
140
Particularitǎtile cheie ale abstractiilor transferului de mesaje
Sursa cunoaste adresa datelor trimise, destinatia cunoaste adresa datelor primite. Dupǎ schimbul de saluturi (handshake) ambele sunt în cunostintǎ de cauzǎ. Memorie arbitrarǎ “în afara spatiului de adresare local”. Se pot posta multe send-uri înainte oricǎror recv-uri. Trimiterile asincrone fǎrǎ blocare reduc cerintele la un numǎr arbitrar de descriptori. Scrieri speciale spun cǎ si acestia sunt limitati.Fundamental, o tranzactie în 3 faze care include o cerere/un rǎspuns. Poate uza de o schemǎ optimistǎ cu o singurǎ fazǎ în cazuri limitate numite “sigure”.
Interfata cu reteaua
Transfer între memoria localǎ si bufferele NIC (Network Interface Card).Software-ul traduce VA (Virtual Address) la PA (Program Addres) si invers.Software-ul initiazǎ DMA (Direct Memory Access).Software-ul face managementul bufferelor.NIC initiazǎ întreruperile la primire (recv). Furnizeazǎ protectie. Transfer între bufferele NIC si retea. Generarea de pachete. Controlul fluxului cu reteaua.
Metrici ale performatei retelelor
141
Comunicare protejatǎ la nivelul utilizatorului
NIC-urile traditionale (de pildǎ Ethernet) cer ca sistemului de operare prin kernelul sǎu sǎ initieze accesul direct la memorie (DMA) si sǎ administreze bufferele.Prevenirea situatiilor în care o aplicatie ar putea face disfunct sistemul de operare sau alte aplicatii.Overheadul este mare (cât de mare?).NIC-uri pentru multicomputere sau multiprocesoare.Aplicatiile initiazǎ DMA-uri utilizând adrese VA sau handlere de descriptori.NIC utilizeazǎ buffere mapped PA pentru a executa DMA-uri.Exemple.Cercetǎri: mesaje active, UDMA (Ultra Direct Memory Access).Industria: VIA (Virtual Interface Architecture [Intel]) si RDMA (Remote Direct Memory Access)
Porturi de retea la nivelul utilizatorului
Un port de retea apare utilizatorului ca un sir logic de mesaje în asteptare plus un indicator de stare.Ce se întâmplǎ dacǎ nu se iveste nici un utilizator?
Abstractii la nivelul utilizatorului
142
Orice proces utilizator poate posta o tranzactie cu oricare altul în domeniul protejat. Stratul de comunicare mutǎ OQsrc la IQdest. Poate implica o redirectionare VASsrc la VASdest (OQ – Output Quest; IQ – Input Quest; src, dest – sursǎ, destinatie; VAS – Virtual Address Space).
Arhitecturǎ genericǎ pentru multiprocesoare
Caracteristici ale retelei
Banda de trecere a retelei: reteaua de interconectare on-chip si off-chip.Cerintele de bandǎ: fire/procese independente care comunicǎ.Latenta: localǎ si la distantǎ.
Retele de interconectare scalabile
Retelele de interconectare fac parte din miezul arhitecturilor paralel. Cerinte si compromisuri la multe niveluri. Structuri matematice elegante. Relatii adânci cu structura algoritmilor. Administrarea multor fluxuri de transfer. Proprietǎti ale legǎturilor electrice si optice. Consens putin. Interactiuni între niveluri.Metrici ale performantei, metrici ale costului. Sarcina de calcul. Toate acestea cer o întelegere cuprinzǎtoare (holistic).
143
Cerinte superioare
Raportul comunicare/calcul, banda de trecere care trebuie sustinutǎ pentru o vitezǎ de calcul datǎ.Traficul este localizat sau dispers? Inegal (uneori exploziv) sau uniform în timp?Modelul de programare. Protocol. Granularitate a transferului. Gradul de suprapunere (slackness). Misiunea unei retele de interconectare a unei masini paralel este de a transfera informatia de la nodul sursǎ la nodul destinatie ca suport al tranzactiilor pe retea care realizeazǎ modelul de programare.
Caracteristici ale unei retele
Topologie (cum?).Structura de interconectare fizicǎ în graful model al retelei.Directǎ: nodurile conectate la fiecare comutator (switch).Indirectǎ: nodurile conectate la un subset particular de comutatoare.Algoritmul de rutare (care?).Restrictioneazǎ multimea de cǎi pe care mesajele le pot parcurge.Algoritmi de rutare multipli cu proprietǎti variate.Strategia de comutare (cum?).Cum face sǎ traverseze o rutǎ datele dintr-un mesaj.Memoreazǎ-si-trimite fatǎ de cut-through.Mecanismul controlului fluxurilor (când?)Când un mesaj sau o portiune din el traverseazǎ o rutǎ.Ce se întâmplǎ când este întâlnit trafic bogat (excesiv)?
Definitii de bazǎ
Interfata de retea. Comunicare între un nod si o retea.Legǎturi. Mǎnunchiuri de fire sau fibre care transportǎ semnalele.Comutatoare (switches). Conecteazǎ un numǎr fix de canale de intrare cu un numǎr fix de canale de iesire.
Bazele retelelor
Legǎtura este fǎcutǎ de un mediu fizic, fir, fibrǎ, aer.
144
Existǎ un transmitǎtor (tx) la un capǎt care converteste simbolurile digitale în analogice si le împinge pe legǎturǎ.Mai existǎ si un receptor (rx) la celǎlalt capǎt care capteazǎ semnalul analogic si-l converteste din nou la digital.O combinatie tx + rx este denumit adesea transceiver.
Medii de retea traditionale
Perechea de fire rǎsucite.
Din cupru, de 1 mm, rǎsucite pentru a evita efecte inductive. “Cat 5” este constituit din patru perechi rǎsucite într-un învelis.Cablul coaxial.
utilizat de companiile de cablu (TV). Bandǎ largǎ, o imunitate la zgomote bunǎ.Fibrǎ opticǎ
Contine trei pǎrti: cablul, sursa de luminǎ si detectorul de luminǎ. Fibra este unidirectionalǎ. Pentru duplex complet sunt necesare douǎ cabluri optice.
145
Medii emergente
Proiectul Proximity (Sun Microsystems). Capabil potential de a livra TB/s între cipuri. Plǎcute metalice microscopice acoperite cu izolatie de microni pentru a proteja cipurile de electicitate staticǎ. Douǎ câte douǎ cipuri sunt în contact.
Retele în masinile paralele
În unele masini ma vechi
În masinile noi:Cray XT3 si XT4, toruri tridimensionale, fiecare legǎturǎ capabilǎ de 7 GB/s.IBM Bluegene/L, toruri tridimensionale, fiecare legǎturǎ capabilǎ de 1.4 GB/s.
Masive liniare si structuri circulare (rings)
Masive liniare, toruri si toruri structurate pentru ca firele sǎ fie scurte.
146
Masiv liniar: diametru, distanta medie, banda de trecere la bisectie? Ruta de la A la B este datǎ prin adresa relativǎ R = B – AToruri?Exemple: FDDI, SCI, FiberChannel Arbitrated Loop, KSR1
Structuri liniare si toruri multidimensioanle
Masive d-dimensionale.Numǎrul de noduri N = kd–1x…xk0. Descrise prin coordonate de d vectori cu d componente (id–1, …, i0)Site de ordinul k (mesh) d-dimensionale: N = kd ( d Nk = ). Descrise de d vectori cu radical din k coordonate.Toruri de ordinul k de dimensiune d (sau d-cuburi k-are)?
Proprietǎti
Rutare – distanta relativǎ: R = (bd–1 – ad–1, …, b0 – a0); traverseazǎ ri = bi – ai
salturi (hops) în fiecare dimensiune; rutarea de ordinul dimensiunii.Distanta medie Lungimea firelor?
Pentru meshes dx2k/3Pentru cuburi dk/2
Gradul?Banda de trecere la bisectie? Partitionare?
kd–1 legǎturi bidimensionaleAsezarea fizicǎ?
2d în spatiu de O(N) Fire scurteDimensiuni superioare?
147
Scufundǎri (embeddings) în douǎ dimensiuni
Se scufundǎ/încorporeazǎ dimensiuni logice multiple în una singurǎ prin folosirea de fire lungi.
Hipercuburi
Asa-numitele cuburi binare de ordinul n. Numǎrul de noduri este o putere a lui 2: N = 2n.Salturi (hops) de ordinul O(logN).Bandǎ de trecere la bisectie bunǎ.Complexitate: gradul iesirilor este n = logN, dimensiuni corecte în ordine, cu comunicare aleatoare douǎ porturi pe fiecare procesor.
148
Retele în trepte multiple
Rutare de la stânga la dreapta. Tipic, n = log(p)
Arbori
Diametrul si distanta medie variazǎ logaritmic. Un arbore k-ar are înǎltimea d = logkN. Adresele sunt specificate de un d-vector cu radical indice k coordonate care descriu drumul pânǎ la rǎdǎcinǎ.Grad fix.Rutele sunt pânǎ la ascendentul comun si apoi înapoi în jos. R = B xor A. Fie i pozitia celei mai semnificative pozitii unitare în R, se ruteazǎ în sus i + 1 niveluri. Apoi în jos în directia datǎ de cei mai de jos i + 1 biti din B.Spatiul unui arbore H este O(N) cu fire în lungime de O( N ).Banda de trecere la bisectie?
149
Arbori îngrosati (fat trees)
Legǎturi îngrosate (multe dintre ele) pe mǎsurǎ ce legǎtura este mai sus, astfel cǎ banda de trecere la bisectie scaleazǎ cu N.
Sumar de topologie
Toate au anumite “permutǎri rele”. Multe permutǎri populare sunt foarte rele pentru site (meshes) (transpusa). Aleatorizarea în legarea prin fire sau în rutare fac dificilǎ gǎsirea unei permutǎri rele!
Câte dimensiuni?
n = 2 sau n = 3. Fire scurte, usor de confectionat. Multe salturi (hops), banda de trecere la bisectie redusǎ. Se cere localism de trafic.n ≥ 4. Dificil de confectionat, mai multe fire, lungimea medie mai mare. Mai putine salturi, o bandǎ de trecere la bisectie mai bunǎ. Poate manevra bine traficul non-local.Cuburile d k-are asigurǎ un cadru consistent pentru comparatii. n = kd. Scaleazǎ pe dimensiunea (d) sau nodurile pe dimensiunea (k). Presupune cut-through.
150
Mecanismul de rutare
Este necesar a selecta portul de iesire pentru fiecare pachet de intrare. În cicluri de ceas putine.Aritmeticǎ simplǎ în topologiile regulate. Exemplu: rutarea Dx, Dy într-o grilǎ:• west (–x) Dx < 0• east (+x) Dx > 0• south (–y) Dx = 0, Dy < 0• north (+y) Dx = 0, Dy > 0• processor Dx = 0, Dy = 0Reduce adresa relativǎ a fiecǎrei dimensiuni în ordine. Rutarea dimensiune-ordine în cuburile d de ordinul k. Rutarea e-cub în n-cub.
Bazat pe sursǎ. Headerul mesajului transportǎ seria de selectii de port. Utilizat si stripat din mers. CRC? Formatul pachetului?Determinat de tabel (table-driven). Headerul mesajului transportǎ indicele pentru portul urmǎtor la switch-ul urmǎtor o = R[i]. Tabelul dǎ si indexul pentru hop-ul care urmeazǎ o, l’ = R[i]. ATM, HHPI.
Proprietǎti ale algoritmilor de rutare
Deterministi: ruta determinatǎ de sursǎ si de destinatie nu de etape intermediare.Adaptivi: ruta este influentatǎ de traficul de-a lungul drumului.Minimali: selecteazǎ numai între drumurile cele mai scurte.Fǎrǎ blocaje (deadlock): nici un pattern de trafic nu poate duce la o situatie în care nici un pachet nu avanseazǎ.
Rutarea mesajelor
Medii în indiviziune (partajate). Difuzare (broadcast) cǎtre toti.Optiuni:Rutare cu baza la plecare, la sursǎ: mesajul specificǎ calea spre destinatie (schimbǎrile de directie);Rutare cu baza la destinatie: mesajul specificǎ destinatia, comutatoarele trebuie sǎ aleagǎ calea.Rutarea poate fi:Deterministǎ: totdeauna urmeazǎ aceeasi cale.Adaptivǎ: alege cǎi diferite pentru a evita congestionǎrile, esecul transmiterii.Aleatoare: alege între mai multe cǎi bune pentru a echilibra încǎrcarea retelei.
151
Lipsa blocajelor (deadlock)
Cum pot apǎrea? Conditii necesare: resurse în indiviziune (partajate), alocate incremental, non-preemtible. A se imagina un canal ca o resursǎ în indiviziune care este obtinutǎ incremental: buffer la sursǎ apoi buffer la destinatie, canal de rutare.Cum pot fi evitate blocajele de tip deadlock? Prin restrictionarea modului în care sunt alocate resursele canalului.Cum se poate verifica dacǎ un algoritm de rutare este sau nu liber de blocaje (deadlock)?
Exemple de rutare deterministǎ
Sitǎ (mesh): rutarea în ordinea dimensiunilor. De transmis de la (x1, y1) la (x2, y2). Mai întâi x = x2 – x1, apoi y = y2 – y1.Hipercub: rutare pe muchiile cubului. De la X = x0x1x2…xn la Y = y0y1y2…yn (în binar). Ruta este R = X xor Y. Se traverseazǎ dimensiunile diferentelor între adrese în ordine.Arbori: ascendentul comun.Fǎrǎ blocaje?
152
Memoreazǎ si înainteazǎ sau cut-through (Store and Forward vs. Cut-Through)
Store-and-forward. Înainte de a-l expedia la un switch urmǎtor, fiecare switch asteaptǎ ca pachetul sǎ soseascǎ integral. Aplicatii: LAN sau WAN.Rutarea cut-through. Comutatorul (switch) examineazǎ headerul, decide unde sǎ trimitǎ mesajul. Porneste expedierea imediat.
Rutarea store&forward fatǎ-n fatǎ cu rutarea cut-through
h(n/b + D) fatǎ-n fatǎ cu n/b + hD.Ce se întâmplǎ dacǎ mesajul este fragmentat?
Rutarea cut-through vs. rutarea wormhole
În rutarea wormhole, când capul mesajului este blocat, mesajul stǎ suspendat în retea, blocând potential alte mesaje (necesitǎ numai bufferizarea bucǎtii din pachet care este trimisǎ între comutatoare).Rutarea cut-through lasǎ coada sǎ continue deplasarea când capul este blocat, acordeonând (fǎcând armonicǎ) întregul mesaj într-un singur switch (necesitǎ spatiu suficient pentru a cuprinde cel mai mare pachet).Referiri bibliografice:P. Kermani si L. Kleinrock, “Virtual cut-through: A new computer communication switching technique”, Computer Networks, vol. 3,pp. 267-286, 1979.W.J. Dally si C.L. Seitz, “Deadlock-Free Message Routing in Multiprocessor Interconnection Networks,” IEEE Trans.Computers, Vol. C-36, No. 5, May 1987, pp. 547-553
153
Conflicte
Douǎ pachete care încearcǎ sǎ utilizeze aceeasi legǎturǎ în acelasi timp. Buferizare temporarǎ sau renuntare?Retelele celor mai multe masini paralel blocheazǎ pachetele în locul lor de plecare. Se executǎ un control al fluxului la nivelul legǎturilor. Saturatia pe arbore.Sisteme închise – încǎrcarea oferitǎ depinde de cea livratǎ.
Controlul fluxului
Ce-i de fǎcut când presiunea devine deja îmbulzealǎ?Ethernet: detectarea coliziunilor si reluarea încercǎrii dupǎ un timp de asteptare/întârziere.FDDI (Fiber Distributed Data Interface), token ring: arbitraj.TCP/WAN: bufferizare, renuntare, ajustare de vitezǎ.Orice solutie trebuie sǎ se plieze pe viteza de iesire.
Controlul fluxului la nivelul legǎturii.
Netezirea fluxului
154
Câtǎ rezervǎ este necesarǎ pentru a maximiza banda de trecere?
Canale virtuale
W.J.Dally, “Virtual-Channel Flow Control”, Proceedings of the 17th annual international symposium on Computer Architecture, p.60-68, May 28-31, 1990
Banda de trecere
Ce afecteazǎ banda de trecere localǎ?Densitatea pachetelor bxn/(n + ne).Întârzierea de rutare bxn/(n + ne +wD).Conflictele la capete si în retea.
Banda de trecere agregatǎ:Banda de trecere la bisectie, suma benzilor de trecere ale celui mai mic set de legǎturi care partitioneazǎ reteaua.
Banda de trecere totalǎ a tuturor canalelor: Cb.Se presupne cǎ N hosts genereazǎ un pachet la fiecare M cicluri cu destinatie la distantǎ medie. Fiecare mesaj ocupǎ h canale pentru l = n/w cicluri fiecare. C/N canale disponibile pe fiecare nod. Utilizarea legǎturilor r = MC/Nhl < 1.
Câteva exemple
Cray T3D: scurt, larg, sincron (300 MB/s)24 biti: 16 de date, 4 de control, 4 pentru controlul fluxului în directie inversǎ.Unic ceas de 150 MHz (inclusiv procesorul).
155
flit10 = phit11 = 16 biti.Doi biti de control identificǎ tipul flit (idle si framinf). No-info, routing tag, packet, end-of-packet.Cray T3E: lung, larg, asincron (500 MB/s).14 biti, 375 MHz.flit = 5, phits = 70 biti: 64 de biti de date si 6 de control.Comutatoarele opereazǎ la 75 de MHz.Încadrate (framed) în pachete solicitare read/write de 1 si 8 cuvinte.Costul este functie de lungime si lǎtime: Cost = f(length, width)?
Comutatoare (switches)
Cu canale virtuale, un buffer se transformǎ în mai multe buffere.Cine selecteazǎ un canal virtual?
Componente de switch
Porturile de iesire: transmitǎtor (tipic dirijeazǎ ceasul si datele).Porturile de intrare: sincronizator care aliniazǎ semnalul de date cu domeniul ceasului local; în esentǎ un buffer FIFO (First-In-First-Out).Crossbar: conecteazǎ fiecare intrare cu oricare dintre iesiri; gradul este limitat de suprafata disponibilǎ sau de numǎrul de pini.Controlul logic: complexitatea depinde de logica rutǎrii si algoritmul de planificare/esalonare; determinǎ portul de iesire pentru fiecare pachet care soseste; arbitreazǎ între intrǎrile directionate cǎtre aceeasi iesire.
10 În rutarea wormhole un mesaj este divizat într-un numǎr de pachete-messaj mai mici denumite flits11 O legǎturǎ prin care se comunicǎ contine tipic douǎ canale unidirectionale. Fiecare canal din legǎturǎ contine preferabil date, Physical Unit (Phit) Type (tipul unitǎtii fizice) etc.
156
Bluegene/L: un proiect la putere micǎ
20.1 kW 20.3 kW
Comparatie între sisteme
Performate de vârf ale supercalculatoarelor
157
BlueGene/L calculeazǎ ASIC (Application-Specific Integrated Circuit)
IBM CU-11, 0,13 microniDimensiunea plǎcutei suport 11x11 mmCBGA (Ceramic Ball Grid Array) de 25x32 mm474 de pini, 328 de semnale, 1,5/2,5 volti.
158
BlueGene/L – reteaua de interconectare
Tor tridimensional. Interconecteazǎ toate nodurile de calcul (65536). Rutare hardware cut-through virtualǎ. Legǎturi de 1,4 Gb/s pe toate cele 12 legǎturi de noduri (2,1 GB/s pe nod). Latentǎ de 1 µs între noduri vecine, 5 µs la cele de mai departe. Latentǎ de 4 µs pentru un salt (hop) cu MPI (Multi-Processor Interconnect), 10 µs la cel mai depǎrtat. Comunicare backbone pentru calcule. Banda de trecere la bisectie 0,7/1,4 TB/s, banda de trecere totalǎ 68 TB/s.
159
Arbore global. Functionalitate difuzivǎ (broadcast) one-to-all. Functionalitate pentru operatii de reducere. Banda de trecere pe legǎturǎ 2,8 Gb/s. Latenta la traversarea arborelui într-un singur sens 2,5 µs. Banda de trecere totalǎ pe arborele binar (masina de 64k) ~ 23 TB/s. Interconectazǎ toate nodurile de calcul si dispozitivele I/O (1024).Bariere si întreruperi globale de latentǎ redusǎ. Latenta la dus-întors 1,3 µs.Ethernet. Încorporat în fiecare nod ASIC. Activ în nodurile I/O (1:64). Toatǎ comunicarea externǎ (fisiere de intrare/iesire, control, interactiunea cu utilizatorul etc.)
BlueGene/L cu 512 cǎi
BlueGene/L: 16384 noduri (IBM Rocehster)
160
Sumar
Multicalculatoarele scalabile trebuie sǎ ia în considerare problema scalǎrii în banda de trecere, latentǎ, putere si cost.Proiectarea interfetelor cu reteaua. Reduce substantial overheadul cu send si receive.Retelele trebuie sǎ suporte bine modelele de programare si aplicatiile.S-au studiat multe topologii de retea, cele mai obisnuite sunt sitele (meshes), torurile, arborii si multietajatele.Ruterele de retea curente utilizeazǎ cut-through virtual, rutarea wormhole cu canale virtuale.Calculatoarele scalabile din noua generatie trebuie sǎ ia în consideratie si scalarea de putere (watt).Controlul fluxului în canale virtuale
William J. Dally (Stanford University)
Prezentare de John M.Calandrino (University of North Carolina at Chapel Hill)
Motivatie
În retelele de interconectare sunt implicate douǎ tipuri de resurse: buffere care retin/detin flits si canale care transportǎ flits.Obisnit, aceste resurse sunt împerecheate: un buffer cu un canal.Dacǎ bufferul este alocat pachetului A, nici un alt pachet în afarǎ de A nu poate utiliza canalul asociat.Pachetul A poate bloca alte pachete care necesitǎ acelasi canal.
Canale virtuale
Canalele virtuale constau dintr-un buffer flit + altǎ stare.Canale virtuale multiple pe fiecare canal fizic, sau buffere multiple pe fiecare canal.Se decupleazǎ alocarea de buffere si de canale.O metaforǎ împrumutatǎ din domeniul infrastructurii de autostrǎzi: canalele virtuale sunt piste, benzi; canalele virtuale multiple permit pachetelor blocate sǎ treacǎ.Foarte compatibile cu rutarea wormhole.
Exemplu
O pistǎ:
161
Douǎ piste:
Beneficii
Capacitate de trecere (throughput) sporitǎ. Utilizare mai intensǎ a capacitǎtii retelei.Mai multǎ libertate în alocarea resurselor. O dimensiune în plus: cu canalele virtuale se poate face un gen de service.Schimbǎri hardware minimale. Bufferele FIFO sunt înlocuite de buffere cu mai multe benzi/piste. Complexitate hardware suplimentarǎ minimalǎ.
Privire asupra aspectelor operationale
Canalele virtuale sunt alocate pe pachete. Pot fi reasignate când pleacǎ ultimul flit dintr-un pachet. Dacǎ nici un canal virtual nu este disponibil, pachetul se blocheazǎ.Flit-urile cǎlǎtoresc prin canalul fizic. Canalul fizic este utilizat în comun de mai multe pachete din canale virtuale diferite. Canalul fizic este alocat potrivit unei anumite politici de planificare (FIFO, round-robin, prioritatea pachetului, vechimea pachetului etc.)
162
Modelul analitic
Latenta Volumul trecerilor (throughput) (n-cubul binar)
Revendicare: “pentru cele mai multe retele, 4 la 8 piste/benzi pe un canal fizic sunt potrivite.” De ce 60%+ din capacitate reprezintǎ o situatie adecvatǎ?
Volumul de trecere (throughput) (la memorie constantǎ)
163
Planificare aleatoare sau prin termene limitǎ (deadline)
Trafic prioritar
Probleme
Se poate utiliza modelul analitic pentru a da garantii asupra timpului necesar unui pachet pentru a ajunge la destinatie? Probabil nu în cazul general –
164
premisele modelului ar putea fi prea simpliste. Dar dacǎ pachetele care necesitǎ asemenea garantii primesc cea mai înaltǎ prioritate?Existǎ aplicatii pentru care beneficiile canalelor virtuale nu sunt obtenabile? Ce se întâmplǎ dacǎ pachete multiple de pe aceeasi cale se pot bloca frecvent?
165
Coerenta cache în masinile scalabile
Sisteme cache-coerente scalabile
Scalabile, memorie distribuitǎ plus replicare coerentǎ.Masini scalabile cu memorie distribuitǎ. Noduri P-C-M conectate printr-o retea. Asistentul de comunicare interpreteazǎ tranzactiile pe retea, formeazǎ interfata.Punctul final era spatiul de adresare fizic în indiviziune (partajat). Cache miss satisfǎcut transparent din memoria localǎ sau de la distantǎ.Tendinta naturalǎ a cache-ului este a se replica. Dar coerenta? Nu existǎ un mediu de difuzare (broadcast) pe care sǎ-l tii sub observatie (snoop).Nu numai latenta/banda de trecere a hardware-ului, ci si protocolul trebuie sǎ fie scalabil.
Ce trebuie sǎ facǎ un sistem coerent?
Sǎ furnizeze o multime de stǎri, o diagramǎ de tranzitie a stǎrilor si actiuni.Sǎ administreze protocolul de coerentǎ.(0) Determinǎ când se invocǎ protocolul de coerentǎ.(1) Gǎseste sursa de informatie despre starea liniei în alte cache-uri. Dacǎ
trebuie sǎ comunice cu cópiile din alte cache-uri.(2) Aflǎ unde sunt celelalte cópii.(3) Comunicǎ cu acele cópii (invalidare, actualizare).Pasul (0) este executat la fel în toate sistemele. Starea liniei este mentinutǎ/retinutǎ în cache. Protocolul este invocat dacǎ apare un acces nereusit la linie.Tratǎri diferite se constatǎ la punctele (1) si (3).
Coerenta bazatǎ pe bus
Toate etapele (1), (2) si (3) se executǎ prin difuzare (broadcast) pe bus. Procesorul în eroare trimite un “search”, celelalte rǎspund la sondajul de cǎutare si executǎ actiunea necesarǎ.Se poate face si în retelele scalabile. Difuzare cǎtre toate procesoarele si asteptarea rǎspunsurilor.Simplǎ conceptual, dar difuzarea nu se scaleazǎ cu p. Pe bus, banda de trecere prin bus nu se scaleazǎ; pe retelele scalabile, fiecare defect (fault) conduce la cel putin p tranzactii pe retea.
166
Coerenta scalabilǎ: poate avea aceleasi stǎri de cache si aceeasi diagramǎ de tranzitie a stǎrilor. Mecanisme diferite de a administra protocolul.
Tratarea #1: supravegherea (snooping) ierarhicǎ
Tratare prin supraveghere extinsǎ: ierarhie a mediului de difuzare. Arbori de bus-uri sau ring-uri (KSR-1). Procesoarele sunt în multiprocesoare bazate pe bus sau pe ring ca frunze. Nodurile pǎrinti si nodurile descendenti sunt conectate prin interfete cu supraveghere bidirectionale; supravegheazǎ ambele bus-uri si propagǎ tranzactiile relevante. Memoria principalǎ poate fi centralizatǎ la rǎdǎcinǎ sau distribuitǎ între frunze.Etapele (1) – (3) sunt manipulate similar pe bus, dar nu prin difuzare totalǎ. Procesoarele în eroare trimit tranzactii de bus “search” pe propriul bus. Se propagǎ în sus si în jos pe ierarhie pe baza rezultatelor supravegherii (snoops).Probleme: latenţǎ mare: niveluri multiple si supraveghere/examinare (snoop/lookup) la fiecare nivel. Strangulare de bandǎ de trecere la rǎdǎcinǎ.Nu este o solutie popularǎ în zilele noastre.
Tratarea #2: scalabilǎ pe bazǎ de director
Fiecare bloc de memorie are informatie de director asociatǎ. Tine evidenta cópiilor blocurilor cache-ate si a stǎrii lor. La un miss, gǎseste intrarea din director, o examineazǎ si comunicǎ numai cu nodurile care au cópii dacǎ este necesar. În retelele scalabile, comunicarea cu directorul si cópiile este prin tranzactii de retea.
P
A M/D
C
P
A M/D
C
P
A M/D
C
Read requestto directory
Reply withowner identity
Read req.to owner
DataReply
Revision messageto directory
1.
2.
3.
4a.
4b.
P
A M/D
CP
A M/D
C
P
A M/D
C
RdEx requestto directory
Reply withsharers identity
Inval. req.to sharer
1.
2.
P
A M/D
C
Inval. req.to sharer
Inval. ack
Inval. ack
3a. 3b.
4a. 4b.
R e que stor
Node withdir ty copy
D ire c tor y nodefor block
R e que stor
D ire c tor y node
Shar e r Shar e r
(a) Read miss to a block in dirty state (b) Write miss to a block with two sharers
(a) read miss pe un bloc în starea dirty (b) write miss pe un bloc cu doi utilizatori în indiviziune
Multe alternative de organizare a informatiei de director.
167
Un teren de mijloc popular
O ierarhie pe douǎ niveluri.Nodurile individuale sunt microprocesoare conectate non-ierarhic, cum a fi mesh-urile de SMP-uri.Coerenta între noduri este bazatǎ pe director. Directorul tine evidenta nodurilor nu a procesoarelor individuale.Coerenta în noduri este prin supraveghere (snooping) sau prin director. Ortogonalǎ dar necesitǎ o interfatǎ bunǎ ca functionalitate.Exemple de la începuturi:Convex Exemplar: directory-directory; Sequent, Data General, HAL: directory-snoopy.
Exemplu de ierarhii pe douǎ niveluri
P
C
Snooping
B1
B2
P
C
P
CB1
P
C
MainMem
MainMem
AdapterSnoopingAdapter
P
CB1
Bus (or Ring)
P
C
P
CB1
P
C
MainMem
MainMem
Network
Assist Assist
Network2
P
C
AM/D
Network1
P
C
AM/D
Directory adapter
P
C
AM/D
Network1
P
C
AM/D
Directory adapter
P
C
AM/D
Network1
P
C
AM/D
Dir/Snoopy adapter
P
C
AM/D
Network1
P
C
AM/D
Dir/Snoopy adapter
(a) Snooping-snooping (b) Snooping-directory
Dir. Dir.
(c) Directory-directory (d) Directory-snooping
Avantajele nodurilor multiprocesor
Potential potrivite unor avantaje de cost si de performante.• Amortizarea costurilor fixe ale nodurilor fatǎ de procesoarele multiple; se
aplicǎ chiar dacǎ procesoarele sunt puse laolaltǎ simplu chiar dacǎ nu sunt coerente.
• Pot uza de SMP-uri din categoria commodity.• Mai putine noduri pentru care directorul sǎ tinǎ evidenta.• Mai multǎ comunicare poate fi continutǎ în cadrul nodului, ceea ce este mai
ieftin.• Nodurile prelocalizeazǎ si prerecupereazǎ date (prefetch) unul pentru altul
(putine “misses” la solicitǎrile la distantǎ).• Combinarea solicitǎrilor (ca acelea ierarhice, numai pe douǎ niveluri).
168
• Pot chiar sǎ foloseascǎ în indiviziune (partajat) cache-urile (suprapuneri de seturi de lucru).
• Beneficiile depind de schema de partajare (si de asocieri – mapping); bunǎ pentru cele pe larg utilizate pentru partajare la citire, de pildǎ pentru date arborescente în metoda Barnes-Hut; pentru vecinii cei mai apropiati, dacǎ asocierea (mapping) este potrivitǎ; nu tocmai bunǎ pentru comunicarea toti-cu-toti.
Dezavantaje ale nodurilor MP coerente
Banda de trecere partajatǎ între noduri. Exemplul all-to-all. Se aplicǎ la sistem coerent sau nu.Bus-ul creste latenta spre memoria localǎ.Cu coerentǎ, asteptarea tipicǎ pentru supravegherea (snoop) localǎ rezultǎ înainte de trimiterea cererii la distantǎ.Busul cu supraveghere (snoopy) la nodul la distantǎ creste întârzierea si acolo, crescând latenta si reducând banda de trecere.În general, poate afecta performanta dacǎ patternurile de partajare nu se imbinǎ potrivit.
Outline
Privire generalǎ asupra solutiei bazate pe director.Protocoalele directorului: corectitudine care include si serializare si consistentǎ; implementare; studiu prin cazuri: SGI Origin2000, Sequent NUMA-Q; discutarea unor tratǎri alternative în proces.Sincronizarea.Implicatii pentru saoftware-ul paralel.Modele de consistentǎ a memoriei relaxate.Tratǎri alternative pentru spatiu de adresare partajat coerent.
Operatii de bazǎ ale directorului
Procesoare în numǎr de k.
• ••
P P
Cache Cache
Memory Directory
presence bits dirty bit
Interconnection Network
169
Cu fiecare bloc de cache în memorie: k biti de prezentǎ, un bit murdar (dirty).Cu fiecare bloc de cache în cache: un bit de validitate si un bit murdar (de proprietar).Citire din memoria principalǎ de cǎtre procesorul i:
Dacǎ bitul murdar este OFF atunci {citeste din memoria principalǎ; schimbǎ p[i] – bitul de prezentǎ – în ON;}Dacǎ bitul murdar este ON atunci {recheamǎ linia din procesorul murdar (starea cache-ului la “comun”); actualizeazǎ memoria; schimbǎ bitul murdar la OFF; schimbǎ p[i] la ON; furnizeazǎ datele rechemate cǎtre i;}.
Scriere în memoria principalǎ de cǎtre procesorul i:Dacǎ bitul murdar este OFF atunci {furnizeazǎ date lui i; trimite invalidǎri cǎtre toate cache-urile care au blocul: schimbǎ bitul murdar la ON; schimbǎ p[i] la ON; …} …
Scalarea cu numǎrul de procesoare
Este asiguratǎ scalarea benzii de trecere a memoriei si a directorului.Directorul centralizat este strangulant în ceea ce priveste banda de trecere, ca si memoria centralizatǎ.Cum se mentine/întretine informatia de director în modul distribuit?Scalarea caracteristicilor de performantǎ. Traficul: numǎrul de tranzactii pe retea de fiecare datǎ când protocolul este invocat. Latenta = numǎrul de tranzactii pe retea pe drumul critic de fiecare datǎ.Scalarea cerintelor de memorie pentru director. Numǎrul bitilor de prezentǎ necesari creste odatǎ cu numǎrul de procesoare.Modul cum este organizat directorul afecteazǎ toate acestea, performata la o scarǎ tintǎ, la fel ca si problemele de management al coerentei.
Privire asupra directoarelor
Caracteristici inerente ale programului:Se determinǎ dacǎ directoarele furnizeazǎ avantaje mari fatǎ de difuzare (broadcast). Se asigurǎ o privire în modul de organizare si modul de depozitare a informatiei de director.Caracteristici care conteazǎ:Frecventa ratǎrilor la scriere (write misses); câte procesoare uzeazǎ în indiviziune de zonǎ la o ratare la scriere; cum se scaleazǎ acestea.
Patternuri de invalidare de cache
Patternuri de invalidare LU (Lower-Upper).Patternuri de invalidare la problema modelǎrii oceanului.Patternuri de invalidare la metoda Barnes-Hut.Patternuri de invalidare în problema explorǎrii cu raze (Raytrace).
170
LU Invalidation Patterns
8.75
91.22
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.220
10
2030
40
5060
7080
90
100
0 1 2 3 4 5 6 7
8 to
11
12 to
15
16 to
19
20 to
23
24 to
27
28 to
31
32 to
35
36 to
39
40 to
43
44 to
47
48 to
51
52 to
55
56 to
59
60 to
63
# of inv alidations
% o
f sha
red
writ
es
Ocean Invalidation Patterns
0
80.98
15.06
3.04 0.49 0.34 0.03 0 0.03 0 0 0 0 0 0 0 0 0 0 0 0 0.020
10
20
30
40
50
60
70
80
90
0 1 2 3 4 5 6 7
8 to
11
12 to
15
16 to
19
20 to
23
24 to
27
28 to
31
32 to
35
36 to
39
40 to
43
44 to
47
48 to
51
52 to
55
56 to
59
60 to
63
# of inv alidations
% o
f sha
red
writ
es
Barnes-Hut Invalidation Patterns
1.27
48.35
22.87
10.56
5.332.87 1.88 1.4 2.5 1.06 0.61 0.24 0.28 0.2 0.06 0.1 0.07 0 0 0 0 0.33
05
10
1520
253035
4045
50
0 1 2 3 4 5 6 7
8 to
11
12 to
15
16 to
19
20 to
23
24 to
27
28 to
31
32 to
35
36 to
39
40 to
43
44 to
47
48 to
51
52 to
55
56 to
59
60 to
63
# of inv alidations
% o
f sha
red
write
s
171
Radiosity Invalidation Patterns
6.68
58.35
12.04
4.16 2.24 1.59 1.16 0.97 3.28 2.2 1.74 1.46 0.92 0.45 0.37 0.31 0.28 0.26 0.24 0.19 0.19 0.910
10
20
30
40
50
60
0 1 2 3 4 5 6 7
8 to
11
12 to
15
16 to
19
20 to
23
24 to
27
28 to
31
32 to
35
36 to
39
40 to
43
44 to
47
48 to
51
52 to
55
56 to
59
60 to
63
# of inv alidations
% o
f sha
red
write
s
Sumar pentru patternuri de partajare
În genral, numai câteva procese partajante la o scriere, se scaleazǎ (lent) cu numǎrul de procesoare, P.
Codul si obiectele read-only (de pildǎ datele scenei în Raytrace); nu sunt probleme deoarece scrierile sunt rare.Obiecte migratoare (de pildǎ celule de masiv de costuri în LocusRate); chiar dacǎ numǎrul de PE scaleazǎ, numai 1-2 invalidǎri.Obiecte majoritar citite (de pildǎ rǎdǎcina de arbore în metoda Barnes); invalidǎrile sunt mari dar rare în timp, de aici impact redus asupra performantei.Obiecte cu scrieri/citiri frecvente (de pildǎ cozile de taskuri); invalidǎrile rǎmân uzual mici desi frecvente.Obiectele de sincronizare; lacǎtele (locks) de redusǎ confruntare (contention) produc invalidǎri de mici proportii; lacǎtele (locks) de înaltǎ confruntare necesitǎ suport special (arbori software, lacǎte (locks) de coadǎ de asteptare).
Implicǎ directoare foarte utile în continerea traficului.Dacǎ se organizeazǎ potrivit, traficul si latenta n-ar trebui sǎ scaleze tocmai rǎu.
Se sugereazǎ tehnici de a reduce overheadul memorǎrii.
Organizarea directoarelor
De vǎzut cum lucreazǎ ele si caracteristicile lor de scalare cu P.
Cum se regǎseste informatia din director
Pentru memoria si directorul centralizat, usor: se merge acolo, dar nu scaleazǎ.Pentru memorie si director distribuite:
172
Scheme plate. Director distribuit cu memoria: acasǎ; bazat local pe adrese (hashing): actiune pe retea trimisǎ direct acasǎ (to home).Scheme ierarhice. Director organizat ca o structurǎ ierarhicǎ de date; frunzele sunt noduri procesoare, nodurile interioare au numai starea directorului; intrǎrile în directorul nodului pentru un bloc spun dacǎ fiecare subarbore cache-azǎ blocul; pentru a regǎsi informatia de director, se trite mesajul de cǎutare “search” pânǎ la pǎrinte: se ruteazǎ singur prin examinarea directorului; la snooping ierarhic, dar mesaje punct-la-punct între copii si pǎrinti.
Cum lucreazǎ directoarele ierarhice
Se ia urma, se localizeazǎ care dintre descendentii nivelului 1 de directoare au o copie a blocului de memorie. Se localizeazǎ care blocuri de memorie localǎ sunt cache-ate în afara acestui subarbore. Incluziunea este mentinutǎ între directoarele de nivel 1 si directorul din nivelul 2.Directoarele sunt structuri de date ierarhice. Frunzele sunt noduri procesoare, nodurile interioare sunt numai directoare. Ierarhia logicǎ, nu este în mod necesar fizicǎ (poate fi scufundatǎ în reteaua generalǎ).
Centralized Distributed
HierarchicalFlat
Memory-based Cache-based
Directory Schemes
How to find source ofdirectory information
How to locate copies
• • • • • •
● ● ●
Noduri procesoare
Directoare nivelul 1
Director nivelul 2
173
Proprietǎti care scaleazǎ
P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12P13 P14P15
Banda de trecere: rǎdǎcina poate deveni strangulantǎ. Se pot utiliza directoare cu mai multe rǎdǎcini în interconectarea generalǎ.Traficul (numǎrul de mesaje): Depinde de localismul din ierarhie. Poate fi rea la capǎtul de jos – 4*logP cu numai o copie. Poate avea capacitatea de a exploata combinarea de mesaje.Latenta: depinde si ea de localismul din ierarhie. Poate fi mai bunǎ în masinile mari când nu sunt de parcurs distante mari (home la distantǎ). Dar poate avea tranzactii multiple pe retea asezate pe ierarhie si cǎutǎri în directoare de-a lungul parcursului.Overheadul memoriei.
Cum sunt retinute locatiile cópiilor?
Scheme ierarhice: prin ierarhie, fiecare director are biti de prezentǎ pentru descendentii sǎi (subarbori) si bit murdar.Scheme plate: variazǎ mult. Caracteristici de performantǎ si overheaduri cu memoria diferite. Schemele bazate pe memorie: informatii despre cópii depuse toate acasǎ (at the home) cu blocul de memorie; Dash, Alewife, SGI Origin, Flash.Schemele bazate pe cache: informatiile despre cópiile distribuite printre cópii ele însesi, fiecare cópie pointeazǎ cǎtre urmǎtoarea. Interfatǎ coerentǎ scalabilǎ (Scalable Coherent Interface – SCI: standardul IEEE).
174
Scheme plate bazate pe memorie
Toate informatiile despre cópii co-locate cu însusi blocul acasǎ (at the home). Lucreazǎ ca si schemele centralizate, cu deosebirea cǎ sunt distribuite.Scalarea caracterisiticilor de performantǎ. Traficul pe un write: proportional cu numǎrul de partajanti; latenta unui write: poate genera invalidǎri pentru partajantii în paralel.Scalarea overhead-ului de memorie. Reprezentarea cea mai simplǎ: full bit vector, adicǎ un bit de prezentǎ pe nod. Overhead-ul de memorie nu scaleazǎ bine cu P; linia de 64 de bytes implicǎ 64 de noduri: 12,7% overhead, 256 de noduri: 50% overhead, 1024 de noduri: 200% overhead. Pentru M blocuri de memorie în memorie, overhead-ul de depozitare este proportional cu P*M.
Reducerea overhead-ului de memorare
Optimizǎri pentru schemele cu vector full bit. Cresterea dimensiunii blocului de cache (reduce overhead-ul de stocare proportional). Utilizarea nodurilor multiprocesor (bit pe nod multiprocesor, nu pe procesor). Scaleazǎ încǎ la fel ca P*M, dar nu este o problemǎ pentru toate, doar masinile foarte mari: 256 de procesoare, 4 pe fiecare cluster, 128 B pe linie: 6,25% overhead.Reducerea “latimii12”: relativ la factorul P. observatie: cele mai multe blocuri sunt cache-ate de numai câteva noduri, putine. Nu au un bit pe nod, dar intrarea contine câtiva pointeri la nodurile partajante. P = 1024 implicǎ pointeri de 10 biti, se pot utiliza 100 de pointeri si încǎ se economiseste spatiu. Patternurile de partajare indicǎ faptul cǎ sunt suficienti putini pointeri (cinci sau asa ceva). Necesitǎ o strategie pentru depǎsire (overflow) când existǎ mai multi partajanti (se va vedea mai departe).
12 Termenii lǎtime si înǎltime se referǎ la figura anterioarǎ: pe “lǎtime” sunt plasate (multi)procesoarele, pe “înǎltime” sunt plasate modulele de memorie.
P
M
175
Reducerea “înǎltimii”: relativ la factorul M. Observatie: numǎrul de blocuri de memorie este mult mai mare decât blocurile de cache. În orice moment, cea mai mare parte a intrǎrilor directorului este inutilǎ. Organizeazǎ directorul ca un cache, mai curând decât a pune câte o intrare pentru fiecare bloc de memorie.
Schemele plate, bazate pe cache
Cum lucreazǎ:Numai Home detine pointeri la restul informatiei directorului.Listǎ linkatǎ distribuitǎ de cópii, circulǎ (weaves) între cache-uri. Tag-ul de cache are pointer, pointeazǎ la cache-ul urmǎtor detinǎtor al unei cópii.La read, se adaugǎ pe sine în capul listei (necesar pentru comunicare).La write, se propagǎ lantul de invalidate în josul listei.
P
Cache
P
Cache
P
Cache
Main Memory(Home)
Node 0 Node 1 Node 2
Standardul IEEE Scalable Coherent Interface (SCI): listǎ dublu linkatǎ
Scalarea proprietǎtilor (cache-based)
Traficul la write: proportional cu numǎrul de partajanti.Latenta la write: proportionalǎ cu numǎrul de partajanti! Nu stie identitatea partajantului urmǎtor pânǎ când nu este atins partajantul curent. Asistǎ totodatǎ procesarea la fiecare nod de-a lungul cǎii (chiar read-urile implicǎ mai mult decât un alt asistent: home si primul partajant din listǎ).Overhead-ul de stocare: scalare destul de bunǎ de-a lungul ambelor axe. Numai un pointer principal pe fiecare bloc de memorie; restul este total în proprietatea dimensiunii cache.Alte proprietǎti (discutate mai departe):Bune: mature, standardul IEEE, usurintǎ.Rele: complexitate.
176
Sumar despre organizǎrile directorului
Schemele plate:Problema (a): aflarea sursei datelor directorului; la home, pe bazǎ de adresǎ.Problema (b): aflarea locurilor unde sunt cópiile; la cele bazate pe memorie: toate informatiile sunt în directorul at home; la cele bazate pe cache: home are pointer la primul element al listei linkate distribuite.Problema (c): comunicarea cu acele cópii; memory-based: mesaje punct-la-punct (probabil mai grosiere la depǎsire (overflow)) – pot fi multicast sau suprapuse (overlapped); cache-based: parte a traversǎrii listei linkate punct-la-punct pentru a le localiza – serializate.Schemele ierarhice:Toate cele trei probleme prin trimiterea de mesaje în sus si în jos pe arbore; nu existǎ o listǎ unicǎ explicitǎ a partajantilor; comunicarea directǎ este numai între ascendenti si descendenti.
Sumar despre solutiile cu director
Directoarele oferǎ coerentǎ scalabilǎ pe retele generale; nu sunt necesare mijloace de difuzare (broadcast).Multe posibilitǎti de organizare a directorului si multe protocoale de administrare.Directoarele ierarhice nu sunt foarte utilizate; latentǎ mare, tranzactii pe retea multiple si strangularea benzii de trecere la nivelul rǎdǎcinii.Schemele plate atât mamory-based cât si cache-based sunt vii; pentru cele memory-based, full bit vector este suficient la scarǎ moderatǎ – mǎsurat în nodurile vizibile protocolului de director, nu procesoarelor; se vor examina studii de caz pentru fiecare.
Probleme pentru protocoalele de director
Corectitudine.Performantǎ.Complexitatea tratǎrii erorilor.Se discutǎ imediat problemele majore privind corectitudinea is performanta cu care se confruntǎ un protocol.Apoi se va adânci studiul problemelor cu protocoalele memory- si cache-based, compromisurile în modul de rezolvare (studii de caz). Prin acestea complexitatea va apǎrea la vedere.
Corectitudinea
Asigurǎ bazele coerentei la nivelul tranzitiei stǎrilor. Liniile sunt updatate/invalidate/recuperate, se produc actiuni si tranzitii de la o stare la alta corecte.
177
Asigurǎ ordonarea si sunt satisfǎcute restrictiile la serializare. Pentru coerentǎ (o singurǎ locatie). Pentru consistentǎ (locatii multiple): presupune încǎ o consistentǎ secventialǎ.Evitǎ blocajele (deadlock, livelock), înfometarea (starvation).Probleme: Cópii multiple şi cǎi multiple prin retea (cǎi de acces distribuite). Spre deosebire de sistemele pe bus cache non-coerente (fiecare are numai una). Latenta mare face optimizǎrile atractive – cresterea concurentei complicǎ problema corectitudinii.
Coerenta: serializarea la o locatie
Pe un bus, cópii multiple dar ordine impusǎ de serializarea prin bus.Pe scalabilele fǎrǎ coerentǎ, modulele memoriei principale determinǎ ordinea.Se pot utiliza si aici modulele din memorie principalǎ, dar cu cópii multiple. Copia validǎ a datelor ar putea sǎ nu fie în memoria principalǎ. Atingerea memoriei principale într-o ordine nu înseamnǎ cǎ exemplarul valid va fi atins în acea ordine. Serializarea într-un loc nu înseamnǎ serializare în raport cu toate cópiile (se va discuta).
Consistenta secventialǎ
Bus-based:Executarea completǎ de scrieri: asteptare pânǎ ce se acceseazǎ bus-ul.Atomicitatea unui write: furnizatǎ de ordonarea datǎ de bus si de buffer.În cazul scalabil non-coerent:Executarea completǎ de scrieri: asteptare pentru înstiintarea explicitǎ de la memorie.Atomicitatea unui write: usor de realizat la cópii singulare.Acum, cu cópii multiple si cǎi de acces în retea multiple:Executarea completǎ a unui write: necesitǎ înstiintǎri explicite de la cópiile însesi.Scrierile nu sunt fǎcute atomice cu usurintǎ.Altele în plus fatǎ de problemele de la bus-based si non-coerent.
Problema atomicitǎtii scrierii
Interconnection Network
Cache
Mem
P1
Cache
Mem
P2
Cache
Mem
P3
A=1; while (A==0) ;B=1; while (B==0) ;
print A;
A=1
A=1
B=1delay
A:0->1 A:0B:0->1
178
Blocaje (deadlock, livelock), înfometare (starvation)
Protocol cerere-rǎspuns (request-reply).Probleme similare celor discutate mai devreme. Un nod poate primi prea multe mesaje. Controlul fluxului poate produce blocaje (deadlock). Retele separate pentru cerere-rǎspuns cu protocol cerere-rǎspuns (request-reply). Sau NACK-uri (Negative Acknowledgement) dar cu riscurile blocajelor (livelock) si ale problemelor cu traficul.Problemǎ nouǎ: protocoalele adesea nu sunt strict cerere-rǎspuns. De pildǎ, rd-excl (read exclusive) genereazǎ cereri invalide (care genereazǎ rǎspunsuri de înstiintare (ack). Alte cazuri de reducere a latentei si de a permite concurentǎ.Referiri asemǎnǎtoare trebuie fǎcute la blocajele livelock si la înfometare (starvation).Vom vedea cum protocoalele se ocupǎ de aceste probleme de corectitudine.
Performanta
Latenta. Optimizǎri de protocol pentru a reduce actiunile suplimetare în retea pe drumul critic. Suprapunerea de actiuni/activitǎti sau accelerarea lor.Capacitatea de prelucrare (throughput). Reducerea numǎrului de operatii de protocol la fiecare invocare.Grijǎ relativ la modul în care acestea scaleazǎ cu numǎrul de noduri.
Eficientizarea protocolului sub aspectul latentei
Înaintarea de mesaje: protocoale bazate pe memorie.
L H R1: req
2:reply
3:intervention
4a:revise
4b:response
L H R
1: req 2:intervention
3:response4:reply
L H R
1: req 2:intervention
3b:response
3a:revise
(a) Strict request-reply (a) Intervention forwarding
(a) Reply forwarding
Înaintarea de mesaje: protocoale bazate pe cache.
179
S3
5:inval
6:ack
H S1 S2
1: inval
2:ack
3:inval
4:ack
H S1 S2
1: inval 2a :inval
3b:ack2b:ack
H S1 S2
2:inval
4:ack
(c)
S3
3a:inval
4b:ack
S3
3:inval1:inval
(b)(a)
Alte optimizǎri relativ la latentǎ
Se utilizeazǎ/aruncǎ hardware-ul la drumul critic. SRAM pentru director (sparse sau cache), bit pe bloc în SRAM pentru a spune dacǎ protocolul ar trebui invocat.Se suprapun activitǎtile pe drumul critic. Invalidǎri multiple concomitent în varianta memory-based, invalidǎri suprapuse si înstiintǎri în varianta cache-based, examinǎri (lookups) de director si de memorie sau examinǎri cu tranzactii – operatii de protocol speculative.
Cresterea capacitǎtii de prelucrare (throughput)
Reducerea numǎrului de tranzactii pe operatie. Invalidǎri si înstiintǎri, indicatii (hints) de înlocuire, toate implicǎ banda de trecere si gradul de ocupare a asistentului de comunicare.Reducerea gradului de ocupare a asistentului sau a overheadului legat de protocolul de procesare. Tranzactii scurte si frecvente, astfel încât gradul de ocupare devine foarte important.Pipeline pentru assist(entul de comiunicare) (procesarea protocolului).Multe modalitǎti de a reduce latenta si totodatǎ de a creste capacitatea de prelucrare (throughput). De pildǎ, înaintarea (forward) cǎtre un nod murdar, aruncarea hardware pe drumul critic…
Complexitatea
Protocoalele de coerentǎ a cache-urilor sunt complexe.Alegerea tratǎrii/solutiei. Conceptual si proiectarea protocolului fatǎ-n fatǎ cu implementarea.Compromisuri într-o tratare (approach). Ameliorǎrile de performantǎ adaugǎ adesea complexitate, complicǎ corectitudinea – mai multǎ concurentǎ, posibile conditii de cursǎ (race), nu cerere-rǎspuns stricte.Multe cazuri subtile, dar, cresterea întelegerii/adoptǎrii face actiunea mult mai usoarǎ; verificarea automatǎ este importantǎ dar dificilǎ.Sǎ examinǎm mai atent versiunile memory- si cache-based.
180
Protocoale memory-based plate
Se utilizeazǎ studiul de caz SGI Origin2000. Protocol similar celui pentru Stanford DASH, dar cu compromisuri (tradeoffs) diferite. Tot asa sunt si Alewife, FLASH, HAL.Teme principale:Privire generalǎ asupra sistemului.Stǎrile de coerentǎ, reprezentare si protocol.Compromisuri la corectitudine si performantǎ.Probleme de implemetare.Caracteristici de implementare cantitative.
Privire generalǎ asupra sistemului Origin2000
L2 cache
P
(1-4 MB)L2 cache
P
(1-4 MB)
Hub
Main Memory(1-4 GB)
Direc-tory
L2 cache
P
(1-4 MB)L2 cache
P
(1-4 MB)
Hub
Main Memory(1-4 GB)
Direc-tory
Interconnection Network
SysAD busSysAD bus
PCB (Printed Circuit Board) unicǎ, dimensiuni 16x11 inches.Director în aceleasi DRAM sau în DRAM separate, accesate în paralel.Pânǎ la 512 noduri (1024 procesoare).Cu procesor 10 k registre, 195 MHz, cu un vârf de 390 Mflops sau 780 MIPS pe procesor.Banda de trecere la vârf pentru bus-ul SysAD (System Administrator/ Administration) este 780 MB/s, la fel pentru hub-memorie.Banda pentru hub la router si la Xbow este 1,56 GB/s (ambele sunt în afara plǎcii de bazǎ).
181
Placa de nod Origin
R10K
SC SC
SC SC
Tag
R10K
SC SC
SC SC
Tag
ExtendedMain Memory
Main Memory
BC BC BC BC BCBCHub
Pwr/gnd Pwr/gnd Pwr/gndNetwork I/O
Connections to Backplane
and 16-bit Directory
and 16-bit Directory
Directory
Hub-ul este cu 500 k-porti în 0,5 µ CMOS.Are buffere majore pentru tranzactii pe fiecare procesor (4 de fiecare).Are douǎ motoare de transfer în blocuri (de copiat si de completat memoria).Interfete si conexiuni la procesor, memorie, retea si I/O.Furnizeazǎ suport pentru primitive de sincronizare si pentru migrare de pagini (se discutǎ mai departe).Douǎ procesoare în fiecare nod nu snoopy-coherent (din motive de cost).
Reteaua Origin
N
N
N
N
N
N
N
N
N
N
N
N
(b) 4-node (c) 8-node (d) 16-node
(e) 64-node
(d) 32-node
meta-router
Fiecare ruter are sase perechi de legǎturi unidirectionale de 1,56 MB/s, douǎ la noduri, patru la alte routere; latenta în ruter 41 ns pin-la-pin.Cabluri flexibile lungi de pânǎ la 3 ft.
182
Patru “canale virtuale”: cerere, rǎspuns, celelalte douǎ pentru prioritǎti sau I/O.
I/O pentru Origin
Bridge IOC3 SIO
SCSI SCSI
Bridge
LINC CTRL
To Bridge
To Bridge
16
Graphics
Graphics
16
161616
16
16
16
Hub1
Hub2Xbow
Xbow este un crossbar cu 8 porturi, conecteazǎ douǎ hub-uri (noduri) la sase cards.Similar ruterelor dar mai simple astfel cǎ pot sustine 8 porturi.Cu exceptia celor grafice, multe alte dispozitie se conecteazǎ prin bridge si bus; poate rezerva bandǎ de trecere pentru lucruri ca video sau timp-real.Spatiu I/O global: orice procesor poate accesa dispozitivele I/O; prin memorie fǎrǎ cache (non-cached) operatori la spatiul I/O sau DMA coerentǎ; orice dispozitiv I/O poate scrie în sau citi din orice memorie (comunicare prin rutere).
Structura directorului Origin
Plat, bazat pe memorie: toatǎ informatia directorului at the home.Trei formate de director:(1) Dacǎ este exclusiv într-un cache, intrarea este pointer la acel procesor
specific (nu nod).(2) Dacǎ este partajat, bit vector: fiecare bit pointeazǎ la un nod (Hub), nu la un
procesor. Invalidarea trimisǎ la un Hub este difuzatǎ (broadcast) cǎtre ambele procesoare din nod. Douǎ dimensiuni, în functie de scarǎ: formatul pe 16 biti (32 de procesoare) este detinut de mamoria DRAM principalǎ; formatul pe 64 de biti (128 de procesoare), extrabiti detinuti de extensia de memorie.
(3) Pentru masini mai mari, coarse vector: fiecare bit corespunde la p/64 noduri. Invalidarea este trimisǎ tuturor Hub-urilor din acel grup, cu fiecare mesaj de invalidare difuzat (broadcast) la cele douǎ procesoare pe care le posedǎ hub-ul. Masina poate alege între bit vector si coarse vector în mod dinamic. Este aplicatia consacratǎ, asociatǎ unei pǎrti a masinii de cel mult 64 de noduri?
Pentru simplitate, în discutie se ignorǎ alternativa coarse vector.
183
Stǎrile cache si directory pentru Origin
Stǎrile cache-ului: MESI (Modified Exclusive Shared Invalid (states of cache memory)).Sapte stǎri de director:• Fǎrǎ posesor (unowned): nici un cache nu are o copie, copia din memorie
este validǎ.• În indiviziune (partajatǎ) (shared): unul sau mai multe cache-uri are/au o
copie partajatǎ, memoria este validǎ.• Exclusivǎ (exclusive): un cache (la care se pointeazǎ) are blocul în starea
modificatǎ sau exclusivǎ.• Trei stǎri dependente (pending) sau ocupate (busy), una pentru fiecare din
cele de mai sus.o Indicǎ faptul cǎ directorul a primit o cerere precedentǎ pentru
bloc.o Nu o poate satisface ea însǎsi, se trimite la un alt nod si este în
asteptare.o Nu poate încǎ sǎ preia o altǎ cerere pentru bloc.
• Starea otrǎvitǎ (poisoned), utilizatǎ pentru migrarea de paginǎ eficientǎ (se va detalia mai departe).
Sǎ vedem cum sunt manipulate cererile de citire si de scriere. Nu se presupune vreo ordine punct-la-punct în retea.
Manipularea unei ratǎri la citire (read miss)
Hub-ul priveste la adresǎ:Dacǎ este la distantǎ, trimite cererea (request) la Home.Dacǎ este localǎ, exploreazǎ el însusi intrǎrile directorului si memoria.Directorul poate indica una din mai multe stǎri.Shared sau Unowned:Dacǎ este partajatǎ, directorul seteazǎ bitul de prezentǎ.Dacǎ este fǎrǎ proprietar, merge la starea exclusivǎ si utilizeazǎ formatul de pointer.Rǎspunde cu blocul celui care a formulat cererea. Cerere-rǎspuns strict (nu are loc vreo tranzactie în retea dacǎ Home este local).În realitate, se exploreazǎ si memoria la modul speculativ pentru a obtine datele, în paralel cu directorul. Explorarea directorului revine un ciclu mai devreme. Dacǎ directorul este partajat sau fǎrǎ proprietar, este un câstig: datele sunt deja detinute de Hub. Dacǎ nu avem nici una din aceste situatii, accesul speculativ la memorie este o risipǎ.Starea busy: nu este pregǎtit pentru manipulare. NACK (Negative Acknowledgement), asta pentru a nu tine ocupat spatiul de buffer prea mult timp.
184
Read Miss pentru un bloc în starea exclusivǎ
Este cel mai interesant caz. Dacǎ detinǎtorul nu este Home, este necesar a lua datele la Home si cel care a formulat cererea de la proprietar. Se utilizeazǎ rǎspunsul care se înainteazǎ pentru cea mai redusǎ latentǎ si cel mai redus trafic – nu cerere-rǎspuns la modul strict.
L H R
1: req 2:intervention
3b:response
3a:revise
Probleme cu optiunea “intervention forwarding”. Rǎspunsul vine la Home (care rǎspunde apoi celui care a formulat cererea). Un nod poate fi în situatia de a tine evidenta a P*k cereri deosebite (outstanding) ca Home – la înaintarea rǎspunsului numai ultimele k rǎspunsuri merg la petent. Mai complex si cu performante mai reduse.
Actiuni la Home si la Proprietar
La Home:Se seteazǎ directorul la starea busy si NACK (Negative Acknowledgement) pentru cererile urmǎtoare. Filozofia generalǎ a protocolului; nu se poate seta la shared sau la exclusive; alternativa este a bufferiza la Home pânǎ la final, dar este o problemǎ cu buffer de intrare. Setarea si desetarea potrivitǎ a bitilor de prezentǎ. Se presupune cǎ blocul este curat-exclusiv si se trimite rǎspuns speculativ.La Prorpietar:Dacǎ blocul este dirty, se trimite rǎspunsul cu datele la cel care le-a cerut si se face “sharing writeback” cu datele la Home. Dacǎ blocul este clean-exclusive, similar, dar nu se trimit datele (mesajul la Home este denumit “downgrade”).Home schimbǎ starea la shared dacǎ primeste un mesaj de revizuire.
Influenta procesorului asupra protocolului
De ce rǎspunsuri speculative?Solicitantul (requestor) trebuie sǎ astepte pentru rǎspuns de la proprietar în orice modalitate de a afla. Nu se economiseste latentǎ. Ar putea obtine imediat datele de la proprietar totdeauna.Procesorul este proiectat a nu rǎspunde cu date dacǎ este clean-exclusive. Astfel, este necesar a obtine datele de la Home; n-ar avea nevoie de rǎspunsuri speculative cu înaintare (forwarding) de interventie.
185
Abiliteazǎ si altǎ optimizare (a se vedea mai departe). Nu trebuie sǎ retrimitǎ datele la Home când este înlocuit un bloc clean-exclusive.
Manipularea unui Write Miss
Cererea la Home poate fi de upgrade sau read-exclusive.Starea este busy: NACK.Starea este unowned: dacǎ RdEx, se seteazǎ bitul, se schimbǎ starea la dirty, se rǎspunde cu date. Dacǎ este un upgrade, înseamnǎ cǎ blocul a fost înlocuit din cache si directorul deja notificat, astfel cǎ upgrade-ul este o cerere inadecvatǎ – NACK-ed – (va fi reîncercat ca RdEx).Starea este shared sau exclusive:Trebuie trimise invalidǎri. Se utilizezǎ înaintarea (forwarding) rǎspunsului, adicǎ înstiintǎrile (acks) de invalidare se trimit la solicitant, nu la Home.
Scrierea într-un bloc în starea shared
La Home:Se seteazǎ starea directorului la exclusive si se seteazǎ bitul de prezentǎ pentru solicitant – se asigurǎ cǎ solicitǎrile urmǎtoare vor fi înaintate la solicitnat. Dacǎ RdEx, se trimite “rǎspuns exclusiv cu invalidǎrile asociate” la solicitant (contine date) – de la câti partajanţi trebuie sǎ se astepte invalidǎri. Dacǎ upgrade, rǎspuns similar “înstiintare (ack) de upgrade cu invalidǎrile asociate”, fǎrǎ date. Se expediazǎ invalidǎri cǎtre partajanţi, care vor înstiinţa (ack) solicitantul.La soliciant, înainte de “închiderea” operatiei se asteaptǎ sǎ revinǎ toate confirmǎrile (acks). Solicitarea urmǎtoare pentru bloc la Home este înaintatǎ ca interventie la solicitant. Pentru o serializare adecvatǎ, solicitantul nu o manipuleazǎ pânǎ nu primeste toate confirmǎrile pentru solicitarea sa majorǎ (outstanding).
Scrierea într-un bloc în starea exclusive
Dacǎ upgrade, nu este validǎ asa cǎ se aplicǎ NACK-ed. Un alt write l-a “bǎtut” pe acesta la Home asa cǎ datele solicitantului nu sunt valide.Dacǎ RdEx, ca la read, se seteazǎ starea busy, se seteazǎ bitul de pezenţǎ, se trimite rǎspuns speculativ. Se trimite invalidare la proprietar cu identitatea solicitantului.La proprietar: dacǎ blocul este dirty în cache, se trimite la Home un mesaj de revizuire “ownership xfer” (fǎrǎ date), se trimite rǎspuns cu date la solicitant (mai tare fatǎ de rǎspunsul speculativ); dacǎ blocul este în starea clean exclusive, se trimite la Home un mesaj de revizuire “ownership xfer” (fǎrǎ date), se trimite confirmare (ack) la solicitant (fǎrǎ date; se obtin din rǎspuns speculativ).
186
Manipularea solicitǎrilor writeback
Starea directorului nu poste fi partajatǎ sau fǎrǎ proprietar. Solicitantul are blocul dirty, dacǎ o altǎ solicitare ar veni pentru a seta starea la shared, ar fi înaintatǎ la proprietar si starea ar fi busy.Starea este exclusivǎ. Starea directorului se seteazǎ la unowned si se returneazǎ confirmare (ack).Starea este busy: race condition interesantǎ. Busy din cauza interventiei datorate solicitǎrii de la un alt nod (Y) care a fost înaintatǎ nodului X care face writeback-ul – interventia si writeback-ul s-au intersectat reciproc. Operatia lui Y este deja în derulare si si-a produs efectul asupra directorului. Nu se poate renunta la writeback (numai copie validǎ). Nu se poate NACK writeback-ul si sǎ se reia încercarea dupǎ ce referirea lui Y se încheie – cache-ul lui Y va avea o copie validǎ în timp ce o copie dirty diferitǎ este written back.
Solutia pentru writeback race
Se combinǎ cele douǎ operatii.Când writeback-ul ajunge la director, el schimbǎ starea: la shared dacǎ este busy-shared (adicǎ Y a solicitat o copie cititǎ); la exclusive dacǎ este busy-exclusive.Home înainteazǎ datele writeback-ului solicitantului Y. Trimite confirmare de writeback la X.Când X primeste interventia, o ignorǎ. Stie sǎ facǎ asta deoarece el are un writeback major (outstanding) pentru linie.Operatia lui Y se isprǎveste când obtine rǎspunsul.Writeback-ul lui X se încheie când obtine confirmarea de writeback.
Înlocuirea unui bloc partajat
S-ar putea trimite o indicatie (hint) de înlocuire la director, pentru a elimina nodul din lista de partajare.Poate elimina o invalidare data urmǎtoare când blocul este scris.Dar nu reduce traficul. Trebuie sǎ trimitǎ indicatia de înlocuire, produce trafic la un moment diferit.Protocolul Origin nu foloseste indicatii de înlocuire.Tipuri de tranzactii totale:• Memorie coerentǎ: 9 tipuri de tranzactii la solicitare, 6 de
invalidare/interventie, 39 de rǎspuns.• Necoerentǎ (I/O, sincronizare, operatii speciale): 19 solicitare, 14 rǎspuns
(nu invalidare/interventie).
187
Pǎstrarea consistentei secventiale
R100000 este planificat dinamic. Permite operatiilor cu memoria a fi lansate (issue) si excutate în afara ordinei din program. Dar asigurǎ cǎ ele devin vizibile si se încheie în ordine. Nu satiface conditii suficiente dar asigurǎ consistenta secventialǎ (SC).O problemǎ interesantǎ în ceea ce priveste pǎstrarea SC.La o scriere într-un bloc în indiviziune, solicitantul primeste douǎ tipuri de rǎspunsuri: rǎspuns exclusiv de la Home care indicǎ scriere serializatǎ în memorie; confirmǎri de invalidare care indicǎ faptul cǎ scrierea a fost încheiatǎ din punctul de vedere al procesoarelor.Dar microprocesorul asteaptǎ numai un rǎspuns (ca într-un sistem uniprocesor). Asa cǎ rǎspunsurile sunt tratate de Hub-ul solicitantului (interfata procesorului).Pentru a asigura SC, Hub-ul trebuie sǎ astepte pânǎ când sunt primite confirmǎrile de invalidare, înainte de a rǎspunde procesorului; nu poate rǎspunde de îndatǎ ce s-a primit rǎspunsul exclusiv. Va lǎsa ca accesǎrile de la procesor mai târzii sǎ se încheie (scrierile devin vizibile) înainte de acest write.
Tratarea problemelor de corectitudine
Serializarea operatiilor.Blocaje de tipul deadlock.Blocaje de tipul livelock.Starvation (înfometarea).
Serializarea operatiilor
Necesitǎ un agent de serializare. Memoria Home este un candidat de considerat deoarece toate ratǎrile (misses) merg mai întâi acolo.Mecanism posibil: bufferizarea solicitǎrilor pe principiul FIFO la Home. Pânǎ când la solicitarea anterioar înaintatǎ s-a returnat rǎspunsul de la Home. Dar problema bufferului de intrare devine acutǎ la Home.Solutii posibile:Se lasǎ bufferul de intrare sǎ deverseze în memoria principalǎ (MIT Alewife).Nu se bufferizeazǎ la Home, ci se înainteazǎ la nodul proprietar (Stanford DASH). Serializarea este determinatǎ de Home când este clean, de proprietar când este exclusive; dacǎ nu poate fi satisfǎcutǎ la proprietar, de pildǎ written back sau reunutarea la proprietate, NACK-ed înapoi la solicitant fǎrǎ a fi serializatǎ. Se serializeazǎ când se reia încercarea.Nu se bufferizeazǎ la Home, se utilizeazǎ starea busy pentru NACK (Origin). Ordinea de serializare este aceea în care solicitǎrile sunt acceptate (not NACK-ed).Se mentine bufferul FIFO în manierǎ distribuitǎ (SCI, explicat mai târziu).
188
Serializare la o locatie (continuare)
A avea o singurǎ entitate care sǎ determine ordinea nu este suficient. Ea ar putea sǎ nu stie când toate x-actiunile pentru acea operatie s-au executat pretutindeni.1. P1 emite o solicitare read la nodul Home pentru A.2. P2 emite o solicitarea read-exclusive la nodul Home care corespunde unui
write al lui A. Dar n-o proceseazǎ pânǎ nu s-a terminat cu read-ul.3. Home primeste 1 si în replicǎ trimite rǎspuns la P1 (si seteazǎ în director
bitul de prezentǎ). Home crede acum cǎ read este încheiat. Din nefericire, rǎspunsul nu merge la P1 imediat
4. În replicǎ la 2, Home trimite invalidare la P1; ea ajunge la P1 înaintea tranzactiei 3 (nu existǎ o ordine punct-la-punct între solicitǎri si rǎspunsuri).
5. P1 primeste si aplicǎ invalidarea, trimite la Home confirmarea (ack).6. Home trimite rǎspunsul cu date la P2 corespunzǎtor solicitǎrii 2.În final, tranzactia 3 (rǎspunsul la read) ajunge la P1.
Home se ocupǎ cu accesul pentru write înainte ca cel dinainte sǎ fi fost încheiat.P1 n-ar trebui sǎ permitǎ un nou acces la linie pânǎ când vechiul acces nu este desǎvârsit.
Blocaje de tipul deadlock
Douǎ retele nu sunt suficiente când protocolul nu este request-reply. Retele aditionale sunt costisitoare si subutilizate.Se utilizeazǎ douǎ dar care detecteazǎ potentialele blocaje deadlock si le dejoacǎ. De pildǎ. Când bufferele cu solicitarea de intrare si cu solicitarea de iesire se umplu dincolo de un anumit prag si solicitarea din capul cozii de intrare este una care generazǎ mai multe solicitǎri sau când bufferul solicitǎrilor de iesire este plin si nu a avut vreo relaxare pentru T cicluri.Douǎ tehnici majore:Se iau solicitǎrile din coadǎ si se NACK pânǎ când una din cap nu va genera alte solicitǎri sau coada solicitǎrilor de iesire s-a relaxat (DASH).Se revine (fall back) la request-reply strict (Origin) – în loc de NACK se trimite un rǎspuns care spune sǎ se facǎ solicitarea direct la proprietar; mai bine
Home
5 1 3 4
6 2
P1
P2
189
deoarece NACK-urile pot conduce la multe încercǎri repetate si chiar la un blocaj de tipul livelock.Filozofia Origin:Fǎrǎ memorie (memory-less): nodul reactioneazǎ la evenimentele sosite utilizând numai starea localǎ.O operatie nu mentine resurse în indiviziune (partajate) în timp ce solicitǎ altele.
Blocaje de tipul livelock
Problema clasicǎ a douǎ procesoare care încearcǎ sǎ scrie un bloc. Origin rezolvǎ aceastǎ situatie cu starea busy si NACK-uri – primul care ajunge acolo progreseazǎ, celelalte sunt NACK-ed.Problemǎ cu NACK-urile. Utile pentru a rezolva conditiile de race (race conditions) ca mai sus. Nu la fel de bune când sunt utilizate pentru a usura competitia (contention) în situatiile înclinate spre deadlock – pot provoca livelock; de pildǎ NAK-urile de la DASH pot provoca situatii în care toate solicitǎrile sunt reluate imediat, regenerând problema în mod continuu; implementarea DASH evitǎ cazul prin utilizarea unui buffer de intrare suficient de mare.Nu existǎ livelock când de face back-off de request-reply strict.
Starvation (înfometare)
Nici o problemǎ la bufferizarea FIFO, dar sunt probleme mai timpurii, anterioare.Lista FIFO distribuitǎ (a se vedea mai departe SCI).NACK-urile pot produce înfometare (starvation).Solutii posibile:A nu face nimic; starvation n-ar trebui sǎ se întâmple prea des (DASH).Întârzieri aleatoare între reformularea solicitǎrilor.Prioritǎti (Origin).
Protocoale bazate pe cache, plate
Se utilizezǎ studiul de caz Sequent NUMA-Q. Protocolul este SCI (Scalable Coherent Interface) pe noduri, snooping în nod. De asemenea Convex Exemplar, Data General.Outline:Vedere generalǎ asupra sistemului.Coerenta stǎrilor SCI, reprezentare si protocol.Probleme de implementare.Caracteristici de performantǎ cantitative.
190
Vedere generalǎ asupra sistemului NUMA-Q
IQ-Link
PCII/O
PCII/O Memory
P6 P6 P6 P6
QuadQuad
QuadQuad
QuadQuad
I/O device
I/O device
I/O device
Mgm t. and Diag-nostic Controller
Utilizarea de SMP-uri de mare volum (high-volume) ca blocuri constructive.Bus-ul de Quad13 este de 532 MB/s split-translation in-order responses. Facilitǎti limitate pentru rǎspunsuri în afara ordinei pentru accesǎrile off-node.Interconectarea pe multimea nodurilor este un circuit unidirectional de 1 GB/s.Sistemele SCI mai mari sunt construite din mai multe circuite (rings) conectate prin punti.
NUMA-Q IQ-Link Board
13 Quad – un tip de tehnologie multi-core care include douǎ suporturi fizice (dies) dual-core separate. Dual-core înseamnǎ un CPU care include douǎ cores de executie complete pe fiecare procesor fizic instalate împreunǎ într-un pachet CPU. În aceastǎ constructie, cores 1 si 2 partajeazǎ un cache, cum se întâmplǎ si cu cores 3 si 4. Dacǎ cores 1 si 2 trebuie sǎ comunice cu 3 si 4, existǎ o comuicare externǎ, uzual prin frontside bus.
DirectoryController
NetworkInterface
(DataPump)
Orion BusInterface
(SCLIC)
(OBIC)
SCI ring in
SCI ring out
Quad Bus
RemoteCache Tag
RemoteCache Tag
RemoteCache Data
LocalDirectory
LocalDirectory
Network Size Tagsand Directory
Bus Size Tagsand Directory
Interftata la bus-ul quad.Administreazǎ datele decache la distantǎ si bus-ullogic. Controllerul de pseudo-memorie si pseudo-procesor.
Pompa interfatǎ-date,OBIC, controllerul deîntreruperi si etichetele(tags) de director.Administreazǎ protocolulSCI uzând de motoareprogramabile.
191
Joacǎ rolul de Hub Chip în SGI Origin.Poate genera întreruperi între quads.Cache la distantǎ (vizibil pentru SCI) cu dimensiunea blocului de 64 de bytes (32 MB, 4 cǎi). Cache-urile de procesor nu sunt vizibile (coerente snoopy si cu cache-ul la distantǎ – remote).Data Pump (GaAs) implementazǎ transportul SCI, împinge înafarǎ pachetele relevante.
NUMA-Q Interconnect
Un singur ring pentru oferta initialǎ de 8 noduri. Sistemele mai mari sunt ringuri multiple conectate prin LAN-uri.Ring SCI larg de 18 biti condus de Data Pump la 1 GB/s.Protocol de transport strict request-reply. Se mentine o copie a pachetului în bufferul de plecare pânǎ când vine ecoul (ack). Când se preia un pachet din ring, se înlocuieste cu un “ecou pozitiv”. Dacǎ se detecteazǎ un pachet relevant dar nu poate fi preluat, se trimite un “ecou negativ” (NACK). Pompa de date a expeditorului vǎzând returul NACK va relua încercarea automat.
NUMA-Q I/O
FibreChannel
PCI
Quad Bus
FibreChannel
PCI
Quad Bus
SCIRing
FC link
FC Switch
FC/SCSIBridge
FC/SCSIBridge
Masina este intentionatǎ pentru încǎrcǎri comerciale; transferul I/O este foarte important.Dispozitivele I/O adresabile global, ca la Origin. Foarte convenabil pentru misiuni/sarcini comerciale.Fiecare bus PCI este ca lǎrgime pe jumǎtate fatǎ de bus-ul memoriei si are o vitezǎ a ceasului pe jumǎtate.Dispozitivele I/O de pe alte noduri pot fi accesate prin SCI sau prin canal pe fibrǎ. I/O prin read-uri si write-uri pe dispozitive PCI, nu DMA. Canalul pe fibrǎ poate fi si el utilizat pentru a conecta NUMA-Q multiple sau la discul în indiviziune (partajat).
192
Dacǎ I/O prin FC-ul local esueazǎ, OS îl poate ruta prin SCI la alt nod si FC.
Structura directorului SCI
Plat, bazat în cache: lista cu partajarea este distribuitǎ în cache-uri. Noduri head, tail si middle, pointeri downstream (fwd) si upstream (bkwd). Intrǎrile în director si pointerii se depun în S-DRAM în IQ-Link board.Coerentǎ de nivelul 2 în NUMA-Q. Cache la distantǎ si SCLIC de patru procesoare aratǎ ca un nod pentru SCI. Protocolul SCI nu are în vedere câte procesoare si cache-uri sunt în nod. Mentinerea acestora coerente cu cache-urile la distantǎ se face prin OBIC14 si SCLIC15.
Ordine fǎrǎ deadlock?
SCI: serializeazǎ la Home, utilizeazǎ o listǎ de dependente distribuitǎ pe linie. La fel ca lista de partajare: solicitantul se adaugǎ pe sine la coada listei. Buffer nelimitat, prin urmare nu au loc blocaje deadlock. Nodul cu solicitarea satisfǎcutǎ o trece mai departe nodului urmǎtor din listǎ. Overhead spatial scǎzut si corect (fair). Dar latenta este mare – la read, alminteri ar putea rǎspunde tuturor solicitantilor deodatǎ.Schemele cu baza în memorie: utilizeazǎ cozi dedicate în nod pentru a evita solicitǎri blocante care depind una de alta. DASH: înaintare la nod dirty, îl lasǎ sǎ determine el ordinea – el rǎspunde solicitantului direct, trimite un writeback la Home; dar dacǎ linia rescrisǎ (written back) în timpul solicitǎrii înaintate este pe drum?
Scheme cu baza în cache
Protocol mai complex. De pildǎ, eliminarea unei linii din listǎ la înlocuire – trebuie coordonate si trebuie sǎ se obtinǎ excluderea mutualǎ pe pointerii nodurilor adiacente; ele pot fi în starea de a înlocui aceeasi linie a lor la acelasi moment.Latentǎ si overhead mai mari. Fiecare actiune de protocol impune ca mai multe controllere sǎ facǎ ceva. În sistemul bazat pe memorie, citirile (reads) sunt manipulate numai de Home. Trimiterea de invalidǎri serializatǎ de traversarea listei – creste latenta.Dar Standardul IEEE a adoptat schema. Convex Exemplar.
Verificarea
Protocoalele de coerentǎ sunt complicat de proiectat si de implementat. Încǎ mai complicat de verificat.
14 OBIC – Orion Bus Interface Controller15 SCLIC – SCI Line Interface Controller
193
Verificare formalǎ.Generarea de vectori de testare: aleator, specializati pentru cazurile comune si unghiulare, utilizând tehnici de verificare formalǎ.
Scheme de depǎsire (overflow) pentru pointeri limitati (limited pointers)
P0 P1 P2 P3
P4 P5 P6 P7
P8 P9 P10 P11
P12 P13 P14 P15
0
Over½ow bit 2 Pointers
(a) No over½ow
P0 P1 P2 P3
P4 P5 P6 P7
P8 P9 P10 P11
P12 P13 P14 P15
1
Over½ow bit 8-bit coarse vector
(a) Over½ow
Broadcast (DiriB)• Bitul de broadcast pus pe on la overflow.• Solutie rea pentru datele larg partajate citite frecvent.No-broadcast (DiriNB)• La overflow, un nou sharer înlocuieste unul din cele vechi (invalidate).• Solutie rea pentru date mult/larg citite.Coarse vector (DiriCV)• Se schimbǎ reprezentarea la un coarse vector, 1 bit la k noduri.• La un write, se invalideazǎ toate nodurile cǎrora le corespunde un bit.Software (DiriSW)• O trapǎ pentru software, se utilizeazǎ orice numǎr de pointeri (nu se pierde
din precizie). La MIT Alewife, 5 pointeri plus un bit pentru nodul local.• Dar apare un extra cost al procesǎrii intreruperilor prin software. Ovrhead
de procesor si ocupare. Latentǎ: 40 la 425 de cicluri pentru un read la distantǎ la Alewife, 84 de cicluri pentru 5 invalidǎri, 707 pantru 6.
Dynamic pointers (DiriDP)• Se utilizeazǎ pointeri dintr-o listǎ de hardware liber din portiunea de
memorie.• Manipularea este fǎcutǎ prin asistare hardware, nu software.• Exemplu: Stanford FLASH.
194
Câteva date
0
100
200
300
400
500
600
700
800
Loc us R oute C holes k y Barnes -H ut
No
rmali
zed
Inva
lidati
on
s
BN BC V
64 de procesoare, 4 pointeri, normalizati la full-bit-vector. Coarse vector destul de robust.Concluzii generale:Vectorul full bit este simplu si bun pentru scarǎ moderatǎ.Pentru scarǎ mare, mai multe scheme ar fi reusite dar nu existǎ încǎ un câstigǎtor detasat.
Reducerea înǎltimii: directoare rare (sparse)
Reducerea factorului M în produsul P*M.Observatie: numǎrul total de intrǎri ale cache-ului este mult mai mic decât cantitatea de memorie. Cele mai multe din intrǎrile memoriei sunt în repaos (idle) cea mai mare parte a timpului. Cache-ul IMB si 64 de MB pe nod implicǎ 98,5% din intrǎri sunt în repaos.Se organizeazǎ directorul ca un cache. Dar nu este necesar a dubla (backup) depozitul – se trimit invalidǎri tuturor partajantilor când o intrare este înlocuitǎ. O intrare pentru fiecare “linie”; fǎrǎ localism spatial. Patternuri de acces diferite (de la multe procesoare dar filtrate). Se permite utilizarea SRAM, poate fi pe drumul critic, necesitǎ asociativitate înaltǎ si trebuie sǎ fie suficient de largǎ.Se poate face un compromis între lǎrgime si înǎltime.
Coerentǎ cache snoopy ierarhic
Cel mai simplu mod: ierarhie de bus-uri; coerentǎ snoopy la fiecare nivel. Sau ringuri.Considerând bus-urile. Douǎ posibilitǎti:(a) Toatǎ memoria principalǎ pe bus-ul global (B2).
195
(b) Memoria principalǎ distribuitǎ între clustere.
P P
L1 L1
L2B1
P P
L1 L1
L2B1
B2
Main Memory (Mp)
(a)
P P
L2
L1 L1
B1
Memory
P P
L1 L1
B1
L2Memory
B2
(b)
Ierarhii de bus cu memoria centralizatǎ
P P
L1 L1
L2B1
P P
L1 L1
L2B1
B2
Main Memory (Mp)
Bus-urile B1 urmeazǎ protocolul snoopy standard.Necesitǎ un monitor pe bus-ul B1. Decide ce tranzactii sǎ circule înainte si înapoi între bus-uri. Actioneazǎ ca filtru pentru a reduce necesitǎtile de bandǎ de trecere.Se utilizeazǎ cache-ul de nivelul 2. Mai mare decât cache-urile de de nivel 1 (set associative). Trebuie sǎ mentinǎ incluziunea. Are bit dirty-but-stale pe
196
fiecare linie. Cache-ul de nivel 2 poate fi bazat pe DRAM deoarece la el merg putine referiri.
Exemple de referiri
P
L1
L2
Main Memory
B1
B2
P
L1
P
L1
L2
B1
P
L1
ld AA: dirty
A: dirty -stale
A: not-present
A: not-present
st B
B: shared
B:sharedB:shared
B:shared B:shared1 2 3 4
Cum sunt manipulate problemele (a), (b) si (c) între clustere.(a) Informatie suficientǎ despre stare în alte clustere în bitul dirty-but-stale.(b) Pentru a gǎsi alte cópii, broadcast pe bus (ierarhic); ele fac snooping.(c) Comunicare cu cópii executate ca parte a gǎsirii/localizǎrii lor. Problemele
de ordonare si de consistentǎ mai înselǎtoare (trickier) decât cele pe un singur bus.
Avantaje si dezavantaje
Avantaje:Extensie simplǎ a schemei cu baza pe bus.Ratǎrile (misses) pe memoria principalǎ cer o singurǎ traversare la rǎdǎcina ierarhiei.Plasarea datelor în indiviziune (partajate) nu reprezintǎ o problemǎ.Dezavantaje:Ratǎrile pe date locale (de pildǎ pe stivǎ) traverseazǎ tot asa ierarhia – trafic mai intens si latentǎ mai mare.Memoria la bus-ul global trebuie sǎ fie înalt intercalatǎ pentru câstig de bandǎ de trecere.
Ierarhii de bus-uri cu memorie distribuitǎ
P P
L2
L1 L1
B1
Mem ory
P P
L1 L1
B1
L2Mem ory
B2
197
Memoria principalǎ distribuitǎ între clustere.Clusterul este o masinǎ complet echipatǎ bazatǎ pe bus, memorie si celelalte.Scalare automatǎ a memoriei (fiecare cluster aduce ceva memorie cu sine).Plasamentul bun poate reduce traficul global pe bus si latenta – dar latenta la memoria depǎrtatǎ poate fi mai mare decât la rǎdǎcinǎ.
Întretinerea coerentei
Cache-ul de nivelul 2 lucreazǎ bine ca si înainte pentru datele alocate la distantǎ.Ce se poate spune despre datele alocate local care sunt cache-ate la distantǎ – nu intrǎ în cache-ul de nivelul 2.Este necesar un mecanism de monitorizare a tranzactiilor pentru aceste date – pe bus-urile B1 si B2.Urmeazǎ examinarea unui studiu de caz.
Studiu de caz: Gigamax
P
C
P
C
UCC UIC
UIC
Fiber-optic link
UIC
P
C
P
C
UCC UIC
Global Nano Bus
LocalNano Bus
Motorola 88K processors8-way interleavedm em ory
(64-bit data, 32-bit address,split-transaction, 80ns cy cles)
Tag RAM onlyfor rem ote datacached locally
Tag RAM onlyfor local datacached rem otely
Tag and Data RAMSfor rem ote datacached locally
(Bit seria l,4 by tes every 80ns)
(Two 16MB banks4-way associative)
(64-bit data, 32-bit address,split-transaction, 80ns cy cles)
Coerenta de cache la Gigamax
Un write pe bus-ul local este trecut la bus-ul global dacǎ: datele sunt alocate în Mp la distantǎ sau dacǎ sunt alocate local dar sunt prezente si în vreun alt cache la distantǎ.Un read pe bus-ul local este trecut pe bus-ul global dacǎ: este alocat în Mp la distantǎ si nu în cache-ul de cluster sau este alocat local dar este dirty în vreun cache la distantǎ.Un write de pe bus-ul global este trecut pe bus local dacǎ: este cu alocare în Mp localǎ sau este cu alocare la distantǎ dar este dirty în cache-ul local.Multe conditii race posibile (write-back pe plecare în timp ce solicitarea (request) pe sosire).
198
Ierarhii de ring-uri (exemplu KSR)
O retea de ringuri nu de bus-uri.Snoop pe solicitǎrile care circulǎ pe ring.Structura punct-la-punct de ring implicǎ: o bandǎ de trecere potential mai mare decât la bus-uri, o latentǎ mai mare.KSR este o arhitecturǎ cu memoria numai de cache (discutatǎ mai departe).
Ierarhii, un sumar
Avantaje:Simple de construit conceptual (se aplicǎ snooping recursiv).Se pot alǎtura si combina dupǎ solicitǎri în hardware.Dezavantaje:Banda de trecere la bisectie scǎzutǎ: strangulǎri cǎtre rǎdǎcinǎ – solutii patch: mai multe bus-uri/ring-uri la nivelele superioare.Latentele sunt adesea mai mari decât în retelele directe.
199
Toleranţa în latenţǎ
Tematica
Reducerea costului comunicaţieiProcesoare cu multifirFire multiple simultane
Reducerea costului cu comunicarea
Reducerea latenţei efective.Evitarea latenţei.Tolerarea latenţei.Latenţa comunicǎrii, latenţa sincronizǎrii, latenţa instrucţiunii.Comunicarea cu iniţierea expeditorului si cu iniţierea destinatarului.
Exemple
Pipeline pe comunicare
200
P1 trimite, NI bufferizeazǎ, NI trimite, etapǎ de comutare SW, …, etapǎ de comutare SW, NI receptioneazǎ, P2 primeste.Overhead-ul pentru send si timpul între comutatoare (SW) si overhead-ul pentru receive.
Tratarea toleranţei pentru latenţǎ
Transferul de date în blocuri. Combinǎ transferul multiplu în unul singur. La ce ajutǎ aceasta? Precomunicarea. Genereazǎ comunicarea înainte de a fi realmente necesarǎ (pregǎtire asincronǎ).Derulare ulterioarǎ unui eveniment comunicaţional deosebit. Se continuǎ cu lucrul independent în acelasi fir pe durata acelui eveniment deosebit (mai asincron).Multifir – gǎsirea de lucru independent. Comutarea procesorului la alt fir.
Un alt exemplu
Metode:Combinǎ mai multe expedieri în una singurǎ.Trimitere asincronǎ.Primire asincronǎ (furnizarea de buffer timpurie).
Cerinţe fundamentale
Extraparalelism.Lǎrgime de bandǎ.Memorie.Protocoale rafinate, sau instrumente automate, sau suport arhitectural.
201
De ce fire multiple?
Zidul de putere. Tranzistorii sunt gratuiti, dar puterea nu. Mai multe cores mai simple cu rata ceasului mai scǎzutǎ produc performante mai bune pe watt.Zidul ILP. Retur diminuat pe superscalare. Aplicatiile multifir fac performante mai bune pe fiecare cip.Zidul memoriei. Prǎpastia dintre timpul de acces la CPU si la memorie creste exponential. Firele multiple pot ascunde latenţa memoriei mai eficient decât un singur fir OOO.Toate “zidurile” conduc la fire multiple si la multicore.
Dincolo de proiectarea multicore simplǎ
Reducerea latenţei este importantǎ în proiectarea procesoarelor. Latenţele sunt variabile si dependenţele sunt complexe. Au loc conflicte de resurse. L1: 2-4 cicluri; L2: ~10 cicluri; DRAM: ~200 de cicluri ale ceasului.Latenţele în sistemele multiprocesor cu memorie în indiviziune (partajatǎ). Accesul la memorie de la distanţǎ costǎ mult mai mult decât cel local. Tranzacţiile de la distanţǎ în protocolul de coerenţǎ: de 10-100 de ori.Mai mulţi tranzistori disponibili. Core-urile simple pot avea probleme multiple.
Clasificarea multifirelor
Un fir sau intercalare sau granulatie grosierǎ?
202
Un fir: dependenţele limiteazǎ utilizarea hardware-ului.Fluxurile de instrucţiuni intercalate cresc utilizarea harware-ului.
Probleme multiple: un fir, sau IMT (Interleaved MultiThreading), sau BMT (Block MultiThreading)
Procesoare periferice CDC 6600 (Cray, 1965) [CDC 6600 Peripheral Processors (Cray, 1965)]
Prima structurǎ hardware multifir.10 procesoare I/O “virtuale”.Intercalare fixǎ pe pipeline simplu. Pipeline-ul are un ciclu temporal de 100 ns. Fiecare procesor executǎ o instructiune la 10 cicluri. Set de instructiuni bazate pe acumulator pentru a reduce starea procesorului.
203
Pipeline multifir simplu
Selectarea firului face ca pipeline-ul sǎ asigure bitii de stare corecti.Dacǎ nu existǎ fir gata pentru selectie, se insereazǎ unul fals (bubble).(I$ – Instruction cache; D$ – Data cache; IR – Index Register)
Costurile multifirelor
Apar software-ului (inclusiv sistemului de operare) ca procesoare multiple mai lente.Fiecare fir cere starea sa de utilizator proprie. GPR-urile (General Purpose Register), PC-urile (Program Counter).Necesitǎ, de asemenea, propria stare de control prin OS. Registru de bazǎ tabelar pentru paginile de memorie virtualǎ. Registre pentru manipularea exceptiilor.
HEP (Heterogeneous Element Processor)
Burdon Smith (proiectant) la Denelcor (1982).Masinǎ paralel. 16 procesoare. 128 de fire pe fiecare procesor. Registre în indiviziune (partajate).Pipeline de procesor. 8 etape. Fiecare fir pe o etapǎ. Comutare la alt fir, diferit, la fiecare ciclu al ceasului. Dacǎ coada de fire este vidǎ, se planificǎ o
204
instructiune independentǎ din ultimul fir. Nu este necesarǎ vreo precautie asupra dependentei între etape.
Arhitectura HEP în mai multe detalii
Componente de bazǎ:PEM (Processing Element Module) – modul de elemente de procesare.DMM (Data Memory Module) – modul de memorie pentru date.Retea de interconectare multietapǎ.Functionarea:Fiecare PEM are 2k registre. Fiecare PEM are un DMM. Orice PEM poate accesa orice memorie (toate fizice). Orice PEM poate accesa orice registru.Bit indicator plin/gol (F/E). Fiecare cuvânt are un bit F/E. Gol (E) înseamnǎ absenta datelor. Plin (F) înseamnǎ date valide. Citirea unui bit care indicǎ cuvânt de memorie gol produce o functionare rea sau o exceptie. De ce este utilǎ aceasta?
Ascunderea latentei instructiunilor
În fiecare ciclu este lansatǎ în pipeline o instructiune care apartine unui fir diferit.În cel ma rǎu caz, accesul la DRAM, poate dura mai multe cicluri (mai multe fire).Cum se pot echilibra CPU si memoria?
205
Horizon (proiect pe hâtie din 1988)
Componente principale:Pânǎ la 256 de procesoare.Pânǎ la 512 module de memorie.Retea internǎ 16x16x6.
Procesor:Pânǎ la 128 de fire active pe procesor.128 seturi de registre.Comutare contextualǎ pe fiecare ciclu de ceas.Permite accesǎri multiple deosebite ale memoriei pe fir.
Tera/Cray MTA (dupǎ 1990)
Arhitectura sistemului MTX (evoluat din MTA )
206
Procesorul MTA/MTX (de la Cray)
Sistemul MTA/MTX (de la Cray)
Procesorul MTA/MTX
Fiecare procesor suportǎ 128 de fire active.Registre cuvânt de stare 1x128.Registre ramurǎ-tintǎ 8x128.Registre GP 32x128.
Fiecare instructiune de 64 de biti face trei operatii.Cu memoria (M), aritmetice (A), aritmetice sau ramificare (C).3 câmpuri de explorare (lookahead) care indicǎ numǎrul de instructiuni independente urmǎtoare.
21 de etape pipeline.Fiecare etapǎ face comutare contextualǎ.
8 solicitǎri deosebite la memorie pe fiecare fir.
207
Pipeline în MTA
În fiecare ciclu, este generatǎ (issued) o instructiune a unui fir activ.Operatia cu memoria implicǎ cca. 150 de cicluri.Admitând cǎ un fir genereazǎ 1 instructiune la 21 de cicluri, si ceasul are o frecventǎ de 220 MHz;Care este performanta?
Comparatii MTA-2/MTX (Cray)
Câte fire poate suporta cel mai mare MTX?
208
Red Storm Compute Board (from Cray)
MTX Compute Board (Cray)
CANAL
Analiza compilatorului.Instrument static.
209
Dashboard
Multiplicarea matrice rarǎ – vector
C = A*B (dimensiuni nx1, nxm, mx1).Se memoreazǎ A în forma pachete-de-linii.A[nz], cu nz numǎrul de valori nenule, cols[nz] memoreazǎ indicele coloanei cu o valoare nenulǎ, rows[n] memoreazǎ indicele de început al fiecǎrei linii din A.
#pragma mta use 100 streams#pragma mta assert no dependencefor (i = 0; i < n; i++) {int j;double sum = 0.0;for (j = rows[i]; j < rows[i+1]; j++)sum += A[j] * B[cols[j]];C[i] = sum;}
Raportul canalului
| #pragma mta use 100 streams| #pragma mta assert no dependence| for (i = 0; i < n; i++) {| int j;3 P | double sum = 0.0;
211
4 P- | for (j = rows[i]; j < rows[i+1]; j++)| sum += A[j] * B[cols[j]];3 P | C[i] = sum;| }Parallel region 2 in SpMVMMultiple processor implementationRequesting at least 100 streamsLoop 3 in SpMVM at line 33 in region 2In parallel phase 1Dynamically scheduledLoop 4 in SpMVM at line 34 in loop 3Loop summary: 3 memory operations, 2 floating point operations3 instructions, needs 30 streams for full utilization,pipelined
Performante
N = M = 1.000.000.Valori nenule pânǎ la 1000 pe linie, distributie uniformǎ; nz = 499.902.410
timpul = (3 cicluri * 499902410 iteratii)/220000000 cicluri/s = 6,82 s.utilizare 96%
MTX Sweet Spot (dupǎ cum pretinde Cray)
Orice aplicatie paralel nepotrivitǎ cache-ului.Orice aplicatie a cǎrei performantǎ depinde de:
Tabele cu acces aleator (GUPS, tabele hash);Structuri de date relationale (arbori binari, grafuri relationale);Metode pentru masive rare (sparse), înalt destructurate;Sortare.
Câteva domenii de aplicare candidate:Site (meshes) adaptive;Probleme legate de grafuri (inteligentǎ, plierea de proteine, bioinformaticǎ);Probleme de optimizare (branch-and-bound, programare liniarǎ);
212
Geometrie pe calculator (graficǎ, recunoasterea de scene si urmǎrirea de scene).
Alewife Prototype (MIT, 1994)
Procesorul Sparcle (granulare grosierǎ)
Pârghii Sparc.Foloseste fiecare fereastrǎ registru ca ramǎ (frame).Firele încǎrcate sunt limitate de frames.Fiecare cuvânt de memorie are un bit plin/gol. J-structure: ridicǎ exceptie; L-structure: blocare/nonblocare.Comutare numai la latentǎ îndelungatǎ. Coerentǎ, acceseazǎ date vide.
213
Realizarea simultanǎ de multifire
Ideea principalǎ: partajarea flexibilǎ si dinamicǎ a unitǎtilor functionale de cǎtre fire.Observatia principalǎ: cresterea utilizǎrii implicǎ cresterea capacitǎtii de prelucrare (throughput).Schimbǎ pipeline-ul OOO. Multiple motoare de context si de regǎsire (fetch). Resursele pot satisface fire multiple sau superscalare.
Superscalar OOO sau SMT pipeline
Procesoare SMT (Simultaneous Multi-Threading)
Alpha EV8 (anulat). Superscalar de lǎrgime 8 cu suport SMT de 4 cǎi. Modulul SMT este ca 4 CPU cu cache-uri partajate si TLB-uri. PC-uri si registre replicate. Cozi de instructiuni partajate, cache-uri, TLB (Thread Local Buffer), predictori de ramificatie.Pentium4 HT (douǎ fire). CPU-urile logice partajeazǎ cache-urile, FU-uri (Functional Unit), predictori. Context separat, registre etc. Nici un suport de sincronizare (cum este bitul full/empty). Accesarea aceleiasi linii de cache declanseazǎ un eveniment costisitor.IBM Power5.Sun Niagara I si Niagara II (lectia lui Kunle)
214
SMT fatǎ-n fatǎ cu CMP multi-issue (Chip Multi-Processor)
Provocǎri la utilizarea mai bunǎ a SMT
Resurse partajate. Unitǎti de executie partajate (Niagara II are douǎ). Cache partajat.Coordonarea firelor. Resurse de consum rotitoare (spinning consume resources).Falsa partajare a liniilor de cache. Pot declansa evenimente costisitoare. Pentium4 HT o numeste eveniment Memory Order Machine Clear sau MOMC.
Suport arhitectural SMT
Care fir este de planificat? Firul cu minimum “ICOUNT” care contorizeazǎ numǎrul de instructiuni în pipeline-ul unui fir.Ce se întâmplǎ dacǎ un fir se rǎsuceste (is spinning)? Se utilizeazǎ o instructiune care “pasivizeazǎ (“quiescing”)” pantru a permite unui fir sǎ “doarmǎ” pânǎ când memoria îsi schimbǎ starea.
Loop:ARM r1, 0(r2) //load and watch 0(r2)BEQ r1, got_itQUIESCE //not schedule until 0(r2)changesBR loopgot_it:
Programarea SMT-Aware
Se divide intrarea si se foloseste un fir separat pentru procesarea fiecǎrei pǎrti. Exemplu, un fir pentru tuplele pare, unul pentru tuplele impare. Pas de partitionare explicit nenecesar.
215
Evitarea falsei partajǎri. Se partitioneazǎ iesirea si se utilizeazǎ locuri separate. Se pune laolaltǎ rezultatul final.Se utilizeazǎ mai bine cache-ul partajat. Se planificǎ firele pentru localismul de cache.Se utilizeazǎ un fir helper. Se preîncarcǎ datele în cache. Nu poate fi prea rapid sau lent (în special pe Pentium4 HT).
Performanta operatorului paralel (din Zhou, Cieslewicz, Ross, Shah, 2005)
Performanta operatorului paralel (din Zhou, Cieslewicz, Ross, Shah, 2005)
Sumar
216
Reducerea costului cu comunicarea. Reducerea overhead-ului. Suprapunerea calculului cu comunicarea.Lucrul multifir. Cresterea utilizǎrii hardware cu fire multiple. Cheia este a crea multe fire (exemplu: MTX suportǎ 1M fire).Fire multiple simultane (SMT – Simultaneous Multiple Threading). Se combinǎ multifirele cu superscalarele. Se combinǎ cu cores multiple. Mai trebuie lucrat pentru a utiliza bine SMT-urile.
217
Excluderea mutualǎ: ceva istorie, unele probleme si o urmǎ de sperantǎ
Andrew Birell si Michael Isard, Microsoft Research, Silicon Valley
Outline
Scopul: a crea programe concurente care sunt corecte, au performante bune, rǎmân la asemenea calitǎti cel putin câtiva ani.Discutia prezentǎ: ce este concurenta? Cum se ajunge la asa ceva? Ce-i rǎu în asta? Ce se poate face în loc?
Nu sunt incluse: crearea de concurentǎ, demonstratii, concurentǎ fǎrǎ memorie partajatǎ (de pildǎ, limbaje functionale, unele proiecte hardware).
Ce este concurenta?
Program care face mai multe lucruri deodatǎ.Douǎ cazuri:(A) Unul fals: asteptarea pentru a citi un fisier, se poate face între timp altceva.(B) Unul real: procesoare multiple care folosesc în indiviziune (partajeazǎ) resurse.Notǎ: un disc DMA este efectiv un procesor.Cazul (A) este mult mai usor: fǎrǎ intercalǎri arbitrare. Evenimente secventiale, sau fire non-preemptive. Discutia de fatǎ este, asadar, în cea mai mare parte dedicatǎ cazului (B), dar nu în întregime.
Dijkstra (versiunea din anii ‘60)
Abstractie: memorie partajatǎ de procesoare multiple. Se considerǎ aici numai cazul (B).Utilizarea instructiunilor read/write atomice (CACM 1965).Utilizarea ParBegin/Semaphore/P/V (CACM 1968).Foarte potine rezultate demonstrabile dar nici o abstractie de nivel mai înalt.Solicitǎ un doctorat de la o universitate bunǎ.
218
Hansen si Hoare (versiunea 1974)
Abstractie: procese secventiale si monitoare – (“variabile de conditie” pentru blocare în proces).Monitorul leagǎ excluderea mutualǎ de date. Grupe de programatori partajeazǎ datele în monitoare. Sistemul garanteazǎ excluderea mutualǎ pe fiecare monitor.Programatorul trebuie sǎ spunǎ ce trebuie protejat.Programatorul trebuie sǎ mentinǎ invarianti de monitor.Programatorul trebuie sǎ aseze programul în manierǎ ierarhicǎ.Se solicitǎ un doctorat (dar nu unul asa de bun).
Hoare (versiunea 1978)
Abstractie: transfer de mesaje pe masini de stare secventiale (procese de comunicare secventialǎ).Digresiune: dualitate (Lauer si Needham, 1979). Asociere (mapping) între programe de tip CSP (Communicating Sequential Processes) si de tipul Monitor.Lucreazǎ bine cu masini secventiale (dacǎ DAG – Data Analysis Group sau Data Authentication Group).Nu ajutǎ când se utilizeazǎ memorie partajatǎ.
Modula-2+ (1984)
Fire si lacǎte (mutex): nu monitoare.Abandonarea legǎturii între mutex si datele ei. Nici un fel de excludere mutualǎ fortatǎ.Retinerea problemei monitoarelor lui Hoare.SRC a scris un milion de linii de program concurent. A lucrat în mare parte. Noi aproape toti aveam doctorate.
Rememorare din anii 19xx
Solutia SRC (DEC Systems Research Center) era larg adoptatǎ.- OSF DCE (open software foundation distributed computing environment).- Posix.- Windows (într-o oarecare mǎsurǎ).- Java.- C.Este usor: a fi descris; a fi utilizat; a gresi.“Introduction to Programming with Threads”Cu precǎdere pe uniprocesoare; programele în majoritate lucreazǎ.
219
Reluare: clasicul fir/mutex/CV
VAR t = Fork(method, args)“method(args)” se executǎ într-un fir nou asincron.LOCK m {……}– TRY Acquire(m); …… FINALLY Release(m);UNTIL b DO Wait(m, cv);– UNTIL b DOTRY Atomically {Release(m); P(cv);}FINALLY Acquire(m);
Variantǎ: programe bazate pe evenimente
Sistemul invocǎ o metodǎ pentru “evenimentele” care sosesc.Evenimentele se executǎ pânǎ la finalul lor.“wait” este înlocuit de crearea evenimentului. De pildǎ: se initiazǎ o citire de fisier, apoi are loc iesirea din eveniment; mai târziu, evenimentul de fisier isprǎvit este manipulat (handled).În timpul asteptǎrii, masina de stare event-handler înlocuieste starea detinutǎ în stivele de fir.Dacǎ este concurent, este încǎ necesarǎ excluderea mutualǎ. Problemele sunt identice pentru clasicul fir/mutex/CV (Cross Validation).
Variantǎ: NT’s “Completion Port” (1996)
Sistemul mentine un pool de fire pregǎtite.Când un eveniment soseste, îl dirijeazǎ cǎtre un fir – supus conditiei de a nu depǎsi nivelul de concurentǎ dorit.Dacǎ firul se blocheazǎ, se distribuie un alt eveniment – se memtine nivelul de concurentǎ în timp real.Implementare de nivel jos, legat de planificator (scheduler).Mecanismul primar pentru programarea bazatǎ pe evenimente în Windows.Lasǎ problemele excluderii mutuale neatinse.
Si ce este rǎu?
Selectia manualǎ a excluderii mutuale. Default-ul este prea putin (si de aici races); easy fix este prea mult (stǎri deadlock sau blank).Proiectele nu creazǎ abstractii ierarhice. Nu poate decide si/sau mentine oridini de încuiere (locking) aciclice.“Compunerea” cere abstractii complet noi.Optimizǎrile “clever” nu sunt de mentinut si sunt adesea rele.“Stack-ripping” în programele bazate pe evenimente.
220
Problemele cu ordinea încuierii (locking)
Clasa “A”:FUNCTION f1() {LOCK a { … b.f4(); }FUNCTION f2() {LOCK a { … }; }
Clasa “B”FUNCTION f3() {LOCK b { … a.f2(); }FUNCTION f4() {LOCK b { … }; }
Abstractii si graful apelurilor.
Produse de dependentele ciclice.Abstractiile trebuie sǎ formeze un DAG (Directed Acyclic Graph). În general dificil. Dificil si de întretinut.
Probleme de compunere cu monitoare
Se considerǎ o clasǎ de tabel hash cu operatiile:h.insert(k,v);v = h.read(k);h.delete(k);
Se considerǎ un client care stratificǎ o operatie “move”:h.move(k, g) = {VAR v = h.read(k); g.insert(k,v); h.delete(k); }
Cum face clientul acest “move” atomic?
O solutie inteligentǎ: Double-Check Locking
Paradigma “initializeazǎ-la-prima-utilizare”VAR v = NULL;FUNCTION ensureInitialized() {IF (v == NULL) THEN {LOCK m {IF (v == NULL) THEN v = NEW Obj();};};}
221
Stack-Ripping
În versiunea 1.0 a bibliotecii:“h.read(k)” acceseazǎ structura de date in-memory. Codul eveniment non-blocking poate apela “h.read(k)” în sigurantǎ.În versiunea 2.0 a bibliotecii:“h” a devenit mare, utilizezǎ acum un arbore binar (B-Tree) pe disc. Patternul de apelare este acum “h.startRead(k)”, urmat mai târziu de un eveniment de finalizare (completion event) care livreazǎ valoarea. Se propagǎ la toti apelantii, si la apelantii lor, …În cel mai bun caz disruptiv; adesea o defectiune (bug) de performantǎ.
Tranzactii pentru Rescue?
Se marcheazǎ regiuni ale programului ca “atomice”.Sistemul promite:Tranzactii concurente executate ca si când ar fi secventiale. Tranzactiile sunt realmente executate în paralel dacǎ este posibil.Se aplicǎ la fel de bine si la memorie ca si la o bazǎ de date.Implementǎri software azi, hardware mâine (or so).Simplitate ademenitoare.Experientǎ extrem de limitatǎ cu aceastǎ utilizare.
Excluderea mutualǎ cu blocuri atomice
Firul A: ATOMIC {total = total – debit}Firul B: ATOMIC {total = total + debit}Se eliminǎ problemele legate de ordinea încuierii (locking) în sens larg.Compunerea/extinderea sunt facile.Programatorul decide încǎ relativ la a proteja anumite lucruri; codul cel mai simplu aduce încǎ protectia cea mai redusǎ.Iscusinta nu este încǎ explicitǎ si de aceea de nementinut (not maintainable).Nu ajutǎ stack-ripping în codurile bazate pe evenimente.
Distractie (fun): amestecul de cod ATOMIC cu cod neatomic
• Global: VAR x = 0; VAR shared = TRUE;• Thread A:
ATOMIC { x = 0; shared = FALSE };VAR temp = x;
• Thread B:ATOMIC { if (shared) { … ; x = 17; …… } }
222
În loc: programare în cea mai mare parte secventialǎ
Default pentru programele sincronizate corect, sistemul asigurǎ excluderea mutualǎ.Lasǎ sistemul sǎ facǎ optimizarea (în cea mai mare parte).Face optimizǎrile programatorului explicite si, se sperǎ, prin aceasta mentenabile.Câteva exemple: executarea interogǎrilor SQL, JavaScript parte din AJAX, Map/Reduce sau DRYad, AME (Automatic Mutual Exclusion).
Client-side JavaScript (în AJAX)
Programe pure bazate pe evenimente.Acces la latura de server prin XMLHttp: se initiazǎ solicitarea asincron, rǎspunsul soseste cândva mai târziu ca un eveniment.Interactiunile utilizatorului prin evenimente “onclick” (etc.).Ecranul obtine updatǎri numai între evenimente, adicǎ update-urile UI aratǎ atomic.Facil, lucreazǎ bine, dar are aplicabilitate foarte limitatǎ.
Dryad
Programatorul furnizeazǎ: programe de vârf (vertex) secventiale (de pildǎ în C++), graful fluxului de date care le instantiazǎ si le conecteazǎ.Sistemul furnizeazǎ: repartizarea vârfurilor pe procesoare (localǎ sau distribuitǎ), comunicare si sincronizare, tolerantǎ la defecte.Lucreazǎ frumos, pentru categoria de programe care se potriveste acestui pattern.Scaleazǎ extrem de bine.
AME (Automatic Mutual Exclusion)
Totul este în tranzactii (aproape totul).Executia = un set de “apeluri la metode asincrone”. “main” este apelul la metoda asincronǎ initialǎ. Programul creazǎ mai multe prin sintagma “ASYNC x.m(args)”. Apelurile ramificate se executǎ dacǎ si numai dacǎ tranzactia se angajeazǎ efectiv.Sistemul garanteazǎ cǎ executia este o serializare a apelurilor asincrone, apelurile asincrone se executǎ în paralel dacǎ este posibil.
223
AME: BlockUntil
Într-o metodǎ asincronǎ se poate spune “BlockUntil(b)”.O tranzactie se angajeazǎ numai dacǎ toate apelurile ei “BlockUntil” executate au argumentul TRUE.Altminteri, tranzactia este avortatǎ si se reia mai târziu.Sistemul este rǎspunzǎtor de planificarea înteleaptǎ a tranzactiei (expresia “b” este o bunǎ indicatie).
Exemplu în AME: citirea concurentǎ a unui fisier
• void OpenRead(FileName name) {• File f = AsyncOpenFile(name);• async StartRead(f);• }••void StartRead(File f) {• BlockUntil(f.Opened);• g_nextOffset = 0;• g_nextOffsetToEnqueue = 0;• for (int i = 0; i < 4; ++i) {• ReadBlock block = new ReadBlock;• block.offset = g_nextOffset;• block.file = f;• g_nextOffset += block.size;• f.StartAsyncRead(block);• async WaitForBlock(block);• }• }
224
• void WaitForBlock(ReadBlock block) {• BlockUntil(block.ready &&• g_nextOffsetToEnqueue ==• block.offset);• if (block.EOF) {• g_endOfFile = true;• } else {• g_queuedBlocks.PushBack(block);• block.offset = g_nextOffset;• g_nextOffset += block.size;• block.file.StartAsyncRead(block);• async WaitForBlock(block);• }• g_nextOffsetToEnqueue +=• block.size;• }
AME: Yield
Un mecanism prin care se permit angajǎri (commits) intermediate: într-o metodǎ asincronǎ se poate spune “Yield()”, angajeazǎ aceastǎ tranzactie si initiazǎ una nouǎ.Programul este acum un set de “fragmente atomice” si ele sunt cele care se serializeazǎ.Un mecanism general de a permite ca alte tranzactii sǎ progreseze. “Yield(); BlockUntil(b)” este ca “Wait(…)” în varianta cu monito(riz)are, dar totodatǎ rezolvǎ problema stack-ripping.
Douǎ exemple (separate) care folosesc “Yield”
• void RunZombie() yields {• Zombie z;• z.Initialize();• do {• Yield();• Time now = GetTimeNow();• BlockUntil(now - z.lastUpdate >• z.updateInterval);• z.lastUpdate = now;• MoveAround(z);• if (Distance(z, g_player) <• DeathRadius) {• KillPlayer();• }• } while (Distance(z, g_player) >=• DeathRadius);• }
225
• void DoQueue(Queue inQ,• Queue outQ) yields {• do {• Yield();• BlockUntil(inQ.Length() > 0 ||• g_finished);• while (inQ.Length() > 0) {• Item i = inQ.PopFront();• async DoItem(i, outQ);• }• } while (!g_finished);• }••void DoItem(Item i,• Queue outQ) yields {• DoSlowProcessing(i);• Yield();• outQ.PushBack(i);• }
AME: Unprotected
O metodǎ asincronǎ poate spune “UNRPOTECTED{…}”. Angajeazǎ tranzactia curentǎ, apoi executǎ codul non-tranzactional, apoi initiazǎ o nouǎ tranzactie.Utilizare pentru cod cu efecte laterale (de pildǎ I/O) sau pentru apelarea codului mostenire (legacy).Starea tranzactionatǎ trebuie sǎ fie triatǎ in/out.Defaultul mai bun: codul periculos este etichetat/marcat.
Sumar
Mecanismele de excludere mutualǎ existente sunt prea greu de utilizat.Tranzactiile sunt probabil de ajutor.Blocurile atomice nu ajutǎ suficient.AME: poate produce efecte corecte cu ceva asistentǎ din partea programatorului; este la un nivel destul de înalt pentru a permite multǎ optimizare.
Bibliografie
Articole istorice: http://birrell.org/andrew/concurrency/Dryad: http://research.microsoft.com/research/sv/dryad/Automatic Mutual Exclusion: http://research.microsoft.com/research/sv/ame/
226