[ Onna_27 @ 31.05.2007. 12:40 ] @
Spremam ispit i nikako nemogu da rijesim ovo pitanje. Nadam se da ce se naci neko da mi pomogne.


Explain what the following OpenMP code does using an SMP architecture with 2 processors? What is the problem with the code and how could it be fixed?

#pragma omp parallel for private(x)
for (i=0; i< N; i++){
x=(i+0.5)/N; // N is constant
area+=4.0/(1.0+x*x);
}



Upomoc :(
[ vlaiv @ 31.05.2007. 13:32 ] @
lupetam gluposti, ali hajde da probam ...

meni se cini da bi eventualno problem mogao nastati u sledecem slucaju ...

ako smp to razbija na dva procesora, dobijamo dva threada za izvrsavanje a oba koriste
istu promenljivu za sumiranje - area ... tu bi se moglo mnogo izgubiti na lockovanju i cekanju drugog thread-a da
doda svoju vrednost na area ...

takodje mi je sumnjivo i ovo N ... (ali nisam siguran)

nisam nesto radio u openMP ... ali obrati paznju (iz dokumentacije)

1. da li se citava stvar deli na sledece

K = N / 2

instance 1

Code:

for(i=0;i<K;i++){
  x=(i+0.5)/K; // ovde bi mogao nastati problem
  area+=4.0/(1.0+x*x);
}


i instance 2

Code:

for(i=K;i<N;i++){
  x=(i+0.5)/N; // ovo je ok ...
  area+=4.0/(1.0+x*x);
}


Da li treba na neki nacin obeleziti area promenljivu da bi se naglasilo da je u pitanju suma?
(da bi eventualno predprocesor to razbio na area1 i area 2 i na kraju area = area1+area2)

Nadam se da sam pomogao koliko mogu, onako cisto logicki gledano, to mi je palo na pamet ...