Virginia Niculescu CALCUL PARALEL Proiectare ¸si dezvoltare formal˘a a programelor paralele 2005 ii blanc iii Familiei mele iv Cuprins Prefa¸t˘a ix I Fundamente 1 1 No¸tiuni generale 3 1.1 Clasific˘ari ale sistemelor paralele . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.1 Clasificarea lui Flynn . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 Alte clasificari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 Criterii de performan¸t˘a ale sistemelor paralele . . . . . . . . . . . . . . . 11 1.3 Re¸tele de interconectare a procesoarelor . . . . . . . . . . . . . . . . . . . 12 1.3.1 Topologii de baz˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3.2 Problema includerii . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.3 Comunica¸tiaˆın re¸tele . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4 Niveluri la care poate apare paralelism . . . . . . . . . . . . . . . . . . . 20 1.5 Clasificarea algoritmilor paraleli . . . . . . . . . . . . . . . . . . . . . . . 22 1.6 Modelul standard PRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.7 M˘asurarea performan¸tei algoritmilor paraleli . . . . . . . . . . . . . . . . 27 1.7.1 Complexitatea-timp . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.7.2 Accelera¸tia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.7.3 Eficien¸ta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1.7.4 Costul ¸si volumul de lucru . . . . . . . . . . . . . . . . . . . . . . 32 1.7.5 Paralelism limitat ¸si nelimitat . . . . . . . . . . . . . . . . . . . . 33 1.7.6 Teorema lui Brent . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.7.7 Clasa problemelor NC . . . . . . . . . . . . . . . . . . . . . . . . 37 2 Construc¸tia programelor paralele 39 2.1 Etapeˆın dezvoltarea programelor paralele . . . . . . . . . . . . . . . . . 40 2.1.1 Parti¸tionarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.1.2 Analiza comunica¸tiei . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.1.3 Aglomerarea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.1.4 Maparea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 vi CUPRINS II Proiectare 49 3 Paradigme 51 3.1 Master/Slave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.2 Work Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.3 Paralelism al datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.4 Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.5 Divide&impera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.6 Alte clasific˘ari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4 Tehnici 57 4.1 Tehnica paraleliz˘arii directe . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.2 Tehnica arbore binar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.3 Tehnica dubl˘arii recursive . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.4 Contrac¸tia arborescent˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.5 Tehnica reducerii ciclice par-impar . . . . . . . . . . . . . . . . . . . . . 72 4.6 Tehnica divide&impera . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.7 Algoritmii generici Ascend ¸si Descend . . . . . . . . . . . . . . . . . . 78 4.8 Tehnica calculului sistolic (pipeline) . . . . . . . . . . . . . . . . . . . . . 82 4.9 Tehnica par-impar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.10 Prefix paralel – Scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.11 Branch-and-Bound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.12 Adaptarea algoritmilor paraleli . . . . . . . . . . . . . . . . . . . . . . . 101 4.13 S¸abloane de programare (Skeletons) . . . . . . . . . . . . . . . . . . . . . 107 4.14 Cˆa¸tiva algoritmi paraleli remarcabili . . . . . . . . . . . . . . . . . . . . 108 4.14.1 Sortare bitonic˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 ˆ 4.14.2 Inmul¸tire matriceal˘a . . . . . . . . . . . . . . . . . . . . . . . . . 112 4.15 Memorie partajat˘a versus memorie distribuit˘a . . . . . . . . . . . . . . . 115 4.15.1 Programare paralel˘a bazat˘a pe transmitere de mesaje . . . . . . . 115 4.15.2 Programare paralel˘a bazat˘a pe memorie partajat˘a . . . . . . . . . 120 4.15.3 Memorie partajata˘ distribuit˘a . . . . . . . . . . . . . . . . . . . . 121 III Dezvoltare formal˘a 123 5 Modelul UNITY 125 5.1 Prezentarea general˘a a teoriei . . . . . . . . . . . . . . . . . . . . . . . . 125 5.1.1 Separarea no¸tiunilor: programe ¸si implement˘ari . . . . . . . . . . 125 5.2 Nota¸tia programelor UNITY . . . . . . . . . . . . . . . . . . . . . . . . . 126 5.2.1 Instruc¸tiunea de atribuire . . . . . . . . . . . . . . . . . . . . . . 126 5.2.2 Sec¸tiunea assign . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 5.2.3 Sec¸tiunea initially . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.2.4 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.2.5 Sec¸tiunea always . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 CUPRINS vii 5.3 Reguli de demonstrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.3.1 No¸tiuni de baz˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.3.2 Un model al execu¸tiei programului . . . . . . . . . . . . . . . . . 131 5.3.3 Concepte fundamentale . . . . . . . . . . . . . . . . . . . . . . . . 132 5.3.4 Un exemplu complet –ˆımp˘ar¸tireˆıntreag˘a . . . . . . . . . . . . . . 134 5.4 Maparea programelor pe arhitecturi . . . . . . . . . . . . . . . . . . . . . 138 5.5 Aplica¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 5.5.1 Eliminare Gauss-Jordan nedeterminist˘a . . . . . . . . . . . . . . . 138 5.5.2 Inversa unei matrice ¸si rezolvare de sistem liniar . . . . . . . . . . 142 ˆ 5.5.3 Inmul¸tirea matricelor booleene . . . . . . . . . . . . . . . . . . . . 144 6 Dezvoltare formal˘a din specifica¸tii 153 6.1 Descrierea metodei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.1.1 Construc¸tia programelor paralele . . . . . . . . . . . . . . . . . . 155 6.1.2 Specifica¸tii func¸tionale . . . . . . . . . . . . . . . . . . . . . . . . 155 6.1.3 Invarian¸ti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 6.1.4 Corectitudinea . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.1.5 Nota¸tia programelor . . . . . . . . . . . . . . . . . . . . . . . . . 158 6.1.6 Reguli de demonstrare . . . . . . . . . . . . . . . . . . . . . . . . 159 6.1.7 Procese de comunica¸tie . . . . . . . . . . . . . . . . . . . . . . . . 163 6.1.8 Complexitatea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 6.1.9 Regula ParSeq . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 6.2 Distribu¸tia datelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 6.2.1 Distribu¸tii simple . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 6.2.2 Distribu¸tii multivoce . . . . . . . . . . . . . . . . . . . . . . . . . 175 6.3 Aplica¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 6.3.1 Opera¸tii prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 ˆ 6.3.2 Inmul¸tire matriceal˘a . . . . . . . . . . . . . . . . . . . . . . . . . 182 6.3.3 Polinomul de interpolare Lagrange . . . . . . . . . . . . . . . . . 186 7 Formalismul Bird-Meertens – BMF 195 7.1 Omeomorfisme pe liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 7.1.1 Extragere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 7.1.2 Aproape-omeomorfisme . . . . . . . . . . . . . . . . . . . . . . . . 201 7.2 Implementare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 7.2.1 Sortare prin num˘arare . . . . . . . . . . . . . . . . . . . . . . . . 204 7.3 Tipuri de date categoriale . . . . . . . . . . . . . . . . . . . . . . . . . . 208 7.3.1 Tipul arbore binar omogen . . . . . . . . . . . . . . . . . . . . . . 210 8 Structuri de date pentru paralelism 213 8.1 Structuri de date PowerList . . . . . . . . . . . . . . . . . . . . . . . . . 214 8.1.1 Defini¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 8.1.2 Principiul induc¸tiei pentru PowerList . . . . . . . . . . . . . . . 216 8.1.3 Operatori, rela¸tii ¸si func¸tii . . . . . . . . . . . . . . . . . . . . . . 216 viii CUPRINS 8.1.4 Complexitatea func¸tiilor definite pe PowerList . . . . . . . . . . 218 8.1.5 Maparea pe hipercuburi . . . . . . . . . . . . . . . . . . . . . . . 219 8.1.6 Aplica¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 8.2 Structuri de date ParList . . . . . . . . . . . . . . . . . . . . . . . . . . 222 8.2.1 Defini¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 8.2.2 Un principiu al induc¸tiei pentru ParList . . . . . . . . . . . . . . 224 8.2.3 Operatori, rela¸tii ¸si func¸tii . . . . . . . . . . . . . . . . . . . . . . 226 8.2.4 Aplica¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 8.3 Structuri de date PList . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.3.1 Defini¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.3.2 Un principiu al induc¸tiei pentru PList . . . . . . . . . . . . . . . 232 8.3.3 Aplica¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 8.4 Transformarea Fourier rapid˘a . . . . . . . . . . . . . . . . . . . . . . . . 235 8.4.1 Cazul n=2k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 8.4.2 Cazul n prim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 8.4.3 Cazul n = r r ...r . . . . . . . . . . . . . . . . . . . . . . . . . 238 1 2 p 8.5 Structuri de date n-dimensionale . . . . . . . . . . . . . . . . . . . . . . 241 8.5.1 Defini¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 8.5.2 Un principiu al induc¸tiei pentru PowerArray . . . . . . . . . . . 242 8.5.3 Operatori, rela¸tii ¸si func¸tii . . . . . . . . . . . . . . . . . . . . . . 243 8.5.4 Aplica¸tii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 8.5.5 Evaluarea rela¸tiilor de recuren¸t˘a . . . . . . . . . . . . . . . . . . . 248 IV Modele 253 9 Modele de calcul paralel 255 9.1 Caracteristicile unui model de calcul paralel ideal . . . . . . . . . . . . . 255 9.2 Clasificarea modelelor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 9.2.1 Paralelism implicit . . . . . . . . . . . . . . . . . . . . . . . . . . 263 9.2.2 Descompunere implicit˘a . . . . . . . . . . . . . . . . . . . . . . . 271 9.2.3 Descompunere explicit˘a . . . . . . . . . . . . . . . . . . . . . . . 274 9.2.4 Mapare explicit˘a . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 9.2.5 Comunica¸tie explicit˘a . . . . . . . . . . . . . . . . . . . . . . . . . 279 9.2.6 Totul explicit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Anex˘a – No¸tiuni de teoria grafurilor 287 Bibliografie 290 Index 300 Prefa¸t˘a ˆ In timp ce multe probleme de mare interes practic cer tot mai mult˘a putere de calcul, viteza componentelor calculatoarelor se apropie de limitele posibile. Esteˆın general ac- ceptat¸si chiar dovedit faptul c˘a aceste probleme ce necesit˘a calcul intensiv nu vor putea fi rezolvate prin cre¸sterea continu˘a a performan¸telor calculatoarelor individuale, ci singura solu¸tie viabil˘a este folosirea calculului paralel. Ma¸sinile paralele, constˆand din mii de procesoare, ofer˘a o putere de calcul foarte mare pentru aplica¸tii complexe. Comunitatea poten¸tialilor utilizatori cre¸ste foarte puternic ¸si datorit˘a re¸telelor globale, care aduc hard, soft ¸si expertize din surse dispersate geogra- fic. Totu¸si, calculul paralel nu a devenit deocamdat˘a, o cale de rezolvare mai rapid˘a a problemelor, cu o foarte larg˘a r˘aspˆandire. ˆ In acest moment programarea paralel˘a este proiectat˘a,ˆın general, pentru tipuri spe- ciale de arhitecturi¸si de aceea mutarea unui program de pe o arhitectur˘a pe alta, necesit˘a rescrierea lui aproape ˆın ˆıntregime. Singura cale de a dep˘a¸si aceast˘a problem˘a ¸si de a folosi paralelismul pe scar˘a larg˘a, este de a distruge aceast˘a conexiune strˆans˘a dintre soft ¸si hard. Scopul principal al paralelismului este performan¸ta, dar aceasta esteˆın acela¸si timp ¸si sursa principal˘a a dificult˘a¸tilor legate de paralelism. Pentru a proiecta o solu¸tie paralel˘a eficient˘a, programatorul trebuie s˘a descompun˘a problemaˆıntr-o colec¸tie de procese care se pot executa simultan, s˘a mapeze procesele pe procesoarele disponibile, s˘a sincronizeze procesele, s˘a organizeze comunica¸tiile, etc. Pentru acestea s-au dezvoltat numeroase familii particulare de algoritmi, limbaje ¸si tehnici de implementare, pentru diferite tipuri de arhitecturi. Crizaprogram˘ariisecven¸tialeaeviden¸tiatnecesitateaabstractiz˘arii¸siascunderiideta- ˆ liilor nivelului de jos de programare. In programarea paralel˘a, necesitatea abstractiz˘arii este ¸si mai acut˘a, datorit˘a complexit˘a¸tii programelor paralele. Dac˘a programatorii de aplica¸tii, consider˘a abstractizarea foarte necesar˘a, totu¸si implementatorii programelor paralele sunt de p˘arere c˘a aceasta intr˘aˆın conflict cu performan¸ta. Reconcilierea dintre abstractizare ¸si performan¸t˘a, pare a fi calea prin care programarea paralel˘a s-ar putea impune mai multˆın viitor. ˆ In procesul de dezvoltare a unui program se pot identifica trei etape: Specificarea. Construirea formal˘a a unei descrieri a problemei care trebuie s˘a fie rezol- vat˘a. Aceast˘a descriere exprim˘a esen¸ta problemei. Specifica¸tia trebuie s˘a ajute la demonstrarea formal˘a a corectitudinii programului rezultatˆın final. ˘ x PREFAT¸A Figura 1: Rolul modeluluiˆın calculul paralel Proiectarea. Sarcina de a crea un “program”, care s˘a satisfac˘a specifica¸tia problemei ¸si care s˘a poate fi implementat eficient pe o arhitectur˘a ¸tint˘a. Implementarea. Maparea programului pe resursele de calcul disponibile pentru execu- ¸tia sa. Aceasta trebuie s˘a fie f˘acut˘a folosind instrumente ¸si tehnici, care au fost verificate formal. Proiectarea este o etap˘a fundamental˘a nu doar pentru aplica¸tiile de dimensiuni mari, dar ¸si ˆın cazul algoritmilor. Paradigme precum programarea structurat˘a, proiectarea “top-down” sau “bottom-up” sunt bine cunoscute. La nivel de algoritm, pentru pro- gramarea secven¸tial˘a, sunt de asemenea bine cunoscute tehnici de programare precum: greedy, backtraking, branch-and-bound, sau programarea dinamic˘a. Ele direc¸tioneaz˘a construc¸tia programelor, permit st˘apˆanirea complexit˘a¸tii oferind un cadru ¸stiin¸tific ¸si matematic ¸si, de asemenea, permit realizarea unor bune documenta¸tii. Pentruprogramareaparalel˘a, fazadeproiectareestepoatechiarmaiimportant˘adecˆat ˆın cazul program˘arii secven¸tiale, datorit˘a gradului ridicat al complexit˘a¸tii programelor paralele. Putem analiza, ¸siˆın acest caz, diferite paradigme consacrate, precum ¸si tehnici de programare care ghideaz˘a construc¸tia algoritmilor paraleli. ˆ Inprogramareasecven¸tial˘a, fazadeimplementareesterealizat˘adeobiceideuncompi- latorcapabils˘aproduc˘acodoptimizatpentruoarhitectur˘a¸tint˘a. Asemeneacompilatoare sunt posibile, deoarece majoritatea arhitecturilor secven¸tiale sunt similare la niveleˆınalte de abstractizare ¸si diferen¸tele de la nivelele de jos pot fi rezolvate de c˘atre compilator. ˆ In plus, datorit˘a arhitecturilor similare, limbajele de nivel ˆınalt pot fi proiectate, f˘ar˘a a sacrifica strategiile de compilare eficiente. Aceasta permite programatorilor de pro- grame secven¸tiale, luxul de a se concentra asupra corectitudinii ¸si complexit˘a¸tii abstracte a programelor, l˘asˆand compilatorului sarcina de a le implementa eficient ¸si corect. Arhitecturile paralele sunt foarte diferite unele de altele, chiar ¸si la nivele ˆınalte de abstractizare. O posibil˘a abordare este de a l˘asa limbajul s˘a reflecte particularit˘a¸tile arhitecturii – dar aceasta nu este totu¸si, o solu¸tie prea bun˘a. O alt˘a abordare ar fi de a face abstrac¸tie de considera¸tiile arhitecturale ¸si de a construi un limbaj de programare
Description: