Uploaded by kristi.ndoni

Seminar 1

advertisement
Seminare: Kleona Binjaku
Email:
[email protected]
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
Download