2011-10-12 18 views
9

For döngüsü paralel hale getirmek için OpenMP'yi varolan bir kod tabanına ekledim. Çeşitli değişkenler bir işareti içeren, parallel for bölgenin kapsamı içine oluşturulur: Ben muhtemelen bir yarış durumu nedeniyle tutarsızlıkları fark çıkan çıkış dosyalarındaOpenMP paralel bölümlerinde işaretçiler özeldir?

#pragma omp parallel for 
for (int i = 0; i < n; i++){ 
    [....] 
    Model *lm; 
    lm->myfunc(); 
    lm->anotherfunc(); 
    [....] 
} 

. Sonunda bir omp critical kullanarak yarış koşulunu çözdüm. Benim sorum yine de: her iş parçacığına lm özel mi, yoksa paylaşılıyor mu?

cevap

10

Evet, OpenMP bölgesinde bildirilen tüm değişkenler gizlidir. Bu işaretçiler içerir.

Her iş parçacığı, işaretçinin kendi kopyasına sahip olacaktır.

Size böyle şeyler yapalım: cevap için

int threads = 8; 
int size_per_thread = 10000000; 

int *ptr = new int[size_per_thread * threads]; 

#pragma omp parallel num_threads(threads) 
    { 
     int id = omp_get_thread_num(); 
     int *my_ptr = ptr + size_per_thread * id; 

     // Do work on "my_ptr". 
    } 
+0

teşekkür ederiz. Spekülasyonları okuyarak, sanki öyle sanki _seemed_, ama biraz belirsizdi. – argoneus