Programare paralelă folosind biblioteca PJ2
-
Upload
iacob-madalina -
Category
Documents
-
view
238 -
download
1
description
Transcript of Programare paralelă folosind biblioteca PJ2
FACULTATEA DE AUTOMATIC I CALCULATOARE
CATEDRA CALCULATOARE
PROIECTla disciplina
Calcul Paralel i DistribuitProgramare paralel folosind biblioteca PJ2Delia GuitaMdlina IacobAn academic :2014 2015PROIECT de SEMESTRU
Catedra de Calculatoare
Disciplina : Calcul Paralel si Distribuit
Coordonator: s.l. ing. Cosmina IVAN
Data: 13-01-2015AbstractProiectul de fa prezint studiul programrii paralele folosind biblioteca PJ2. Lucrarea a fost ntocmit n baza unor exemple de utilizare a bibliotecii PJ2, evideniind avantajele acestei abordri prin implementarea algoritmilor exemplificai, att secvenial ct i paralel.Cuprins
iii1.Introducere
iii2.Studiu bibliografic
vi3.Elemente de implementare
vi3.1.Aproximarea lui PI
vii3.2.Generarea setului Mandelbrot
x4.Evaluare
x4.1.Evaluare algoritm pentru aproximarea lui PI
xii4.2.Evaluare algoritm pentru generarea setului Mandelbrot
xiv5.Concluzii
xv6.Bibiografie
1. IntroducereParallel Java 2 (PJ2) este o librrie de clase java care suport programare cu memorie distribuit, pentru calculatoare cu mai multe nuclee; programare paralel cu pasare de mesaje; programare paralel pentru accelerare GPU.
Pentru programarea pe mai multe nuclee, PJ2 furnizeaz buclele paralele i sectiunile paralele care sunt similare conceptual cu OpenMP. PJ2 suport reducerea claselor de variabile pentru tipurile primitive cu operaii de reducere predefinite: sum, minimum, maximum, dar putem defini i propriile clase.
Libraria PJ2 este gratuit, sub licenta GNU GLP, i este disponobil pe site-ul autorului. Versiunea de download include toate fisierele surs Java, i documentaia Javadoc. PJ2 ruleaz pe orice sistem cu versiune de Java 1.7 sau mai mare.2. Studiu bibliografic
Calculul paralel abordeaz problema proiectrii programelor astfel nct acestea s aib dou caracteristici: s ruleze pe mai multe procesoare (sau core-uri) i toate procesoarele s coopereze ntre ele pentru a rezolva o singur problem.Calculul paralel are aplicabilitate n vaste domenii cum ar fi: matematic (algebr liniar, teoria grafurilor), tiine (prognoza meteo, astrifizic, chimie), inginerie computaional (dinamica fluidelor, analiza elementelor finite), analiza datelor Big data analytics (data mining, indexarea paginilor web), securitate i criptografie, .a. [1]Arhitecturile paralele ofer o soluie de cretere a performanei sistemelor de calcul. Dac un algoritm secvenial specific execuia secvenial a aunui set de instruciuni, atunci un algoritm paralel permite executarea mai multor algoritmi secveniali, simultan ca procese paralele.[2]
Figur 1 Calculator cu un singur nod i un singur procesor
Figur 2 Calculator cu un singur nod i procesoare multiple
Conceptul calculului paralel se bazeaz n mare msur pe imbuntirea performanei. Astfel au fost definite diferite metrici de performan pentru programele paralele, care au la baz urmtoarea terminologie: Dimensiunea problemei N reprezint numrul de calcule pe care programul trebuie s le efectueze
Programul ruleaz pe un anumit numr de core-uri (nuclee) K. Pentru varianta secvenial se consider K=1.
Timpul de rulare T este timpul necesar prograului pentru a rula i depinde de dimensiune problemei i numrul de nuclee: T(N,K).Scalarea se refer la rularea programului pe un numr cresctor de nuclee. Exist dou moduri de scalare a unui program: strong scaling i weak scaling. n cazul scalrii tari (strong scaling) la creterea numrului de nuclee, dimensiune problemei rmne constant i astfel timpul scade la 1/K pentru calcularea rspunsului (speedup), iar n cazul scalrii slabe (weak scaling) dimensiunea problemei crete proporional cu numrul de nuclee, timpul rmnnd acelai pentru o dimensiune a problemei de K ori mai mare (sizeup).
Figur 3 Scalare tare
Figur 4 Scalare slab
Viteza de calcul reprezint numrul de calcule efectuate ntr-o secund:
R(N ,K) = N/T(N ,K) Speedup: Speedup(N,K)=Tseq(N,1)/Tpar(N,K)
Eficien: Eff(N,K)=Speedup(N,K)/K
Legea lui Amdahl susine faptul c de obicei o singur poriune dintr-un program poate fi paralelizat, restul programului rulnd pe un singur nucleu, indiferent de numrul de nuclee disponibile. Astfel se impune o linit speed-upului care se poate obine n ura scalrii tari.
T(N,K) = F*T(N,1)+(1-F)*T(N,1)/K,
unde F este fraciune de timp din timpul total de rulare n care programe este executat de un singur nucleu.
Figur 5 Scalare tare cu o fraciune de timp secvenial3. Elemente de implementare
Analiza eficienei i exemplificarea scalrii tari s-a efectuat pe doi algoritmi: aproximarea lui PI i generarea setului Mandelbrot.3.1. Aproximarea lui PI
Se consider o tabl ptrat de darts cu latura de diemensiunea 1 ce conine un cadran de cerc. Se genereaz N(x,y) puncte aleatorii pe aceast tabl i se vor numra punctele care sunt n interiorul cadranului de cerc. (x2+y21), notate C. Astfel se va calcula valoarea lui PI ca fiind aproximarea: 4C/N.
Figur 6 Tabl folosit pentru estimarea lui PI
Un program secvenial pentru acest algoritm va genera N, va numra C i apoi va calcula PI. Varianta paralel a algoritmului, n schimb, presupune mprirea lui N la numrul de thread-uri corespunztor numrului de core-uri, fiecare thread calculnd C-ul corespunztor, n final nsumndu-se aceste valori. Se va obine apoi valoare lui PI. Procesul de combinare a mai multor thread-uri ntr-unul (n cazul de fa la nsumarea C-urilor) se numete reducere paralel (parallel reduction).
Figur 7 Estimarea lui PI-algoritm secvenial i paralelPentru evidenierea rolului calculului distribuit, trebuie considerat N foarte mare. Condiia ca programul sa fi e secvenial, folosind PJ2, este ca metoda coresRequired() s fie suprascris asftfel nct s returneze valoare 1, reprezentnd sigurul core folosit de aplicaie. Dac nu se va suprascrie metoda, middleware-ul va consider c programul folosete toate core-urile disponibile.
n cazul implementrii paralele se folosete o bucl special numit parallelFor care va parcurge toate argumentele din linia de comand, crend astfel un obiect parallel loop. Se apeleaz metoda exec care duce la crearea unei noi bucle care conine metoda run unde s gsete codul pentru calculul propriu-zis. Prin apelul metodei threadLocal() se obine obiectul local thread-ului.[1]3.2. Generarea setului Mandelbrot
Setul Mandelbrot (Figura 8) este unul dintre cele mai faimoase obiecte fractale descoperite. Este numit n onoarea matematicianului Benoit Mandelbrot care a studiat acest set.
Punctele din setul Mandelbrot sunt negre, iar cele din afara setului sunt colorate, n functie de valoarea unui contor i . Banda roie din partea stng a imaginii corespunde valorii 1 a contorului, urmtoarea valorii 2, i aa mai departe. Tehnic, un punct este n setul Mandelbrot, doar dac a^2+b^2