74
UNIVERSITATEA "VASILE ALECSANDRI" din BACĂU FACULTATEA de ŞTIINŢE ALGORITMI PARALELI Şl DISTRIBUIŢI Note de curs COLECŢIA ŞTIINŢE Gloria Cerasela Crişan ® Editura ALMA MATER - BACĂU 2014

Algoritmi Paraleli Si Distribuiti Crisan 2014

Embed Size (px)

DESCRIPTION

in acest curs sunt prezentati algoritmi paraleli si distribuiti

Citation preview

  • UNIVERSITATEA "VASILE ALECSANDRI" din BACU

    FACULTATEA de TIINE

    ALGORITMI PARALELI l DISTRIBUII

    Note de curs

    COLECIA TIINE

    Gloria Cerasela Crian

    Editura ALMA MATER - BACU 2014

  • Univers i tatea Vasi lc Alecsandri" din Bacu Facultatea de ti ine

    Departamentul de Matemat ic , Informatic i ti inele Educa ie i

    Algori tmi paralel i i dis t r ibui i

    Note de curs

    U n i v e r s i t a t e a . V A S I L E A L E C S A N D R T

    din Bacu BiDlioteca

    C o t a IV

    l .ect. univ. dr. Gloria Cerase la Crian

    Universitatea din Bacau

    Bacu 2014

  • C U P R I N S

    Introducere 5

    1. L i m i t e l e p r o c e s r i i s e c v e n i a l e i n e c e s i t a t e a 7 p r o g r a m r i i p a r a l e l e s a u d i s t r i b u i t e

    1.1 Arhitectura de tip von Xeumann 7 1.2 Calcul concurent, calcul paralel, calcul distribuit 8 1.3 Caracteristicile aplicaiilor concurente 12 1.4 Metode de scriere a aplicaiilor concurente 16

    2. P a r a l e l i s m impl i c i t 19 2.1. Procesare de tip linie de asamblare 19 2.2. Procesare super-scalar 20 2.3. Procesare cu spaii mari de memorie 22 2.4. Folosirea ierarhiilor de memorii cache 23 2.5. Utilizarea datelor contigue 24 2.6. Software-ul i paralelismul implicit 25

    3 . P a r a l e l i s m exp l i c i t 2 7 3.1. Controlul n aplicaiile paralele 27 3.2. Comunicaiile n aplicaiile paralele 30

    4. R e z o l v a r e a u n e i p r o b l e m e pr in ca l cu l c o n c u r e n t 4 3 4.1. Graful de preceden 43 4.2. Metode de descompunere a rezolvrii unei probleme 46

    5. T e h n i c i e f e c t i v e de p a r a l e l i z a r e 4 9 5.1. Paralelizarea calculului numeric 49 5.2. Paralelizarea rezolvrii de probleme prin programare 54

    dinamic 5.3. Paralelizarea sortrii i a problemelor conexe 59

    6. P r o b l e m e a c t u a l e a le c a l c u l u l u i p a r a l e l 6 9 6.1. De la TSP la MDPVRPTW 69

    6.2. Potenialul actual al calculului paralel 75

    7. P r o b l e m e a c t u a l e a le c a l c u l u l u i d i s t r i b u i t 7 7

    Bibliografic 79

    3

  • I n t r o d u c e r e

    Complexitatea lumii n care trim, globalizarea i necesitatea deciziilor rapide i corecte au condus la dependena aproape total a societii actuale de sistemele de calcul i de comunicaii. Puine sunt zonele de pe glob lipsite de invazia" reelelor de calculatoare sau a telefoanelor mobile, dar influena indirect a tehnologiei actuale este omniprezent. De exemplu, zone nelocuite sunt cartografiate cu ajutorul sateliilor, modelele climatice descriu evoluia condiiilor atmosferice de pe ntregul glob, sistemele gco-staionarc permit localizarea cu o precizie uimitoare, chiar spaiul extraterestru este acum studiat.

    Sistemele de calcul individuale, reelele de calculatoare i dispozitivele de comunicaie sunt astzi ajutoare nepreuite, indispensabile societii in care trim, iar cei care contribuie la utilizarea i mai ales la dezvoltarea lor rezolv eficient problemele actuale i construiesc lumea de mine. De aceea, specialitii n tehnologie, calculatoare i informatic, bazndu-se pe solide cunotine, coopereaz pentru a oferi celor interesai produse, modele i soluii.

    Care sunt specializrile actualc oferite de universiti? Dezvoltarea fr precedent a metodelor i a mainilor electronice de calcul a condus la

    existena n Romnia a trei specializri de licen, care se ntreptrund, dar care ofer viziuni i compctcnc diferite:

    Tehnologia informaiei, care se refer n special la partea hardware, de arhitectur i reele de calcul;

    tiinfa calculatoarelor, care se ocup cu fundamentarea teoretic, tiinific a modelelor, realiznd legtura cu matematica i tiinele computaionale, axndu-se pe proiectarea algoritmilor i inteligena artificial;

    Informatica, axat pe software i legtura cu utilizatorii, care asigur prin limbajele de programare interfaa ntre problemele vieii reale, metodele teoretice de abordare a lor i resursele disponibile.

    Cui se adreseaz acest curs? Cursul Algoritmi paraleli i distribuii" arc drept scop familiarizarea studenilor cu

    programarea concurent, pentru a putea nelege i utiliza eficient sistemele moderne de calcul.

    Cursul de fa se adreseaz studenilor Universitii Vasile Alecsandri" din Bacu, att celor din anul III de la specializarea Informatic a Facultii de tiine, ct i celor de la specializarea Calculatoare i tehnologia informaiei de la Facultatea de Inginerie. Cuprinsul cursului urmeaz att fia disciplinei n vigoare, ct i suporturile de curs recunoscute pe plan mondial i cele predate la alte universiti din ar.

    5

  • Capitolul 1

    Limitele procesrii secveniale i necesitatea programri i paralele sau distribuite

    Modelul clasic de execuie a unei aplicaii const in procesarea sa secvenial, instruciune cu instruciune. Astfel, se consider c exist un indicator al instruciunii aflate n execuie, care parcurge aplicaia (nu neaprat in ordine), ncepnd cu prima instruciune. Instruciunea curent preia din memorie datele ncccsarc, Ic prelucreaz (pc procesorul sistemului de calcul), apoi realizeaz n memorie actualizrile ncccsarc (dac este cazul) i pred urmtoarei instruciuni care trebuie cxccutatc controlul unitii de procesare. Acest grup de activiti sc realizeaz pn cnd aplicaia se nchcic. Acest model descrie execuia unei aplicaii pc un sistem de calcul mono-procesor, realizat conform arhitecturii von Ncumann.

    1.1. Arhitectura de tip von Neumann

    Savantul american de origine ungar John von Neumann a propus n 1945 cel mai cunoscut model al unui calculator. Aceast descriere conceptual, realizat cnd tehnologia era la nivel de pionierat, este i astzi considerat una dintre cele mai importante etape n dezvoltarea tiinei calculatoarelor.

    Modelul descris n [13] (cunoscut mai trziu sub numele de modelul von Neumann sau arhitectura Princeton) stabilete urmtoarele caracteristici ale unui sistem de calcul:

    Calculatorul este compus din: memorie, unitatea aritmetico-logic, unitatea de control i periferice;

    in timpul execuiei, programul este stocat n memorie;

    La un anumit moment, memoria poate fi acccsat fie dc unitatea de control, fie de unitatea aritmetico-logic;

    Instruciunile programului sc execut secvenial.

    La momentul respectiv, sistemul dc calcul era considerat independent, procesorul (alctuit din unitatea aritmetico-logic i unitatea dc control) realiznd accesul la memorie. Pe lng faptul c instruciunile programului se execut secvenial, memoria nu poate fl accesat simultan de unitatea de control i de unitatea aritmetico-logic (adic nu se pot produce modificri n starea programului simultan cu transferul de date), deoarece exist o

    John von Neumann (1903-1957)

    7

  • singur magistral de date ntre memorie i procesor. O alternativ la modelul von Neumann este modelul Harvard, caracterizat prin tipuri diferite de memorii: unul pentru date (de tip citire/scriere) i altul pentru program (de tip read-only). Astfel, se pot executa simultan schimbri in starea programului i citiri/scrieri dc date. Modelul Harvard modificat permite ca memoria dedicat programului s fie tot de tip read/write. Acest model este utilizat de diveri productori de procesoare (familia ARM9 este un exemplu) sau este folosit pentru dispozitive specializate (microcontrolere).

    Dezvoltarea tehnologic ulterioar i necesitile tot mai mari de putere de calcul au evideniat limitele modelului von Neumann. astfel c au aprut diverse metode de cretere a vitezei de execuie a unui program. Dc exemplu, memoriile intermediare de tip cache ofer acces mai rapid la datele necesare execuiei unei instruciuni. Posibilitatea accesului rapid la date i dezvoltrile hardware au dus la realizarea n 2005 a primelor proccsoare dual-cores. carc sunt de fapt dou procesoare cu aspect fizic unitar, care posed un sistem de memorii cache. Au urmat apoi proccsoare din ce n ce mai complexe, cu arhitecturi care utilizeaz ierarhii din ce n ce mai dezvoltate de memorii cache. cum este cel din figura 1.

    UiJOWi l2.2C4e*6. u (JwerB.

    lli.MKB) 111 *4M. iiii^re LII > 64KB i

    | llaiUKB) lloOK>t [ llc.UKB j ii- L1C.W6. Licaere. LleiUl:6< | HoiMKBI "|

    Cote PSC Cot P2 Cc Cot Psj Cf5 Coe Cot KIC ' Fttsl FCF*:

    1 Ftrsj KMS FLfeT

    f j Figura 1. Arhitectura procesorului 8-cores AMD FX - Bulldozer [18]

    La un alt nivel arhitectural, aceeai problem a necesitii de resurse de calcul din ce n ce mai puternice, a fost rezolvat n anii 70 ai secolului trecut prin apariia calculatoarelor multi-proccsor: sisteme de calcul carc includ mai multe procesoare alturate, concctate prin magistrale i care partajeaz memorie comun, astfel nct manevra datelor s fie rapid. Supercalculatoarele actuale sunt sisteme de calcul multi-procesor cu caracteristici uimitoare fiind utilizate in cercetarea fenomenelor globale [28].

    Din momentul n care s-au putut cupla mai multe procesoare s-a deschis posibilitatea executrii pe un sistem de calcul a mai multor aplicaii simultan. De asemenea, conectarea calculatoarelor independente n reele a realizat efectiv modelul cuplrii prin magistrale externe plcilor de baz a mai multor sisteme independente de calcul. Programarea secvenial devine de acum o opiune, nu o cerin (impus de modelul von Neumann).

    Calea ctre programarea paralel sau distribuit a fost deschis dc dezvoltarea hardware, de explozia comunicaiilor electronice i de ncccsitilc n continu cretere ale societii.

    1.2 Calcul concurent, calcul paralel, calcul distribuit

    Sistemul de operare al unui calculator mono-procesor este pus n situaia de a coordona mai multe procese i a le executa n mod concurent. De exemplu, transferurile dc date dc la/ctre perifericele de intrarc-ieirc, execuia unor aplicaii, ctc. se realizeaz

    8

  • simultan din punctul dc vedere al utilizatorului, fr ca acesta s observe sincope. Pc dc alt parte, arhitectura mono-procesor impune execuia unei singure aplicaii la un anumit moment de timp. Metoda prin care se realizeaz aceste procese sc numete multitasking i nseamn partajarea timpului de lucru al procesorului n intervale disjuncte i alocarea acestor intervale diverselor proccsc aflate n execuie. Cum aceste intervale sunt foarte scurte, utilizatorul nu percepe schimbrile realizate de sistemul de operare, ci arc impresia c toate procesele se desfoar simultan.

    Calculul concurent este o caracteristic software, opus calculului serial, care permite execuia simultan a mai multor aplicaii. Dc exemplu, pc un procesor mono-nuclcu, calculul concurent sc poate realiza prin muhitasking (programele n execuie primesc intervale disjuncte de timp pentru accesarea procesorului; la fiecare moment dc timp un singur program se execut; la expirarea timpului alocat, starea programului n execuie se salveaz i se d controlul procesorului altui program; aceste schimbri se realizeaz des. astfel nct utilizatorul arc senzaia c toate programele sc cxccut n paralel). Pe un calculator multi-procesor, care deci este alctuit din mai multe procesoare care partajeaz memorie comun, calculul concurent se realizeaz efectiv sub forma calculului jxiralel (care este deci o proprietate hardware). Pc dc alt parte, n cazul reelelor de calculatoare, alctuite din sisteme independente, cu memorii independente, calculul concurent capt forma calculului distribuit (care este, de asemenea, caracteristic hardware).

    Dup modelul dc succes al sistemelor dc operare, care gestioneaz simultan zeci de proccsc. programatorii actuali ar trebui s cunoasc limbajele de programare care permit execuia n paralel. A scrie o aplicaie paralel este ins mult mai dificil dect a scrie o aplicaie secvenial, deoarece necesit nelegerea profund a problemei, descompunerea acesteia n sub-problemc care se pot rezolva n paralel, rezolvarea sub-problcmelor i compuncrca rezultatului problemei iniiale din soluiile sub-problemelor. Se poate ntmpla ca o aplicaie paralel s fie, n anumite cazuri, mai incficicnt dect aplicaia secvenial. Ctigurile aduse ns dc aplicaiile paralele cficicnte, proiectate i realizate pentru abordarea unor probleme complexe, ale vieii reale, sunt ns motive temeinice pentru ca programatorii s nvee limbajele calculului paralel i distribuit.

    Un exemplu n acest sens este studiul vitezei dc execuie a aplicaiei secveniale i a celei paralele utilizate pentru calcularea unui termen al irului lui Fibonacci. Vom nota cu Fib(n) termenul generic al irului lui Fibonacci; acesta sc pate calcula cu formula rccursiv:

    Fib{ 0) = Fib( 1) = I

    Fib{n) = Fib{n -1) + Fib{n - 2), Vn> 2

    Pentru a calcula n mod iterativ valoarea lui Fib(n) se poate folosi urmtoarea metod:

    Functionfin) if(n < 2) return 1 x - 1 y=l z = 2 k = 2 while (k < n)

    x=y

    9

  • k = k + I return z

    Aceast metod (iterativ) are avantajul c urmeaz ablonul matematic al construirii valorilor irului din aproape n aproape. Exist ns o alt metod, mai apropiat dc obiectul acestui curs. care face trecerea spre abordarea concurcnt a acestei probleme, i anume metoda recursiv:

    Function g(n) if(n < 2) return 1 return g(n - l)+g(n - 2)

    Aceast metod ncccsit cunotine mai avansate dc programare i este mai nceat (sau produce depiri dc memorie) la execuia n limbajul C, chiar pentru valori comune ale lui n. Avantajul ei este ns c se auto-apeleaz (pentru n > 2) cu factor dc multiplicare 2. Aceasta nseamn, de exemplu, c pentru aflarea lui #(8) se lanseaz o copie a sa care calculeaz g(7) i nc una pentru gsirea lui #(6). Fiecare dintre accstca lanseaz alte dou execuii, ctc.

    n tabelul 1 este prezentat modul n care lucreaz funcia g dac este apelat pentru valoarea n = 4. Coloanele tabelului arat modul de ncrcare pe stiv a copiilor Iui g, pn cnd se calculeaz valoarea g(4). Rndurile tabelului arat succcsiunea temporal a cxccuiei proccdurii g pentru valoarea 4. Apelul 1 este apelul procedurii, care lanseaz imediat pc stiv apelul 2, adic o copie a codului pentru valoarea n = 3 i apoi intr n ateptare (idle) pn cnd primete valoarea 3), adic 3. Apelul 2 lanseaz o nou copie a aplicaiei, pentru a calcula g(2), etc. Starea dc execuie este indicat prin culoarea de fundal gri; starea idle a unui anumit proces este indicat prin diagonalele trasate. Dc exemplu, apelul 3 ocup timp de 4 uniti dc timp o unitate dc procesare (ncepnd cu momentul 3), din carc jumtate st n ateptare (este idle). Se observ c pe stiv, pentru n = 4, vor exista cel mult 4 copii n execuie i c unele copii stau in ateptare destul de mult timp. astfel explicndu-se faptul c execuia lui g este mai nceat dect cea a l u i / pentru aceeai valoare a lui n.

    Apel 1 (main)

    Apel 2 Apel 3 Apel 4

    realizat de: - Apel 1 Apel 2 Apel 3 Momente de

    timp 1 8(4) 2 8(3) 3

    X 8(2)

    4

    X X g(D 5

    X X return 1

    6

    X 8(1)= 1

    7 X 8(0) 8 X return 1 9 X 8 ( 0 ) - 1 10 X rctum 2 11 8 ( 2 ) - 2

    10

  • Apel 1 (w ain)

    Apel 2 Apel 3 Apel 4

    realizat de: - Apel 1 Apel 2 Apel 3 12 \ 7 B(0 1 13 return 1 14 g ( l ) = l 15 / \ rctum 3 16 g(3) = 3 17 g

  • 5 lucreaz i 4 sunt n starea idle. Se observ de asemenea c apelul /;(4) necesit 12 uniti de timp pentru execuie, pe cnd apelul #(4) are nevoie de 26 uniti de timp i de cel mult 4 execuii simultane.

    La fel ca n tabelul 1, zonele gri reprezint intervalele de timp n care procesoarele sunt alocatc, iar zonele care au diagonale sunt intervalele de timp n care procesoarele stau in ateptare {idle). Observm ins c apelul 1 avanseaz i la momentul 2, cnd realizeaz lansarea apelului 3, spre deosebire de situaia prezentat n tabelul 1. cnd este deja in ateptare. i n acest caz se observ un dezechilibru al ncrcrii procesoarelor, dc exemplu ultimele 5 proccsc lucreaz 2 intervale de timp. pe cnd primul procesor este ocupat toate cclc 12 intervale de timp.

    Apel 1 (main)

    Apel 2 Apel 3 Apel 4 Apel 5 Apel 6 Apel 7 Apel 8 Apel 9

    fiul lui: - Apel 1 Apel 1 Apel 2 Apel 2 Apel 3 Apel 3 Apel 4 Apel 4 Momc nte de timp

    1 h( 4) 2 />(3) 3 h( 2) h(2) 4 X h( 1) AO) h{ 1) 5 X X X return 1 retum 1 h(0) retum 1 m 6 h( 1)=1 h( 1)=1 A(1)=1 retum

    1 retum

    1 7 X A(0)=1 h( O M 8 X retum 2 retum 2 9 h( 2 ) -2 h{iy=2 10 X rctum 3 11 12 rctum

    5 Tabelul 2. Evoluia temporal a apelului recursiv paralel h(4)

    1.3 Caracteristicile aplicaiilor concurente

    Arhitectura von Neumann reprezint modelul unui sistem dc calcul cu un singur element de procesare. Natura ns a evoluat dintotdeauna prin proccsc concurente. In accst sens pot fi considerate:

    dezvoltarea unui organism, alctuit din organe cu rol specific, care lucreaz conform scopului lor dar i n corelare cu celelalte organe;

    evoluia unui sistem social (sistem complcx, alctuit din indivizi oarecum asemntori care intcracioneaz, dc exemplu: un stup de albine, un banc de peti, o turm de animale, populaia unui contincnt, posesorii de conturi Facebook, etc.).

    Acest model este preluat n zilele noastre cu succes de reelele de calculatoare sau de telefonie mobil, dc sistemele intcrconectatc dc calcul care permit tranzaciile online, dar i

    12

  • dc supcrcalculatoarc, carc ofer n mod curcnl acces simultan la mii de procesoare. Calculul concurent nu este dect modelul actual a ceea ce natura face de milioane de ani: se dezvolt prin evoluii simultane ale ecosistemelor, populaiilor, evenimentelor geologice, etc. Tehnologia ne permite ca micarea planetelor, evenimentele climatice, migraiile psrilor, servirea clienilor la un magazin, conduccrca corporaiilor trans-naionale, tranzaciile bancare sau vizionarea filmelor s fie acum studiate sau realizate prin sisteme de calcul paralel sau distribuit. Globalizarea lumii n care trim este posibil i datorit dezvoltrii calculului concurent.

    Odat cu dezvoltarea tehnologic i apariia sistemelor de calcul care pot oferi acces simultan la mai multe uniti de procesare, cercettorii au realizat diverse clasificri ale acestor sisteme. Clasificarea urmtoare se refer la funcionalitatea sistemelor dc calcul, deci la modul n care aplicaia realizeaz prelucrarea datelor.

    Clasificarea Flynn (Michacl Flynn. 1966) Una dintre ccle mai vechi clasificri ale prelucrrilor clectronicc consider numrul de

    prelucrri care se pot realiza simultan i de fluxuri de date care se pot proccsa n acelai timp. Conform acestei clasificri, calculul electronic se poate realiza prin:

    Single Jnstruction Singe Data (S/SD) - proccsarc serial, aplicaia avanseaz instruciune cu instruciune, pe un singur fir de execuie, cu un singur set de date. Un astfel de exemplu este calculul pe un PC dotat cu un procesor mono-nucleu.

    Single Jnstruction Multiple Data (S/MD) - aplicaia avanseaz instruciune cu instruciune, pe un singur fir de execuie, procesnd simultan mai multe seturi de date. O astfel dc situaie este ntlnit n cazul procesorului vectorial, care manevreaz simultan datele, utiliznd un vector dc memorii. Astfel dc procesoare sunt utilizate cnd exist colecii dc date carc ncccsit acccai prelucrare; dc exemplu, procesarea grafic pentru jocuri.

    Multiple Jnstruction Single Data (MJSD) - aplicaia const din mai multe fire de cxccuic carc proccscaz acelai set dc date. Accstc arhitecturi nu apar foarte des n practic, unul dintre cazuri este calculul dc toleran zero la erori, cnd se prelucreaz pe mai multe fire dc cxccuic acclai set de date, n vederea mascrii (eliminrii) erorilor.

    Multiple Jnstruction, Multiple Data (M/MD) - aplicaia const din mai multe fire de execuie care proceseaz mai multe seturi de date. n general, un fir de execuie este alocat unui nucleu. Acest tip dc procesare este realizat de marea majoritate a supcrcalculatoarclor din Top 500 actual [28]. La rndul lor, procesrile de tip MIMD pot fi:

    O Single Program, Multiple Data (SPMD) - cnd copii ale aplicaiei se execut pe mai multe seturi de date, fiecare proces avnd evoluie proprie (deoarece seturile diferite de date conduc la trasee diferite n execuie, controlate de instruciuni i f , case/switch. while, do-while sau for). Accstca sunt cel mai des ntlnite situaii, cnd codul unei aplicaii dcscric procesrile fiecrui fir de execuie,

    o Multiple Program. Multiple Data (MPMD) - cnd o aplicaie dc tip mater lanseaz pe alte uniti de procesare (nuclci - cores) alte aplicaii dc tip slave.

    13

  • Aplicaiile concurente sc pot evalua folosind clasicele msuri software, destinate tuturor categoriilor de aplicaii. Aceste msuri se pot clasifica astfel:

    msuri cantitative: numr de linii dc cod. mrimea (n bii) a fiierului cxccutabil. viteza dc execuie, numrul dc orc dc programare necesare proiectrii, dezvoltrii i testrii, etc.;

    msuri calitativc: corectitudine (rezolv problema propus), completitudine (rezolv toate cazurile posibile), scalabilitatc (capabil de a procesa chiar i volume de date mai mari dect cele ateptate, sau se poate uor dezvolta astfel nct s le accepte), mentcnabilitate (uurina in exploatare i actualizare), etc.

    Msurile software specificc programelor care se avanseaz simultan pc mai multe fire dc cxccuic se refer att la caracteristicile de consum total ale resurselor implicate (timp dc procesare, numr de procesoare), ct i la economiile realizate prin utilizarea acestora (ct timp se ctig dac utilizez in paralel mai multe procesoare, dect dac folosesc un singur procesor). In continuare sunt prezentate cteva msuri specifice calculului concurent.

    Acceleraia (speed-up) este raportul dintre timpul dc cxccuic pc o singur unitate de procesare i timpul de execuie pe n astfel de uniti. Este o msur a-dimensional, care n mod normal este supraunitar - dac aplicaia are o acceleraie subunitar. atunci varianta paralel nu sc justific, deoarccc necesit un timp de execuie mai mare dect varianta serial. Dac sc noteaz:

    T(n) timpul ncccsar execuiei pe n uniti dc procesare (nuclci), atunci acceleraia are expresia:

    T(n) in cazul unei descompuneri ideale pe n fire dc cxccuic, fr costuri suplimentare

    datorate comunicaiilor i dac cele n fire de execuie reuesc fiecare s se ncheie n timpul rp) . . . . ,

    , atunci acceleraia este n. Din formula acceleraiei sc dcducc deci c o valoare teoretic

    maxima a acestei mrimi este //. Eficiena (jiarallel ejficiency) este o msur derivat din acccicraic, fiind raportul

    dintre accasta i numrul de procesoare utilizate:

    n n baza observaiei anterioare, deducem c eficiena unei aplicaii concurente are

    ntotdeauna o valoare subunitar, iar eficiena unei aplicaii concurente ideale este 1.

    Echilibrul (balance) sc refer la o caracteristic general a cxccuici pe diverse uniti de procesare (poate fi i timpul necesar execuiei), msurat prin valorile qt 1

  • Din punct de vedere constructiv, calculatoarelor paralele li se pot aplica diverse msuri: numrul de nuclei, memoria RAM. consumul de energie, viteza de procesare. O msur a vitezei de procesare ieit din uz este numrul de instruciuni pe secund. Cum aceste instruciuni pot ncccsit intervale dc tip dc lungimi diferite pentru execuie, acum se utilizeaz numrul de operaii in virgul mobil pe secund (floating poinl operations per second-FLOP/s).

    Multiplii unitii de msur FLOP/s sunt: 1 kFLOP/s - IO3 FLOP/s (kilo) 1 MFLOP/s = IO6 FLOP/s (mega) 1 GFLOP/s - 10" FLOP/s (giga) 1 TFLOP/s - IO12 FLOP/s (tera) 1 PFLOP/s= 10''FLOP/s (peta) 1 EFLOP/s = IO18 FLOP/s (exa) 1 Z FLOP/s = IO21 FLOP/s (zctta) 1 YFLOP/s = IO24 FLOP/s (yotta) Procesoarele actuale pot realiza 4 operaii in virgul mobil pe unitate dc ceas (clock

    cvcle). Un procesor de 2.5 GHz cu 4 nuclei poate realiza deci 4-4-2,5 GFLOP / s = 40 GFLOP / s.

    Dezvoltarea tehnologic a fost surprins n anii '60 de o observaie empiric, al crei adevr s-a meninut pn acum. Acest enun este cunoscut ca Legea lui Moore (Gordon Moore, 1965) i trebuie neles ca o constatare empiric observat a Fi adevrat din 1965 i pn azi:

    Performanele procesoarelor (msurate prin numrul de tranzistoare care formeaz un circuit integrat) se dubleaz la fiecare 2 ani.

    Legea lui Amdahl (Gene Amdahl, 1967) Acceleraia aplicaiilor paralele are o cretere sub-liniar odat cu creterea numrului de procesoare. Presupunem o aplicaie concurent oarecare, pentru carc notm T(\) = a + b, unde a

    este intervalul de timp ncccsar execuiei prii nc-paralelizabile i b este timpul ncccsar cxccuici prii paralclizabile pe o singur unitate de procesare. nlocuind aceste valori n formula acceleraiei, obinem:

    v ' b a + -

    n n ca/ul unui echilibru perfect i dac nu sunt ncccsare alte instruciuni pentru

    repartizarea, controlul firelor de execuie, colectarea datelor, ctc.. atunci pe n uniti dc b

    procesare se poate cxccuta accast parte a aplicaici n timpul a + ~ . Trecnd la limit, avem n c:

    ,. c, , a + b hmS(n) = m-*m (j Cum accast valoare este o constant carc depinde de aplicaia n cauz. nseamn c

    exist un prag al numrului dc procesoare ncepnd de la care adugarea de noi procesoare nu mai determin o mbuntire semnificativ a aecclcraici. Aceast concluzie se menine chiar n cazul unei aplicaii pcrfcct echilibrate.

    15

  • Legea lui Gustafson (John Gustafson. 1988) Pe o configuraie hardw are dat (numrul de procesoare n fixat) se pot scrie aplicafii paralele care au acceleraie liniara.

    Cu notaiile anterioare avem c:

    lim S(n) = lim - = n b-*x b-*x a 1

    +

    b n Deci dac partea paralelizabil este suficicnt de mare, atunci acceleraia este aproximativ egal cu numrul de procesoare. Legea lui Gustafson specific o regul simpl: dac vrem s ne apropiem dc eficiena ideal a unei aplicaii paralele, partea paralelizat trebuie s fie ct mai consistent.

    Gordon Earl Moore (1929 - ) Gene Myron Amdahl (1922 - ) John Gustafson (1955 - )

    1.4 Metode de scriere a aplicaiilor concurente

    Paralelizarea aplicaiilor seriale deja scrise necesit o nelegere profund a problemei rezolvate serial, pentru a obine o aplicaie eficient. Cum la momentul scrierii codului nu sc cunoate arhitectura pe care se va executa, programatorul ar trebui s aleag o metod carc s funcioneze ct mai eficicnt n ct mai multe cazuri, cu diverse date de intrare. Una dintre provocrile calculului concurent este proiectarea firelor dc cxecuie astfel nct acestea s lucreze echilibrat (conform definiiei din subcapitolul anterior).

    Un exemplu n acest sens este modul n care se adun n paralel, pe un multi-calculator cu 4 procesoare, 16 valori numerice, stocate ntr-un vector a(i)lii{l6. Presupunem c datele sunt stocate pc fiecare procesor. Dac s-ar mpri vectorul n 4 zone: {fl(l),a(2),a(3),fl(4)}, {a(5),a(6),a(7),a(8)}, {

  • adunarea distribuita eficient accstor valori va ine cont i dc timpul ncccsar comunicaiilor. O metod eficient (din punctul de vedere al ncrcrii procesoarelor) este prezentat n tabelul 3. Prima dat se realizeaz 8 transferuri simultane de date ntre vecini, la finalul crora, de exemplu, procesorul I stocheaz suma valorilor a( I) i a(2). specificat n tabel pe primul rnd ca 0(1-2). La pasul urmtor lucreaz doar 4 procesoare care trimit valoarea stocat ctre un procesor aflat la distan 2 (de exemplu, procesorul 3 trimite valoarea 0(3-4) ctre procesorul I. care dup recepionare va aduna propria valoare stocat i deci va cunoate valoarea a( I -4).

    Dac la pasul 1 se realizeaz 8 transferuri ntre vecini. nseamn c pe reea se vor nregistra 8 transferuri simultane dc date. Considernd costul comunicrii unei valori intre dou calculatoare din reea ca fiind numrul de calculatoare prin carc trccc valoarea transferat, atunci costul realizrii pasului 1 este 8. la fel ca i n etapa a doua. Pasul 3 const n transferul valorilor stocatc pe calculatoarele 5 i 12. cu cost total 8. iar n ultima etap doar calculatorul 16 realizeaz o concxiunc dc cost 1 cu sistemul 1. vecinul su, prin circularitatc. Accast metod ncccsit deci 4 uniti dc timp i are cost 25.

    pasul 0 pasul 1 pasul 2 pasul 3 pasul 4 0(1) a( 1-2) fld-4) a{ 1-8) 0(1-16) (2) t T a(3) 0(3-4) 0(4) t T a

  • Capitolul 2

    Paralel ism implicit

    Arhitectura sistemului de calcul poate fi orientat prin diverse dezvoltri tehnologice spre creterea vitezei de procesare. Aceste metode fizice de paralelizare alctuiesc facilitile de paralelism implicit, oferite dc caracteristicile resurselor dc calcul utilizate. In contrast, programarea concurent, adic specificarea prin program a proccsclor care sc desfoar simultan reprezint paralelismul explicit, care va fi abordat n capitolul urmtor.

    Paralelismul implicit speculeaz noile faciliti tehnologice; acum procesoarele nu mai execut secvenial instruciunile unui program, ci exist diverse metode prin care acestea se pot suprapune temporal. Accste metode sunt:

    procesare de tip linie de asamblare procesare super-scalar folosirea procesoarelor care manevreaz cuvinte lungi ierarhiile de memorii cache utilizarea datelor contigue (ine de programare, dar folosete stocarea la adrese

    fizice a datelor).

    2.1. Procesare de tip linie de asamblare

    Procesarea de tip linie de asamblare (pipelining) se refer la fragmentarea instruciunilor cxccutatc pc un procesor, astfel nct s fie posibil cxccuia lor simultan, asemntor lucrului pc o linie de asamblare. La nivel teoretic, se consider c o instruciune se realizeaz pe procesor n 5 faze: instruction fetch (1F - ncrcarea instruciunii), decode (D - traduccrc), data fetch (DF - ncrcarea datelor) execute (E - proccsarc cfcctiv) i write-back (WB - scriere a rezultatului n memorie). Practic ns, ficcare procesor are propriile faze de lucru. De exemplu, AMD FX are 15 faze pentru procesarea valorilor ntregi.

    Executarea unei aplicaii, dac operaiile de manevr a datelor permit, s-ar putea desfura la nivel optim ca n figura 2 (se execut integral 6 instruciuni n 10 uniti de ceas).

    Timpul 0 1 2 3 4 5 6 7 8 9

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    Figura 2. Dezvoltarea temporal pentru o proccsarc ideal dc tip pipeline

    n situaia ideal prezentat n figura 2 se observ c procesoarele modeme pot executa n paralel mai multe faze din instruciuni diferite (n intervalul 5 sunt deja n execuie

    19

  • toate fazele, cte una din primele 5 instruciuni). Aceast situaie nu apare mereu n realitate, deoarece pot aprea ntrzieri. De exemplu:

    dac instruciunea curent arc nevoie de ncrcarea unor date (faza DF) carc la momentul respectiv sunt actualizate printr-o faz dc WB a unei instruciuni anterioare. n acest caz ateptarea este obligatorie.

    dac instruciunea din care se dorete cxccuia fazei IF face parte dintr-o instruciune alternativ (if-then-else), dar nc nu s-a produs faza E din aceasta, deci la momentul respectiv nu se cunoate pe care ramur avanseaz aplicaia. n acest caz se pot utiliza resurse suplimentare pentru ncrcarea simultan a ambelor ramuri ale instruciunii i f , iar cnd se cunoate care ramur este cea aleas, se renun la cealalt. Accast rezolvare se utilizeaz n mod curent, deoarece situaia apare des n programare - aproximativ 15% din instruciunile unei aplicaii sunt instruciuni alternative. Sub numele dc descompunere speculativ, aceeai idee este tratat n subcapitolul 4.2.

    Proccsarca dc tip pipeline este numit i procesare scalar, dcoarccc permite cretcrea vitezei dc procesare liniar cu creterca numrului dc faze din instruciuni diferite care se pot executa simultan.

    2.2. Procesare super-scalar

    O alt posibilitate dc realizare a paralelismului implicit este construcia unor procesoare super-scalare, prin adugarea de resurse suplimentare. De exemplu, prin utilizarea a dou uniti aritmetico-logice, se poate considcra c un procesor poate lucra simultan cu dou linii dc execuie (ca n figura 3), controlate de o unitate specific, numit dispecer.

    Timpul 0 1 2 4 5 6 7 8 9

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    IF D DF E WB IF D DF E WB

    Figura 3. Dezvoltarea temporal pentru o procesare ideal cu dou fluxuri pipeline

    Acest tip de procesare asigur, n cazul ideal, o vitez dubl fa de proccsarca pc un singur flux pipeline (n exemplul din figura 3 se execut integral 12 instruciuni n 10 uniti de ceas). Exemplul urmtor arat c modul de programare este esenial pentru viteza efectiv de execuie [7].

    S presupunem c dorim s adunm 4 valori ntregi, stocate fiecare pe 4 octei, n variabilele a, b, c i d, aflate n memorie nccpnd cu adresa hexazecimal 1000. Prima

    20

  • versiune a codului in limbaj de asamblare realizeaz ((a + />) + (
  • Dc accast dat, perechea de instruciuni 1 i 2 nu se mai poate lansa la acelai moment, deoarccc sunt dependente. La fel se ntmpla cu perechea urmtoare; instruciunea 5 ateapt ncheierea instruciunii 4 pentru a intra n faza data fetch. Instruciunea 6 se lanseaz imediat dup lansarea instruciunii 5 i astfel versiunea 2 propus mai sus necesit 11 uniti de timp.

    O alt posibilitate pentru adunarea celor patru valori este prezentat n continuare: se utilizeaz un singur registru de memorie, folosind adunri succesive: (((a + b) + c) + d). in acest ultim caz, figura 6 prezint modul de cxccuic.

    Versiunea 3 1 load Rl, 81000 2 add Rl, 91004 3 add Rl, 01008 4 add Rl, 8100C 5 store Rl, 82000

    11

    WB

    in acest caz, toate instruciunile sunt dependente, astfel c ntrzierile se propag i se amplific. Acest al treilea mod dc rezolvare ncccsit 12 uniti de timp, fiind astfel cel mai ineficient din acest punct dc vedere, dar este cel mai cficicnt din punct dc vedere al memoriei utilizate pe procesor (un singur registru).

    Discuia celor trei situaii de mai sus arat importana cunoaterii arhitecturii pe care se execut aplicaia i utilizarea eficient a accstcia.

    2.3. Procesare cu spaii mari de memorie

    O alt metod de realizare a paralelismului implicit este folosirea procesoarelor cu spaii mari de memorie alocate pentru instruciuni (very long instruction word processors -VLIWprocessors). Procesoarele au evoluat dc la cuvinte de memorie de 2 octei (16 bii) la cele de 4 octei (32 de bii), iar cele actuale utilizeaz cuvinte de memorie de 8 octei (64 dc bii). n cazul n carc instruciunile au cel mult 4 octei, arhitecturilc modeme pot deci prelua simultan din codul obicct (rezultat la compilare) cte dou instruciuni. Aceasta este ns o metod static, dcoarece la compilare se produce mpachetarea grupurilor de cte dou instruciuni carc sc pot executa n paralel.

    Metoda nu conduce deci la o njumtire a timpului de proccsare, deoarece: nu toate instruciunile se pot mpachcta n grupuri de cte dou; timpul de execuie al grupului este egal cu cel mai mare dintre timpii de execuie

    al instruciunilor din grup.

    Figura 6. Dezvoltarea 3 cu 2 fluxuri pipeline

    22

  • 2.4. Folosirea ierarhiilor de memorii cache

    Cea de-a patra metod dc paralelizare implicit const in utilizarea ierarhiilor de memorii cache, care permit scderea timpului de transfer al datelor din memoria principal (RAM) n memoria intern (regitri), pentru a fi proccsatc dc programul n execuie. Caracteristicile sistemului de calcul care sunt implicate n viteza dc transfer a datelor ctre procesor sunt: latena (timpul de la lansarea cererii i pn la nceperea sosirii datelor) i lrgimea de band (raportul dintre cantitatea de date i timpul necesar ajungerii lor n memoria intern). n situaia n care nu sunt utilizate memorii intermediare dc tip cache, datele aflate n RAM pot ntrzia major procesarea, aa cum rezult din urmtorul exemplu.

    Exemplu. Presupunem un procesor cu frecvena de 1 GHz. care poate executa 4 instruciuni pc ciclu dc ccas. conectat la o memorie RAM cu laten de 100 ns. Frecvena dc 1 GHz - 10" Hz conduce la execuia unei instruciuni n IO"9 s = 1 ns (nanosccund). Pentru adunarea a doi vectori sc cxccut n mod repetat codul urmtor:

    1 load Rl, e a(i] 2 load R2, 9 b[i) 3 add Rl, R2 4 store Rl, 0 c[i]

    Dac presupunem c grupul format din cele patru instruciuni se lanseaz concomitent, atunci primele dou se ncheie dup 100 (latena) + 1 (execuie) = 101 ns. Adunarea se ncheie dup 102 ns (dup cc se cunosc termenii adunrii mai este nevoie de 1 ns pentru a se afla suma lor), iar stocarea n RAM a valorii obinute mai are nevoie de nc 101 ns (1 ns pentru execuie i 100 ns transferul sumei n RAM). n final, valoarea variabilei c[lj ajunge n RAM dup 203 ns, iar procesarea pentru aflarea valorii c[2) poate nccpe dup ce prima instruciune s-a nchciat, adic dup 101 ns. Registrul Rl este blocat dc instruciunile corespunztoare valorii c/7/, deci instruciunea

    load Rl, 9 a[2]

    sc execut n intervalul 203-304 ns. Dei instruciunea

    load R2, 8 b[2)

    se execut mai devreme, dcoarccc registrul R2 este eliberat la momentul 102 ns. valoarea din R2 ateapt depunerea valorii variabilei a[2] n Rl i deci instruciunea

    add Rl, R2

    sc execut n intervalul 304-305 ns. Transferul valorii a[2] + b[2) sc facc n intervalul 305-406 ns. n concluzic, execuia repetat a blocului dc 4 instruciuni se face n blocuri de 203 ns, deci timpul total nccesar este de n 203 ns n cazul n care vectorii au cte n componente.

    Dintre cele 4 instruciuni necesare aflrii unui element din vectorul-sum. trei (prima, a doua i a patra) necesit 101 ns pentru execuie i cea de-a treia se execut ntr-o nanosecund; dc asemenea, primele dou se pot executa concomitent, ns ultimele dou se cxccut secvcnial dup ce primele dou s-au nchciat.

    Dac ns se folosesc memorii cache, care pot stoca integral cei trei vectori i dac presupunem c lrgimea de band permite transferul datelor ntr-o singur faz, atunci prima

    23

  • dat se aduc toate datele de intrare n cache (100 ns), apoi se calculeaz toate valorile vectorului c (aproximativ n ns deoarece se pot executa 4 instruciuni in paralel, iar aflarea unei valori din vectorul c necesit tot 4 instruciuni) i n final toate valorile se trec in RAM n 100 ns. in accst caz timpul total este dc n + 200 ns. dc aproximativ 200 de ori mai mic dcct n cazul n carc nu sc utilizeaz memorii cache.

    2.5. Utilizarea datelor contigue

    Creterea vitezei dc proccsare a datelor prin metode implicite sc mai poate realiza prin eliminarea accesrii datelor stocate la distan (stride elimination). Aducerea datelor din memoria secundar (de exemplu, hard-disc) n memoria principal (RAM) nu se face individual, ci prin intermediul paginilor de memorie - un grup de adrese adiacente in memorie, care include i valoarea cerut de procesor Un grup de date alturate in memorie se numesc date contigue (contiguous data). De obicei o pagin de memorie are 4 kB i aceast metod a fost implementat deoarece s-a considerat c, de obicci, aplicaiile folosesc date stocate n zone alturate. Acest principiu poate fi utilizat n reducerea timpului de procesare a matricelor mari. Programatorii nu dau mare importan ordinii de parcurgere a unei matricc, dar n cele ce urmeaz vom vedea c n cazul unor matrice mari. aceasta are impact major asupra timpului dc cxccuic.

    Exemplu. Considerm c matricea A arc dimensiunea (1000, 1000) i c este ncccsar o aplicaie carc s genereze un vector b cu 1000 dc componcntc, fiecare dintre accstca fiind suma elementelor din A situate pe cte o linie.

    Versiunea 1 dc rezolvare a problemei este: fo r ( i - 0; i < 1000; i++)

    b [ i ] - 0; fo r ( i = 0; i < 1000; i++)

    f o r ( j - 0; j < 1000; j+*) b l j ) +*a [ j j [ i l ;

    n acest caz. pentru i fixat, la fiecare exccuic a ultimei instruciuni, este adus n RAM o alt pagin de memorie, deoarece, dup cum se tie, matricele se stochcaz pe linii. Dac tipul dc date este de 4 octei, atunci o pagin stocheaz 1000 de valori. Dei sunt adui de fiecare dat cte 4 kB de date, este utilizat doar o singur valoare - i anume a [ j ] [ i ) . Pentru a sc executa complet structura for interioar sunt necesare deci 1000 de transferuri din hard-disc n RAM.

    O simpl interschimbare a celor doi indici conduce la:

    Versiunea 2 fo r ( i = 0; i < 1000; i++)

    b [ i ] - 0; fo r ( i = 0; i < 1000; i++)

    for b [ i ] += a f i l 1 3 ] ;

    n accst caz, pentru / fixat, execuia complct a structurii f o r interne necesit doar cteva transferuri dc date dc pe hard-disc (n funcic de tipul dc dat utilizat i dc poziia n pagina dc memorie a valorii a [ i ] I j ]).

    24

  • 2.6. Software-ul i paralelismul implicit

    n concluzie, exist metode implicite pentru creterea vitezei de execuie a unei aplicaii, bazate att pe facilitile hardware, ct i pe folosirea cunotinelor de arhitectura calculatoarelor. Un hun programator nu este cel care stpnete doar tehnicile i metodele de programare. Pentru aplicaiile complexe ale zilei de azi, este nevoie i de cunotine din tiina calculatoarelor i Tehnologia informaiei.

    Dac avem la dispoziie un singur procesor, modul n care se realizeaz programarea activitilor se reflect n timpul total, necesar ncheierii tuturor activitilor. Exemplul urmtor arat importana programrii eficiente a mai multor activiti pe un singur procesor i subliniaz faptul c sistemul de operare este o aplicaie esenial n exploatarea eficient a resurselor de calcul. Alegerea unui sistem de operare se va face i analiznd eficiena dispecerului de activiti (aplicaic-nuclcu care se ocup cu gestionarea proceselor concurente).

    Kxemplu. Presupunem c avem la dispoziie un singur procesor i c pe acesta trebuiesc programate dou activiti. Al i A2. Fiecare dintre acestea const ntr-o niruire dc patru sarcini, care vor fi specificate prin timpul necesar (n secunde) i o caracteristic: p dac utilizeaz procesorul sau /', dac nu necesit procesare (sarcina respectiv poate fi de exemplu o listare).

    Al:2p 1/2p li A2: 3p 1/ 1 p 31 Pentru a realiza cele dou activiti, vom folosi mai nti o metod greedy: vom

    programa pe procesor sarcinile disponibile care necesit timpul cel mai ndelungat. n figura 7, pe axa orizontal a timpului sunt evideniate sarcinile rezolvate de procesor, iar in paralel cu acestea, sarcinile care nu necesit intervenia procesorului.

    timp procesare (p) msurat in secunde A2 H Al 1 A2 B Al M 1

    1 2 3 4 5 6 7 8 9 10 11 12 timp idle (/') msurat n secunde

    A2 IXAI^r A2 1 1 1 1 1 1 Al

    4 5 6 7 8 9 10 Figura 7. Programarea greedy pe un singur procesor

    II 12

    Se observ c aceast strategie conduce la ncheierea activitilor dup 9 s, dac ultimele sarcini din fiecare activitate se pot executa n paralel (de exemplu, prima este o listare iar a doua este o copiere dc fiiere). Dac nu este posibil, atunci programarea va dura 10 s pentru c ultima sarcin a activitii Al se va executa dup ce se ncheie integral activitatea A2.

    O alt programare poate ncepe cu Al i continu cu sarcinile care se pot lansa cnd procesorul este eliberat (ca n figura 8). in cel de-al doilea caz, ncheierea ambelor activiti s-a tcut dup 11 s. Acest exemplu arat din nou importana metodelor eficiente dc implementare a paralelismului implicit. De asemenea, arat complexitatea algoritmilor implementai de o aplicaie de tip dispecer dc activiti.

    25

  • 6 7 8 9 10 11 12

    A2 A2 0 1 4 5 6 7 8 9 10

    Figura 8. Alt programare a acelorai activiti 11 12

    Paralelismul implicit se refer la exploatarea eficient a caracteristicilor harjware-ului pe care se executa aplicaiile. Un programator preocupat de calitatea aplicaiei pe care o proiecteaz i realizeaz nu poate ignora aceste caracteristici.

    26

  • Capitolul 3

    Paralelism explicit

    Acest capitol este dedicat arhitccturilor cu mai multe uniti de procesare, care permit specificarea explicit a proceselor care se pot desfura concurent. Spre deosebire de capitolul anterior (Paralelism implicit), care trateaz cazul unei arhitecturi mono-procesor. acest capitol descrie facilitile oferite de coleciile de procesoare.

    Trecerea de la programarea secvenial la programarea paralel nu este uoar. Metoda paralelizrii unor aplicaii secveniale deja scrise nu este cea mai eficient. Pot exista caractcristici ale problemei care nu sunt speculate de aplicaiile secveniale i care scap ateniei programatorilor i in cazurile paralele. Pe de alt parte, scrierea de la nceput a unor aplicaii paralele este o activitate dificil, care necesit solide i moderne cunotine de programare.

    3.1. Controlul n aplicaiile paralele

    Aa cum n cazul aplicaiilor secveniale controlul (adic paii aplicaiei) este spccificat prin instruciuni, n cazul aplicaiilor paralele este necesar specificarea controlului (ce face fiecare proces) dar i a modelului de comunicare (cum/cnd/cine/ce comunic).

    O aplicaie paralel lipsit de comunicaii poate fi gndit ca o cxccuic n izolare a proceselor, deci ar putea fi nlocuit cu nlnuirea secvenial a proceselor pe un singur procesor. n acest caz. timpul de execuie ar fi egal cu suma timpilor de execuie a fiecrui proces, ctigul adus de procesarea paralel fiind reducerea vitezei de procesare (folosind formulele din Capitolul I, n cazul a n procese perfect echilibrate ca timp de execuie, acceleraia este n i eficiena este 1). Dei acesta este o situaie extrem de eficient, rezolvarea unor probleme complexe a dovedit c o descompunere n procese care comunic reuete s gseasc soluii mai bune dect dac nu exist comunicare ntre procese. O strategie de comunicare prin care procesele s schimbe inteligent date este cheia pentru a obine soluii de calitate la problemele dificile ale lumii actuale.

    Controlul procesrii reflect granularitatea paralelizrii: dac paralelizarea este de granularitatc mare (coarse-grained), atunci se execut

    pe fiecare unitate de procesare cte un program (aceste programe pot fi identice sau diferite ntre ele) cu propria evoluie, deci propriul control;

    dac paralelizarea este de granularitatc mic (fine-grained), atunci se execut o singur aplicaie, asigurndu-se un control unic i se prelucreaz simultan seturi diferite de date.

    Exemplu de control la nivel de program (granularitate mare) n arhitectura MIMD (Multiple Instructions Multiple Data) se pot implementa

    aplicaii paralele in care fiecare unitate independent de procesare execut un proces secvenial. Cea mai comun situaie este utilizarea unei reele de calculatoare mono-procesor, fiecare dotate cu aplicaii i sistem de operare i care execut diverse procese din aplicaia

    27

  • paralel. Aceast soluie este general (se poate utiliza pentru o clas larg de aplicaii paralele), flexibil (se poate echilibra n funcie dc consumul de resurse), dar necesit spaii suplimentare de memorie, dcoarccc fiecare sistem dc calcul este controlat independent (figura 9). Sistemele bazate pe multiple proccsoare (CPUs) sunt construite pentru a scdea latena:

    memoria cache este destinat mririi anselor ca datele neccsarc s fie deja disponibile, datorit precedentelor transferuri din memoriile externe procesorului;

    unitatea de control (UC) permite predicia ramificrii codului (branch prediction - codul sc execut n avans, pe ramura cea mai probabil a structurilor dc decizie, dar exist i instrumente de restaurare i avans pe celelalte ramuri. n cazul n carc predicia s-a dovedit a fi incorect). Structurile de decizie pot fi: instruciunea if-then-else, instruciunea case/switch sau cclc carc realizeaz controlul instruciunilor repetitive (dac sc reiau sau sc trccc la urmtoarea instruciune).

    unitatea de control (UC) pe mii te utilizarea rapid a valorilor calculate recent (dala fonvarding) prin mecanisme dc urmrire a locului din aplicaie n care este ncccsar o valoare tocmai calculat i utilizarea acestei valori dei aceasta nu a fost nc depus n zona de memoria secundar (pe hard-disc).

    Orientarea ctre eliminarea latenei face ca sistemele de calcul bazate pe CPU s fie extrem de eficiente n cazul aplicaiilor secveniale. Industria hardware a urmrit, de la nceputuri, eficientizarca acestor aplicaii. Doar dup ce s-a pus problema calculului paralel, au nceput s apar preocupri n eficientizarca hardware pe accast direcie.

    Figura 9. CPU - Uniti de procesare care posed individual uniti de control

    O alt soluie (modern) este oferit de accelcratoarclc grafice (arhitectur SI MD -Single lnstruction Multiple Data), care rezolv o clas mai restrns de probleme cu un cost sczut - necesit memorie puin, existnd un singur punct dc control (figura 10). Aplicaiile care utilizeaz facilitile GPU (Graphics Processing Unit) speculeaz arhitectura lor, specializat pentru eficientizarca unui mare numr de procese, care manevreaz in acelai fel seturi diferite de date.

    Figura 10. GPU - Uniti de procesare controlate de o singur unitate de control

    28

  • Controlul este deci exterior unitilor de procesare, care nu mai ofer facilitile branch prediction sau data J'orwarding. Unitile aritmetico-logice (UALs) sunt numeroase, eficiente energetic i permit cxccuic dc tip pipeline. Dei memoria disponibil pentru GPU inducc o laten mult mai mare dect n cazul unui CPU (lipscsc facilitile descrise n lista precedent), numrul marc dc operaii care se pot suprapune (arhitectura este putcmic oriental ctre suprapunerea de tip pi>eline) face ca aproape la fiecare ciclu de ceas sa fie ncheiat execuia unei instruciuni. Aceste caracteristici fac ca dispozitivele hardware de tip GPU s poat executa mult mai eficient unele aplicaii paralele dect dispozitivele CPU.

    Exemplu dc control la nivel dc instruciune (granularitate mic) in cazul arhitecturii SIMD (Single lnstruction Multiple Data) se pot executa

    concomitent operaii pe fiecare component a unei structuri de date. De exemplu, dac dorim s adunm doi vectori a i b cu ctc 1000 dc componente i s stocm valorile rezultate ntr-un alt vector c, atunci aplicaia secvenial va coninc instruciunile:

    for (i - 0; i < 1000; i++) c[i) - a[il + b[ij;

    iar dac dorim folosirea facilitilor SIMD, atunci codul paralel (care aloc o poziie din vectorul c unui proces i fiecare proces are acces la componentele corespunztoare din cei doi vectori dc intrare) va coninc instruciunea:

    c[currentJ = afeurrent) + b[current];

    n primul caz procesorul execut 2000 de atribuiri (sunt necesare 1000 dc atribuiri pentru contorul / i 1000 de atribuiri pentru elementele vectorului c). n al doilea caz se execut simultan 1000 dc atribuiri pentru variabila local current i apoi simultan 1000 de atribuiri pentru calculul valorii corespunztoare din vectorul c.

    Situaia sc complic dac exist instruciuni decizionale n codul secvenial. De exemplu, dac exist instruciunea:

    if (x -- 0) z - y; else z = y/x;

    execuia sa pe seturi diferite dc date ncccsit doi pai: nti se atribuie valoarea din y variabilei z pentru toate procesele care au valoarea 0 stocat n variabila x i apoi se atribuie valoarea y/x variabilei z pentru restul proceselor. n toate procesele paralele, se lucreaz pe valorile curente (locale procesului) ale variabilelor. Instruciunea pentru versiunea paralel este:

    where

  • etapa 1 din where

    i a doua etap aloc valori pentru variabila r din seturile D2 i D3:

    etapa 2 din where

    Aceast metod de rezolvare folosete o mascare a activitii (activity niask), permind separarea proceselor n grupuri care execut aceeai prelucrare pe seturi diferite de date. Cu ct structurile de dccizic sunt mai numeroase sau mai complcxc (de exemplu instruciunea case / swi tch) , cu att masca de activitate mparte proccsclc n tot mai multe grupuri. ntrziind execuia aplicaiei paralele.

    3.2. Comunicaiile n aplicaiile paralele

    Comunicaia este esenial pentru cficientizarea aplicaiilor paralele. Scrierea unor aplicaii care se desfoar simultan ftr ca acestea s comunice nu mbuntete dect timpul total de execuie, fr ns a economisi resursele de calcul, aa cum am vzut la nceputul acestui capitol. n loc s executm n paralel procesele, acestea sc pot nscria i cxccut pe un singur procesor, evident n timp mai lung. dar cu aceleai costuri totale.

    Comunicaia ntre procese sc poate executa: prin spaiu partajat de adrese (shared address space) prin schimb de mesaje (messagepassing). Aceste metode de comunicaie sunt destinate exploatrii a dou tipuri de arhitecturi.

    Din nou, subliniem faptul c aplicaiile paralele actuale sunt proiectate astfel nct s utilizeze extrem de eficicnt caracteristicilc platformei pe care urmeaz a se implementa. O aplicaie paralel nu poate fi cficientizat pentru toate arhitecturile.

    3.2.1. Comunicaiile prin spaiu partajat de adrese

    Principiul comunicaiilor prin spaiu partajat de adrese este des ntlnit n natur, fiind o alternativ la mai des ntlnitul principiu al schimbului de mesaje. n locul sincronizrii expeditorului cu destinatarul de fiecare dat cnd este necesar o transmisie de date (schimb de mesaje), comunicaia prin adrese partajate nu necesit sincronizare: expeditorul depune n spaiul comun valoarea pe care dorete s o transmit i destinatarul o acceseaz atunci cnd are nevoie de valoarea respectiv.

    Aceeai metod este ntlnit n natur la coloniile de furnici, care depun pe sol o substan specific (feromon) pe care o recunosc i o interpreteaz cele care trec ulterior prin acelai loc. Dei sunt insecte aproape oarbe, furnicile reuesc s gseasc n scurt timp drumul cel mai scurt de la sursa de hran la cuib. Un alt model este partajarea vehiculelor, pentru economisirea carburantului, micorarea emisiilor poluante i descongestionarea oselelor. n figura 11 este prezentat indicatorul pentru benzile HOV (high-occupancy vehicle lanes) dedicate, iar n figura 12 se afl o imagine a unei astfel de benzi. Controlul utilizrii

    Dl D2 D3 D4 r 0 x 2 .r 3 * 0 y 7 .v 3 2 z 7 z z : 2

    Dl D2 D3 D4 * 0 x 2 .r 3 x 0 v 7 v 8 y 3 v 2

    I - 1 r 4 z 1 z 2

    30

  • r^enzilor HOV se face prin sisteme automate de captare i interpretare a imaginilor, asigurndu-se acces liber doar autovehiculelor n care se afl cel puin dou persoane t posesorii celorlalte autovehicule sunt amendai).

    HCV 2- CNLY ? OR MC PCRSOtK

    f LH VLHlC.t

    Figura 11. Indicatorul rutier High-occupancy vehicle (HOV) n vigoare n SUA

    Figura 12. Band dedicat HOV]n California, SUA [29)

    Sistemele de calcul care suport programarea de tip SPMD se numesc sisteme muli-procesor. Dac timpul pentru accesarea memoriei este identic pentru Fiecare spaiu dc memorie, atunci platforma este de tip Uniform Memory Access (UMA) (figura 13). In caz contrar, platforma este de tip Non-uniform Memory Access (NUMA) (figura 14).

    Comenzile de scriere n memoria comun sunt complexe la nivelul implementrii, deoarece necesit mecanisme dc blocare, specificate n continuare, in acest subcapitol.

    Figura 13. Platform UMA. spaiu partajat de memorie

    31

  • Figura 14. Platform NUM A, spaiu partajat dc memorie

    Cea mai eficient arhitectur cu adrese partajate este oferit de memoria PRAM (Parallel Random Access Machine): mai multe proccsoare acceseaz un spaiu comun dc memorie. Un model asemntor este metoda didactic a rezolvrii la tabl a unei probleme: profesorul scrie informaiile la tabl, iar elevii le preiau, asigurndu-se c la momentul cnd profesorul terge tabla i depune noi informaii pe tabl, cele precedente au fost deja utilizate (nvate sau scrisc n caictc) i dcci nu mai este necesar prezena lor n spaiul comun (adic tabla).

    Accst model este cunoscut n Inteligena Artificial sub numele dc modelul Bluckboard [31], fiind folosit pentru a rezolva probleme complexe care se descompun n sub-problcmc dependente, avnd urmtoarele componente:

    baze de cunotine (knowledge sources) stocate distribuit; fiecare astfel de baz poate rezolva independent o sub-problem;

    o zon de memorie la carc au acces bazele de cunotine, care conine problema iniial, sub-problemele n care aceasta s-a descompus, soluiile acestor sub-problcme, modul n care se utilizeaz aceste soluii n rezolvarea altor sub-probleme sau a problemei iniiale, ctc.;

    un modul de control, care asigur desfurarea eficient a procesului de rezolvare a problemei iniiale, carc definete i urmrete strategia dc rezolvare a acesteia. Scopul modulului este de a mpiedica deduciile nefolositoare rezolvrii problemei. Proiectarea i programarea accstui modul este esenial i arat importana conccptului dc oportunism in informatic. Spccularea oricror informaii i metode care ajut la rezolvarea rapid a problemelor ajunge s fie o art, carc se bazeaz pe cunotine avansate, pc experiena i pe cooperarea echipei de specialiti care lucreaz la rezolvarea problemei respective. Cteva sisteme open-source destinate implementrii modelului tablei sunt [21,31].

    Cea mai dificil activitate n cazul spaiului partajat dc memorie o reprezint asigurarea transferului corect de date. Pe parcursul execuiei aplicaiei paralele, se pot produce transferuri de date n alt mod dect cel intenionat la proiectarea algoritmului. Dc exemplu, dac mai multe proccsc doresc simultan s serie acccai zon de memorie, atunci unele dintre valorile care se intenioneaz a se stoca sc pierd, deci activitatea realizat de aceste procese este irosit. Strategia utilizat n cazul PRAM poate fi:

    Exclusive Read, Exclusive Write (EREW) - modelul cel mai restrictiv, cnd att citirilc ct i scrierile se execut sccvcnial; dac la un anumit moment, procesele ncearc s scrie simultan aceeai zon de memorie, atunci acestea sunt serializate. La fel se ntmpl i la tentativa de citire simultan. Asigurnd cel mai nalt grad de securitate a datelor, acest model produec i cea mai marc ntrziere, prin

    32

  • serializarea proceselor care n celelalte cazuri (descrise in continuare) s-ar putea desfur n paralel.

    Concurrent Read. Exclusive Write (CREW) - modelul cel mai ntlnit, care serializcaz scrierile, dar permite citirile simultane din aceeai zon de date.

    Exclusive Read. Concurrent Write (ERCW) - modelul care serializcaz citirile accicai zone de memorie, dar permite scrierea simultan n acelai loc.

    Concurrent Read. Concurrent Write (CRCW) - cel mai puternic model PRAM. carc elibereaz programatorul dc grija operaiilor dc intrare/ieire. Toate operaiile de citire/scriere carc doresc s acceseze simultan o zon de memorie sc execut (unele avnd efectul scontat dc programatorul procesului, altele nu) i aplicaia nu ntrzie.

    Accesul concurent este lsat Ia decizia protocoalelor dc tratare a evenimentelor carc ar putea aprea. Cum am vzut deja. proccsclc acceseaz concurent aceeai zon de memorie, ins nu este garantat succesul tuturor accesrilor. Dac citirea simultan nu pune probleme, deoarece nu este important o eventual scrializare dect din punctul de vedere al timpului necesar, scricrca simultan este rezolvat prin unul dintre urmtoarele protocoale de rezolvare a conflictelor:

    Common: scrierea se realizeaz doar dac toate proceselc ncearc s scrie aceeai valoare, altfel toate procesele eueaz n tentativa de scriere i apoi toate continu cxccuia.

    Arbitrary: unul (oarecare) dintre procese scrie efectiv i celelalte eueaz; apoi toate continu.

    Prioritv: scrie procesul care are cea mai nalt prioritate, celelalte eueaz i apoi toate continu. Acest protocol presupune c fiecrui proces i se aloc (la creare) o prioritate.

    Suni (sau orice alt operator asociativ): se scrie suma (sau rezultatul aplicrii operatorului) valorilor pe care intenioneaz s le scrie fiecare proces i apoi fiecare proces i continu cxccuia.

    3.2.2. Comunicaiile prin schimb de mesaje

    Principiul schimbului de mesaje este asemntor sistemului potal clasic: pentru a prelua o informaie, expeditorul trimite o scrisoare destinatarului, folosind un plic pe carc specific datele dc identificare ale cclor doi, n care mpacheteaz mesajul. Att destinatarul ct i expeditorul pot nelege mesajul, fiind deci n posesia unor faciliti de procesare i stocare a mesajului. La fel, unitile dc procesare care schimb mesaje posed spaii exclusive dc memorie (figura 15), au identificatori unici carc i individualizeaz n grupul dc posibili participani la schimbul de mesaje i pot folosi funciile dedicate: Send sau Receive.

    UP M UP M UP M

    Figura 15. Platform cu spaiu exclusiv dc memorie, pentru comunicare prin schimb de mesaje

    33

  • Limbajele de programare care permit schimbul de mesaje implementeaz ablonul general MPI (Message Passing Interjace). aflat acum la versiunea 3 [32]. Printre cele mai utilizate implementri MPI menionm [23. 25, 26].

    Sistemele distribuite (cu spaii exclusive de memorie) folosesc comunicarea prin schimb de mesaje, pe cnd metoda alternativ (comunicarea prin acces la memoria comun) este potrivit sistemelor de calcul paralel.

    Schimbul de mesaje se realizeaz ntotdeauna ntr-un context (un grup), care definete o submulimc a calculatoarelor legate n reea care pot comunica. La un moment dat. intr-o aplicaie distribuit, pot exista mai multe grupuri, dar o comunicaie are loc ntr-un anumit grup. O comunicaie presupune existena a cel puin unui expeditor (surs) i a cel puin unui destinatar.

    In funcie de participanii la comunicaie, acestea pot fi de urmtoarele tipuri: 1 - 1 (one-to-one), cnd schimbul de mesaje se realizeaz prin perechea dc

    comenzi Send (la surs)//teci/ve (la destinaie); I - toi (one-to-all), cnd sursa trimite cte un mesaj fiecrui proces din grup.

    folosind una dintre comenzile Broadcast sau Seat ier, toi - 1 fall-to-one), cnd un singur destinatar colecteaz mesaje dc la toi

    participanii din grup, cu ajutorul comcnzilor Gather sau Reduce.

    In comunicarea de tip / - / exist o singur surs i un singur destinatar, fiecare dintre aceste proccse cunoscnd identificatorul procesului cu care corespondeaz. Schimbul de date se realizeaz printr-o zon de memorie dedicat (buf fer ) , care se utilizeaz ca spaiu de stocare intermediar i permite eliberarea memoriei celor doi participani Ia schimb (figura 16).

    Memorie surs Buffer surs mesaj

    Buffer destinaie Memorie destinaie (MS) (BS) (BD) (MD)

    Surs Destinaie

    Figura 16. Transmiterea unui mesaj ntre surs i destinaie

    Pentru realizarea transmisiei, sursa trebuie s execute o comand Send, iar destinaia arc de executat o comanda Receive. n modelul general, parametrii acestor comenzi sunt:

    Send (mesaj, destinatar, eticheta, grup) Receive (mesaj, sursa, eticheta, grup. stare) unde: mesaj descrie identificatorul structurii locale de date care conine mesajul,

    destinatar/sursa sunt identificatorii celuilalt proces, eticheta permite mperecherea corect a celor dou comenzi, deoarece identific mesajul n mod unic, grup reprezint contextul n care se realizeaz comunicarea, iar stare este o structur de date care reflect modul n care s-a realizat efectiv comunicaia.

    Existena buffcr-ului care intermediaz schimbul permite urmtoarele variante de comunicare:

    hlocking. n care sursa rmne n execuia comenzii Send pn cnd bufler-ul su (BS din figura 16) poate fi rescris. De asemenea, destinaia st n execuia comenzii Receive pn cnd bufler-ul su (BD din aceeai figur) conine ntreg mesajul transmis. Dup ce se ndeplinete condiia corespunztoare lui, fiecare proces poate inccpc execuia urmtoarei instruciuni. Accast variant presupune dcci c procesele nu pot avansa dect dup ce comunicaia s-a realizat efectiv (deci se poate spune comunicaia a sincronizat procesele").

    34

  • non-blocking. in care fiecare dintre comenzile Send/Receive este mprit n dou faze, ntre carc fiecare proccs poate cxccuta alte comenzi:

    o iniierea comunicrii o testarea realizrii comunicrii.

    Aceast variant permite ca aplicaiile s avanseze ne-sincron, nefiind necesar c.xccuia n acciai timp a comcnzii Send la surs i a comenzii Receive la destinaie.

    in ambele variante, n funcie de rspunsul la ntrebarea Ce se poate spune despre procesul Destinaie, dac procesul Surs a ncheiat comanda Send?", exist mai multe moduri de implementare a comunicaici:

    standard, cnd nu se cunoate starea n care se afl procesul Destinaie, programatorul nu se poate baza nici mcar pe faptul c BD conine mesajul:

    buffered, cnd comanda Send a procesului Surs sc poate ncheia fr ca procesul Destinaie s fi nceput execuia comenzii Receive;

    sychronous, cnd la nchcicrca comcnzii Send a procesului Surs, procesul Destinaie a nceput execuia comenzii Receive i mesajul a nccput s fie recepionat;

    ready, cnd comanda Send a proccsului Surs poate ncepe numai dup ce comanda Receive din procesul destinaie i-a nceput execuia.

    in cazul comunicrii de tip 1 - toi, se presupune existena unui grup, n cadrul cruia exist un proces Surs, care transmite cte un mesaj fiecrui proces din grup. inclusiv lui nsui. Comanda Broadcast transmite acelai mesaj tuturor proceselor din grup:

    Broadcast (mesaj, sursa, grup)

    Pentru a se realiza difuzarea mesajului n grup, fiecare proces execut comenzi Broadcast idcnticc; dac presupunem c grupul este format din n calculatoare, atunci cele n comenzi Broadcast sunt echivalente cu n comenzi Send executate de Surs i cte o comand Receive executat de fiecare proces. Dac grupul este mare, atunci Sursa poate provoca aglomerri pe canalul de comunicaie. Aceast problem va fi tratat n continuare, n acest subcapitol. In figura 17 este prezentat un grup de 4 calculatoare carc au identificatorii 1 - 4, n carc sursa comcnzii Broadcast este proccsul cu identificatorul 1 i mesajul conine valoarea variabilei a.

    date a

    O 1 1 35 y 2 2 3 c .

    4

    Broadcast (a. 1, grup)

    date a

    1 7 2 7

    | 3 7 Q. 4 7

    Figura 17. Efectul unei comenzi Broadcast ntr-un grup de 4 procese

    Comanda Scatter transmite mesaje diferite tuturor proceselor care compun un grup:

    Scatter (colecie, element, sursa, grup)

    35

  • Aceast comand este generalizarea comenzii Broadcast, n sensul c o colecie de date stocat la surs este fragmentat i fiecare element este transmis unui proces, n ordinea identificatorilor proceselor din grup. Dac presupunem c grupul arc n calculatoare, atunci comenzile Scatter executate dc fiecare sunt echivalente cu n comenzi Send executate de Surs i cte o comand Receive executat de fiecare proces. n figura 18 este prezentat rezultatul unei comenzi Scatter executat pe fiecare dintre cele 4 procese ale unui grup, in carc procesul 1 este sursa i trimite fiecrui proces din grup (in ordinea identificatorilor) cte o component a vectorului A.

    date date A b A b

    1 7 3 5 | 2 Scatter (A. b, 1, grup) 1 7 3 5 2 7 a v 2

    Scatter (A. b, 1, grup) '.j t/j 2 3 ? 3 3 5 c. 4 CL 4 2

    Figura 18. Efectul unei comenzi Scatter ntr-un grup de 4 procese

    Comunicaiile de tip toi - 1 presupun colectarea la destinaie a mesajelor transmise de fiecare proces din grup. Comanda Gather este opus comcnzi Scatter. deoarece proccsul destinaie construiete n ordinea identificatorilor proceselor participante o structur de date prin rccepionarea mesajelor transmise de fiecare proccs:

    Gather (element, colecie, destinatie, grup)

    n cazul unui grup de /; calculatoare, comenzile Gather executate de fiecare sunt echivalente cu n comenzi Receive executate de Destinaie i cte o comand Send executat de fiecarc proces. n figura 19 sc prezint efectul comenzii Gather cu destinaia 1 ntr-un grup dc 4 proccsc.

    date date A b A b

    1 2 Gather (b. A, 1. grup) 8 a>

    1 2 | 9 4 | 6 2 S a> 2 9

    Gather (b. A, 1. grup) 8 a> 2 9 S a> 3 4 3 4

    a. 4 6 c. 4 6

    Figura 19. Efectul unei comenzi Gather ntr-un grup de 4 procese

    Comanda Reduce presupune utilizarea unui operator asociativ (fie predefinit, fie definit n aplicaie) - exemplul din Figura 20 se refer la operatorul de adunare (SUM). Prin comanda Reduce, la destinaie se colecteaz valorile obinute prin aplicarea repetat a operatorului specificat, pentru fiecare dintre structurile de date primite de la Fiecare proces din grup. Dac presupunem c grupul are n calculatoare, atunci comenzile Reduce executate de fiecarc sunt echivalente cu n comenzi Receive executate de Destinaie, cte o comand Send executat de fiecarc proces i o prelucrare a rezultatelor finale. n figura 20, fiecarc dintre cele 4 componente ale vectorului B se obine prin adunarea componentelor corespunztoare din fiecare vector A, stocat pe fiecare calculator din grup. De exemplu, B[l] este suma valorilor stocate n A(l] de ctre fiecare proces.

    36

  • date A

    1 2 2 1 0 8 2 3 1 0 4 * 3 0 3 1 1 c . 4 2 0 1 1

    Figura 20.

    Reduce (A, B. SUM. 1. grup)

    unei comenzi Reduce intr-un

    date B

    1 7 | 6 3 | 6 K V 2

    3 c . 4

    de 4 procese

    Conectarea unitilor de procesare

    Reelele alctuite prin conectarea mai multor uniti dc procesare destinate calculului paralel sunt de obicei reele regulate, cu o topologie strict orientat ctre viteze mari de transmisie a mesajelor i distane scurte ntre procesoare. Dc aceea, reelele mici sunt complete de cele mai multe ori. iar cele mari respect urmtoarele topologii [7]:

    Stea (s/ar): un procesor este legat la toate cclclaltc proccsoare. Dc obicci este o reea eterogen, procesorul central asumndu-i rolul de server, iar celelalte - pe cel de client.

    Vector (cu sau far circularitatc; n primul caz obinem reeaua de tip inel): toate procesoarele sunt conectate la o magistral (bus).

    Arbore (tree): topologia este dc arbore (graf neorientat concx i ftr circuite). n figura 21 a) este prezentat un arbore binar cu 8 noduri terminale. Cea mai dificil problem a acestei topologii este aglomerarea mesajelor n zona rdcinii, dcoarccc muchiile conexe rdcinii fac trecerea ntre sub-arborelc stng i cel drept al acesteia. Din acest motiv, arborii sunt cficicntizai prin creterea lrgimii de band pentru conexiunile din apropierea rdcinii, ca n figura 21 b).

    Plas (mesh): procesoarele sunt legate cu vecinii aflai n nodurile unei reele cu dou sau mai multe dimensiuni. Reeaua poate fi cu circularitate (toroidal) sau deschis. n figura 22 sunt prezentate cclc dou cazuri pentru o plas 2D cu 9 noduri. n figura 23 sc afl o reea mesh 3D cu 27 de noduri. Pentru cazul general, se definete reeaua de tip k-d mesh: o plas din k noduri n d dimensiuni. O reea 2-d mesh este denumit hipercub. n figura 24 este prezentat seria 2-0 (a), 2-1 (b), 2-2 (c), 2-3 (d) i 2-4 (e) de hipercuburi.

    a) b) Figura 21. Reea arbore (tree) i arbore masiv (fat tree)

    37

  • t (

    1

    <

    t <

    1 .

    A < A

    U i t- a) b)

    Figura 22. Reea plas 2D a) deschis b) circular

    Figura 23. Reea plas 3D, deschis |7)

    a) b) c) d) e) Figura 24. Hipercuburi in k = O - 4 dimensiuni [7J

    38

  • Metode eficiente de comunicare multipl

    jn cazul comunicaiilor multiple se pot produce aglomerri pe canale, cu consecine negative n ce privete viteza transferului, implicit a aplicaiei de calcul paralel. Sincronizarea tuturor proceselor care particip n comunicaia colectiv conduce la avansarea lor la urmtoarea instruciune numai dup ce i cel mai ntrziat proces a ajuns i a executat comunicaia respectiv, in figura 25 este prezentat influena unei comunicaii colective ntr-un grup dc 5 procese, care au ajuns la momente diferite dc timp la execuia acestei comunicaii. Proccselc i pot continua cxccuia numai dup ce procesul PI (cel mai ntrziat) a ajuns n punctul de sincronizare. Procesele P2-P5 sunt nevoite s atepte procesul PI i timpul de ateptare este figurat prin linie punctat).

    PI

    P2

    P3

    P4 timp

    Figura 25. ntrzierea (linie ntrerupt) indus de sincronizarea comunicaiilor colective

    La nivelul implementrii comenzilor colective este deci extrem de important modul n care acestea se realizeaz. Cteva astfel de situaii, determinate de topologia conexiunilor, sunt prezentate n continuare.

    Implementarea unei comenzi Broadcast pe un inel de 8 calculatoare Dac presupunem c sursa este calculatorul cu identificatorul 0 i c sensul de

    parcurgere a reelei este cel din figura 26. atunci sgeile punctate descriu o metod de transmisie n 3 pai a mesajului ctre toate celelalte calculatoare din inel.

    o

    G>

  • Primul pas consta in comunicaia intre 0 i 4. La pasul 2 se efectueaz dou comunicaii: 0-2 i 4-6. La pasul 3 se realizeaz 4 schimburi de mesaje: 0-1, 2-3, 4-5 i 6-7. Dac fiecare hop (calculator intermediar) dintr-o comunicaie este traversat ntr-o unitate dc timp, atunci pentru ncheierea comenzii Broadcast pc cclc 8 calculatoare sunt necesare: 4 + 2 + 1 = 7 uniti de timp, adic timpul optim, deoarece doar comunicaia 0 - 7 (cel mai lung traseu) necesit 7 uniti dc timp. Metoda descris (care se numete metoda dublrii recursive, deoarece la fiecare pas se dubleaz numrul de transmisii de date) are o proprietate foarte important: //ea//v canal de comunicaie este parcurs mereu de cel mult un mesaj, deci niciun canal nu este aglomerat.

    Implementarea unei comenzi Broadcast pe o reea mesh 2D cu 16 calculatoare [7] Considernd c sursa este calculatorul cu identificatorul 0. atunci metoda dublrii

    recursive realizeaz comunicaia n 4 pai. astfel (figura 27): pasul 1: 0 - 8, un singur transfer, realizat n 2 uniti de timp pasul 2: 0 - 4 i 8 - 12, dou transferuri simultane, care necesit o unitate dc timp pasul 3: 0 - 2, 4 - 6, 8 - 10 i 12 - 14. patru trasferuri n paralel, pentru carc sunt

    necesare 2 uniti de timp pasul 4: 0 - 1, 2 - 3, 4 - 5. 6 - 7, 8 - 9, 10 - 11, 12 - 13 i 14 - 15, opt schimburi

    simultane de mesaje, efectuate ntr-o unitate de timp. n total au fost necesare 6 uniti de timp, ceea ce reprezint un timp optim, deoarece

    cel mai ndeprtat calculator de 0 (i anume cel cu identificatorul 15) poate recepiona mesajul dup ce acesta trece prin cel puin alte 5 calculatoare (se poate observa c distana Hamming ntre colurile opuse ale reelei mesh 2D din figura 27 este 6). Comanda colectiv este realizat Jr aglomerri i metoda dublrii recursive este din nou cea mai eficient.

    Figura 27 Implementarea optim a comcnzii Broadcast pe reea mesh 2D

    40

  • t-menlarea unei comenzi Broadcast pe o reea mesh 3D cu 8 calculatoare [7] Pentru reeaua mesh 3D din figura 28, execuia unei comenzi Broadcast cu sursa 0

    r r a rr.etoda dublrii recursive conducc la 3 faze n transmisie, evideniate prin sgeile i r r r r j p t e care sunt numerotate corespunztor:

    o prim comunicaie ntre 0 i 4, care dureaz o unitate dc timp; dou transmisii efectuatc n paralel, 0 2 i 4 6, care dureaz tot o unitate dc

    timp; patru schimburi simultane dc mesaje. 0 - 1 . 2 - 3 , 4 - 5 i 6 - 7 . care de asemenea

    dureaz o unitate de timp. Metoda dublrii recursive este optim, deoarece realizeaz transmisia n cel mai scurt

    j t calculatoarele 0 i 7 au nevoie dc 3 uniti de timp pentru a transfera un mesaj) i nu ct. - : J aglomerare pe canalele de comunicaie.

    Figura 28. Implementarea optim a comenzii Broadcast pe reea mesh 3D

    in concluzie, implementarea comenzilor colective este extrem de important n cazul i r . :aiilor distribuite i depinde att de topologia reelei, ct i de surs/destinaie. Modelele rrezentate sunt ideale, n sensul c reelele reale nu sunt nici echilibrate, nici statice i foarte rar au 8 sau 16 componente.

    Pentru o eficientizare a comunicaiilor in calculul distribuit este deci nevoie de r+noaterea reelei, a dinamicii acesteia, a frecvenei schimburilor de mesaje i a ncrcrii canalelor de comunicaie. Experiena i cunotinele programatorului sunt deci extrem de -tportante pentru scrierea unor aplicaii distribuite eficiente.

    41

  • Capitolul 4

    Rezolvarea unei probleme prin calcul concurent

    Proiectarea unui bun algoritm concurent este dificil, dcoarecc trebuie s rcspcctc mncipiile generale dc cficicn. carc s i asigure succcsul indiferent dc condiiilc dc execuie, dar s i in cont de particularitile problemei rezolvate. Principiile generale de e-'cien sunt prezentate n continuare, exemplificate pentru cteva probleme simple; rrogramatorul care este pus in situaii efective de rezolvare a unei probleme poate astfel iplica aceste principii i le poate adapta situaiei sale concrete, in capitolul urmtor sunt iescrisc cteva probleme reale, care apar des n proiectele software i pentru care principiile pencralc dc cficicn sunt discutatc.

    4.1. Graful de preceden

    Folosirea acestui instrument vizual uureaz proiectarea algoritmilor concureni, ieoarece permite observarea modului n care intcracioncaz procesele. Graful de prcccden descrie ordinea n care proccsclc sc execut pentru a rezolva problema n mod concurent.

    Graful de preceden este graful orientat aciclic n carc nodurile sunt procese i arcul . J) arat c procesul j poate nccpc numai dup ce procesul i s-a ncheiat. Reamintim c un

    vraf orientat G este o pereche dc mulimi ( V , E ) unde V este mulimea nodurilor, iar E este -nulimea arcelor. E C.V xV . Graful este aciclic dac nu exist un drum nchis (o succesiune de arce care s nceap i s se ncheie n acelai nod), in figura 29 este prezentat un graf orientat ciclic, iar n figura 30 este unul aciclic, obinut din cel din figura precedent prin schimbarea direciei unui singur arc. evideniat prin sgeat groas.

    Figura 30. Graf orientat aciclic

    Problema I: Plecnd de la matricea ptrat A(n,n) i de la vectorul b{n), s se calculczc cu ajutorul formulei c = A b valorile stocatc n vectorul c.

    Pentru rezolvarea prin programare concurent a accstci probleme, putem alege o granularitatc fin. crend n procese i repartiznd fiecrui proces Pt,]

  • de procesare, sau se pot executa n orice ordine atunci cnd nu sunt suficiente uniti de procesare. Graful de preceden are deci n noduri i niciun arc (figura 31).

    0 O O o o 1 2 3 ... n - 1 n

    Figura 31. Graful de preceden pentru n procese independente

    n cazul n care se implementeaz o granularitate constant k, indiferent de dimensiunile matricei A, atunci cele k procese se aloc astfel:

    P\ calculeaz cl,c2,...,cll; ~k

    Pi calculeaz cn ,cn , . . . , c ;

    calculeaz c ,c ,...,c. U-lP+l (4-D-+2

    k k

    n figura 32 este prezentat graful de preceden pentru k = 4.

    O O O O 1 2 3 4

    Figura 32. Graful de preceden pentru 4 procese independente

    Problema 2: Plecnd de la comanda SQL SELECT * FROM CARS WHERE MODEL = "LOGAN" AND AN = 2012 AND (CULOARE = "ALB" OR CULOARE = "GRI"); s se descrie cum se poate executa eficient (rapid) n paralel.

    Rezolvare. Aceast comand SELECT folosete un singur tabel (CARS), din care extrage articolele care ndeplinesc o condiie complex. Vom nota sub-mulimile de articole din CARS care sunt implicate n aceast execuie astfel:

    A este format din mainile Logan; A conine mainile produse n anul 2012; A are date despre mainile albe; A se refer la mainile gri. Comanda SELECT are deci scop listarea elementelor mulimii

    A = A,r\A2r\(A3UA4). Elementele mulimii A se pot afla n paralel n mai multe moduri. n cele dou cazuri

    pe care le vom analiza, paralelismul execuiei va fi evaluat, folosind graful de preceden. Rezolvarea 1. O posibil rezolvare a problemei construiete mulimea^ astfel: As=AlC\A2

    A =A,UA4 A = A5r\A6.

    44

  • Dac exist procesoare disponibile, atunci graful de preceden pentru acest mod de rezolvare a problemei este prezentat n figura 33 (mulimile As i Ab se pot gsi n paralel).

    A, O-

    Aa

    Figura 33. Graful de preceden pentru rezolvarea 1

    Gradul de concuren este dat de numrul de procese care se pot desfura simultan. n acest

    : iz . gradul mediu de concuren este ^ + ^ = 2,33. Dac presupunem c durata de

    n rcuie a proceselor este aceeai (n lipsa unor informaii privind durata lor real), atunci mimul critic n graful de preceden din figura 33 are lungimea 2. Reamintim c drumul : -;.v ntr-un graf aciclic este lungimea celui mai mare drum care leag dou noduri.

    Rezolvarea 2. O rezolvare cu un grad mediu de concuren mai sczut poate construi mul imea^ astfel:

    . A5 = A}\JA4

    . A6 = A2r\A5 A = A]C\A6.

    Figura 34. Graful de preceden pentru rezolvarea 2

    ; , , , - 4 + 1 + 1 + 1 , ^ . , , . . In acest caz, gradul mediu de concurena este = 1,75 i drumul critic are

    Msmea 5.

    45

  • n capitolul urmtor vom prezenta o problem pentru care vom analiza din nou efectul ordinii efecturii unor operaii asociative. Aici am considerat c durata proceselor este identic; n subcapitolul 5.2 vom vedea care este impactul unor durate diverse asupra timpului total de execuie al unei aplicaii paralele.

    Evaluarea paralelismului n cazul unei aplicaii paralele, programatorii sunt interesai de optimizarea

    urmtoarelor caracteristici: gradul maxim de concuren, care arat numrul maxim de uniti de procesare

    disponibile, fiind deci o valoare limitat de configuraia hardware pe care se execut aplicaia;

    gradul mediu de concuren, care arat ct de paralelizat" este o aplicaie, fiind o imagine a eficienei algoritmului;

    drumul critic al grafului de preceden, care este lungimea maxim a drumurilor n graf, obinut prin ponderarea nodurilor cu timpii corespunztori de execuie. Aceast valoare arat timpul total de execuie.

    Aceste msuri sunt caracteristice aplicaiilor concurente, adugndu-se msurilor cantitative generale ale aplicaiilor (complexitate, numr de linii de cod, timp de execuie, etc.) i celor calitative, specifice Ingineriei software (portabilitate, claritate, mentenabilitate, etc.). Cele dou probleme concrete prezentate anterior arat cum graful de preceden este un instrument general, care poate evalua eficiena unei metode concurente de rezolvare.

    4.2. Metode de descompunere a rezolvrii unei probleme

    Realizarea unei aplicaii concurente presupune (printre altele) i partajarea activitii ntre mai multe procese desfurate concurent. Descompunerea se refer att la efortul de procesare (descompunere funcional), ct i la repartizarea datelor pe mai multe procese (idescompunerea domeniului). De fapt, aceast clasificare urmeaz clasificarea Flynn (descris n subcapitolul 1.3), considernd dimensiunea proceselor (pentru descompunerea funcional) i a datelor (pentru descompunerea domeniului). O aplicaie complex poate folosi diverse tipuri de descompunere, caz n care descompunerea sa devine hibrid.

    4.2.1. Descompunere funcional

    Descompunerea funcional descrie modul n care efortul computaional se repartizeaz unor procese care avanseaz concurent. Problema care se rezolv poate avea o descompunere natural" n procese - caz n care programatorul o poate folosi. Exist ns i metode generale, care se pot aplica unor categorii de probleme.

    Descompunerea recursiv este o descompunere funcional care lanseaz recursiv procese, care rezolv fiecare cte o sub-problem. Dac metoda de rezolvare este de tip divide-et-impera, atunci fiecare sub-problem se poate rezolva folosind un proces, lansat prin recursivitate; soluiile sub-problemelor sunt colectate de procesul iniial, care construiete din acestea soluia problemei. Comunicaiile n acest caz se rezum doar la lansarea recursiv a noilor procese i la colectarea soluiilor, deoarece sub-problemele derivate prin divide-et-impera sunt independente. Dac problema se rezolv prin programarea dinamic, atunci tot prin recursivitate se pot genera procese destinate rezolvrii sub-problemelor. Modelul comunicaiilor va fi mai complicat, deoarece n acest caz sub-problemele sunt dependente.

    46

  • Exemple de paralelizare prin descompunere recursiv sunt: calculul termenului iszsmc din irul lui Fibonacci (prezentat n Capitolul 1), sau sortarea prin metoda rapid ,iuDct-sorr).

    Descompunerea speculativ este descompunerea funcional n care se lanseaz (pe T:cesoare care altfel nu ar avea ncrcare) n avans procese-alternative: procese care - .oe eaz ramurile unei instruciuni if-then-else sau case/switch. Cnd procesul-printe . a r ce la respectiva instruciune i decide care este ramura pe care se va avansa, atunci se inc - i toate procesele-fiu i se preia starea procesului-ftu corespunztor ramurii alese.

    4.2.2. Descompunerea domeniului

    Descompunerea domeniului se refer la repartizarea datelor problemei pe diverse rrccese. care le vor prelucra n paralel. La nevoie, n final, rezultatele proceselor se s^r.?!eaz n soluia problemei.

    Un exemplu de descompunerea a domeniului este descompunerea exploratorie, n re spaiul de soluii este partajat n mulimi disjuncte, fiecare apoi fiind repartizat unui

    rrcces spre investigare. Fiecare proces gsete o soluie optim n mulimea sa; aceste soluii rcame sunt preluate de un proces i este aleas cea mai bun dintre ele, care devine soluia rcc clemei. O astfel de problem este alegerea mutrilor ntr-un joc (de exemplu, n jocul de xil- algoritmul poate dezvolta un arbore, care are n rdcin starea curent i fii rdcinii smt toate mutrile posibile. Fiecare dintre fii rdcinii este repartizat (ca fiind starea curent) zrui proces, care alege cea mai bun mutare, innd cont i de mutrile adversarului. Apoi se ilege dintre aceste soluii foarte bune, pe cea mai bun.

    Un alt exemplu este descompunerea datelor, cnd se partajeaz datele pe procese aceeai idee ca n cazul SIMD din clasificarea Flynn). Datele de intrare se partajeaz dac se

    execut o interogare pe o baz de date distribuit: de la fiecare centru de stocare se recepioneaz rezultatele intermediare, care sunt asamblate pe sistemul clientului. Descompunerea datelor de ieire se poate realiza dac se consider calculele numeric tensive, de exemplu problema 1 de la subcapitolul 4.1.

    Descompunerea problemei este extrem de important n calitatea aplicaiei care o -ezoh , deoarece determin echilibrul, ncrcarea i comunicaiile ntre procese.

    47

  • Capitolul 5

    Tehnici efective de paralelizare

    n acest capitol sunt prezentate cteva metode de paralelizare pentru aplicaii des ntlnite n proiectele software. Am ales dou exemple din calculul numeric i cteva rrobleme conexe sortrii, pentru a ilustra posibiliti diverse de paralelizare; la fiecare rroblem am evideniat specificul su, avantajele metodei alese, dar i dezavantajele sale. Rmne ca programatorul s decid modul efectiv de implementare a paralelizrii, n funcie de problem, infrastructur i propria experien.

    5.1. Paralelizarea calculului numeric

    Calculul numeric este un domeniu n care utilizarea resurselor de calcul n paralel aduce mari avantaje i se realizeaz relativ uor, existnd situaii n care descompunerea problemei este oarecum natural. Dintre probleme care se preteaz abordrii prin calculul paralel, n continuare este prezentat n detaliu Metoda lui Gauss a eliminrii succesive pentru rezolvarea sistemelor liniare de ecuaii. Vom ncepe cu descrierea problemei, vom continua cu metoda secvenial de rezolvare, urmat de o metod paralel i vom ncheia cu cteva concluzii.

    A rezolva un sistem de ecuaii liniare nseamn a gsi variabilele reale (jc,) ls is, n e N care satisfac simultan ecuaiile:

    "ax, + al2x2+...alrtx =bx a2lxl+a22x2+...a2nxn =b2

    a^x+an2x2+...annxn =bn

    unde (a iy)IMS i (b,)Kiin sunt numere reale.

    Aceast problem este echivalent cu gsirea unui vector x cu n elemente reale care s satisfac ecuaia matriceal A-x-b, unde A este matricea coeficienilor i b este vectorul termenilor liberi ai sistemului considerat.

    n acest curs vom considera c sistemul are o soluie unic i c toate operaiile de mprire descrise n metoda de rezolvare se pot executa (la nevoie ecuaiile se permut). Metoda lui Gauss a eliminrii succesive const din dou etape:

    1. ecuaiile se transform n mod repetat pn cnd sistemul ajunge la forma triunghiular-superioar

    x \ + cux2 x =d [ x2 +... c2n Xn d2

    x = d n n 2. se rezolv sistemul de jos n sus".

    49

  • 5.1.1. Exemplu de rezolvare prin metoda lui Gauss

    Pentru a avea o perspectiv asupra metodei generale de rezolvare, vom ncepe prin a rezolva prin metoda lui Gauss urmtorul sistem liniar de 3 ecuaii cu 3 necunoscute ( Xj X2 5 Xj ^ ^

    2x, + 2x2 + 2x} = 6 < 2xt + 4x2 + 6x3 = 12

    3.x, -6x2 -9x3 = - 1 2 Prima etap ncepe prin mprirea coeficienilor primei ecuaii la 2, pentru a se obine

    coeficientul lui xj egal cu 1 (.se normalizeaz prima ecuaie): "i- X2 3

    x] + 4jc, +6a:3 = 12 3xt - 6x2 - 9x3 - - 1 2

    Pasul urmtor const n eliminarea variabilei x j din ecuaiile 2 i 3. Pentru a atinge acest el vom nmuli prima ecuaie cu 2 i o vom scdea din cea de-a doua. La fel, o vom nmuli pe prima cu 3 i o vom scdea din a treia:

    Xj X2 X

    2xt + 4x2 + 6X3 3 | ( 2 ) | ( 3 )

    12 3x. 6X2 -9X 3 = - 1 2

    x3 = 3

    2X2 + 4jc3 = 6

    - 9X2 -1 2JC3 = 21

    ncepnd de la acest moment, prima ecuaie va rmne neschimbat pn la sfritul acestei etape. Ultimele dou ecuaii constituie un sistem de dou ecuaii cu dou necunoscute, pentru care aplicm din nou metoda reducerii. Vom mpri prima dintre aceste dou ecuaii cu 2 (o vom normaliza) i astfel sistemul devine:

    ^ 1 ^ X 3

    x2 + 2x} = 3 9x2 -12X 3 = - 2 1

    La pasul urmtor se nmulete aceast ecu