Programare paralelă folosind biblioteca PJ2

17
FACULTATEA DE AUTOMATICĂ ŞI CALCULATOARE CATEDRA CALCULATOARE PROIECT la disciplina Calcul Paralel și Distribuit Programare paralelă folosind biblioteca PJ2 Delia Guita Mădălina Iacob An academic :2014 – 2015 PROIECT de SEMESTRU Catedra de Calculatoare 1

description

Programare paralelă folosind biblioteca PJ2

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