Seminare: Kleona Binjaku Email: Kleona.Binjaku@fti.edu.al Seminar 1 SISTEMET PARALELE SISTEMET PARALELE Ekzekutimi i nje programi ne disa proçese/ threade Arsyeja kryesore: -Koha Programet Web Server Ekzekutimi i nje programi si nje thread i vetem: Cikel pritjeje Po nese intesiteti i kerkesave eshte i larte? Zgjidhja: Threadi rrenje Kerkese Fork Kerkese Fork Kerkese Fork Shembuj paralelizimi for ( int i=0; i< n; i++) read (a[i], b[i]); #pragma omp paralel for for ( int i=0; i< n; i++) c[i]=a[i]+b[i]; for ( int i=0; i< n; i++) write(c[i]); paralelizim Ne nje ekzekutim sekuencial do te kishim: t1 read (a[0], b[0]) read (a[n-1], b[n-1]) c[0]=a[0]+b[0] Koha e ekzekutimit: t2 T= t1+ t2+ t3 c[n-1]=a[n-1]+b[n-1] write (c[0]) t3 write (c[n-1]) Ekzekutim paralel i ciklit te dyte: read (a[0], b[0]) t1 read (a[n-1], b[n-1]) ti c[0]=a[0]+b[0] c[1]=a[1]+b[1] ..... c[n-1]=a[n-1]+b[n-1] write (c[0]) Koha e ekzekutimit per n thread-e t2 Tn= t1+ ti+ t3 =t1+ t2/n +t3 write (c[n-1]) Ekzekutim paralel i te 3 cikleve: #pragma omp paralel for for ( int i=0; i< n; i++) read (a[i], b[i]); #pragma omp paralel for for ( int i=0; i< n; i++) c[i]=a[i]+b[i]; #pragma omp paralel for for ( int i=0; i< n; i++) write(c[i]); Shkurtim i paster i kohes se ekzekutimit Tn= (t1+t2+t3)/n KUJDES! Iteracionet ne cikle nuk duhet te varen nga njeri-tjetri. Ne shembullin e mesiperm kemi supozuar se kompilatori vendos numrin e threadeve sa numri i iteracioneve (n). (Nese duam te percaktojme vete numrin e threadeve: #pragma omp paralel for num_threads(m) ) Qe shkurtimi i kohes te vihet re, duhet qe cdo thread te ekzekutohet ne proçesor/core me vete. Shembull 2 Shuma e elementeve te nje vektori. s=∑ a[i] s=0; for(i =0; i<n; i++) s=s+a[i]; t0 s=0 Cdo iteracion perdor rezultatin e paraardhesit A kemi perfitim? s=s+ a[0] s=s+ a[1] s=s+ a[2] Po sikur te ndryshojme algoritmin? S= a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + ……. + + + + + + + 1 2 3 a[0]+a[1] + + a[2]+a[3] a[4]+a[5] a[6]+a[7] . . . + Hapi 1 : n/2 threade Hapi 2: n/4 threade Hapi 3: n/8 threade Shfrytezim jo i mire i procesoreve Rast qe supozon se numri i threadeve eshte i krahasueshem me numrin e elementeve qe mblidhen E ndajme shumen ne shuma te pjesshme S= a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + ……. S0 S1 nr. thread-eve s=0; for ( k=0; k<t; k++) { s’=0; for( i=0,j=k*t; i< n/t; i++,j++) s’=s’+a[j]; s=s+s’; } S2