Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  OpenMP/libgomp ja nested tsüklid märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
UglyOgre
HV kasutaja
UglyOgre

liitunud: 25.03.2004



Autoriseeritud ID-kaardiga

sõnum 01.05.2008 02:30:33 OpenMP/libgomp ja nested tsüklid vasta tsitaadiga

Tere,

Äkki keegi OpenMP/libgomp-i kogemusega inimene seletaks, kuidas seda korrektselt kasutada nested tsüklite puhul. Idee pseudokood on umbes selline:
c:
  1. for (i=1; i<CONST; i++){
  2.         a = array[i-1];
  3.         b = array[i] - array[i-1];
  4.         c = 0;
  5.         for(j=a; j<a+b; j++){
  6.                 if (foo(array2[j]) > 0){
  7.                         c++;   
  8.                 }
  9.         }
  10.         if (c > 0){
  11.                 /*tee midagi*/
  12.         }
  13. }

Dokumentatsiooni (OpenMP v2.5) näide on selline:
c:
  1. void work(int i, int j) {}
  2. void good_nesting(int n)
  3. {
  4.   int i, j;
  5.   #pragma omp parallel default(shared)
  6.   {
  7.     #pragma omp for
  8.     for (i=0; i<n; i++) {
  9.       #pragma omp parallel shared(i, n)
  10.       {
  11.         #pragma omp for
  12.         for (j=0; j < n; j++)
  13.           work(i, j);
  14.       }
  15.     }
  16.   }
  17. }

Kuid selle järgi tehes läbitakse välimise tsükli iga etappi millegipärast 2 korda. Samuti ei ole ma ka päris kindel, millised muutujad tuleb välimiselt tsüklilt sisemisele edasi saata. Igasugused ideed ja arvamused on teretulnud.
Kommentaarid: 19 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 16
tagasi üles
vaata kasutaja infot saada privaatsõnum
spikhoff
HV veteran

liitunud: 26.01.2005



Autoriseeritud ID-kaardiga

sõnum 01.05.2008 08:56:26 Re: OpenMP/libgomp ja nested tsüklid vasta tsitaadiga

Aga topi printf funktsioonid vahele? Saad n2ha mitu kord tsykkel l2bi k2idi, siis muuda tsyklite argumente ja vaatad mis juhtub.

c:
  1. for (i=1; i<CONST; i++){
  2.         printf('esimene tsykkel');
  3.         a = array[i-1];
  4.         b = array[i] - array[i-1];
  5.         c = 0;
  6.         for(j=a; j<a+b; j++){
  7.                 printf('teine tsykkel');
  8.                 if (foo(array2[j]) > 0){
  9.                         c++;   
  10.                 }
  11.         }
  12.         if (c > 0){
  13.                 /*tee midagi*/
  14.                 printf('cga tehakse midagi')
  15.         }
  16. }
Kommentaarid: 59 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 54
tagasi üles
vaata kasutaja infot saada privaatsõnum
UglyOgre
HV kasutaja
UglyOgre

liitunud: 25.03.2004



Autoriseeritud ID-kaardiga

sõnum 01.05.2008 19:20:32 vasta tsitaadiga

Tundub, et sain oma mure lahendatud (iseasi kui korrektselt, loomulikult). Idee sain sellest artiklist, lühidalt öeldes muutsin threadi piires privaatseks tsüklitest sõltuvad muutujad. Pisut segane see seletus sai, aga koodis näeb see välja umbes nii:
c:
  1.  
  2. #pragma omp parallel for private (i, j, a, b, c )
  3.       for (i=1; i<CONST; i++){
  4.               a = array[i-1];
  5.               b = array[i] - array[i-1];
  6.               c = 0;
  7.               for(j=a; j<a+b; j++){
  8.                       if (foo(array2[j]) > 0){
  9.                               c++;   
  10.                       }
  11.               }
  12.               if (c > 0){
  13.                       /*tee midagi*/
  14.               }
  15.       }
  16.  
Kommentaarid: 19 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 16
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  OpenMP/libgomp ja nested tsüklid
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.