2011-10-12 9 views
9

मैंने लूप को समानांतर करने के लिए मौजूदा कोड बेस में ओपनएमपी जोड़ा है। कई चर parallel for क्षेत्र के दायरे के अंदर बनाई गई हैं, एक सूचक सहित:ओपनएमपी समांतर वर्गों में पॉइंटर्स निजी हैं?

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

परिणामी आउटपुट फ़ाइलें मैं विसंगतियों, शायद एक रेस स्थिति की वजह से देखा है। मैंने अंततः omp critical का उपयोग करके दौड़ की स्थिति का समाधान किया। मेरा प्रश्न बनी हुई है, यद्यपि: lm प्रत्येक थ्रेड के लिए निजी है, या इसे साझा किया गया है?

उत्तर

10

हां, ओपनएमपी क्षेत्र के अंदर घोषित सभी चर निजी हैं। इसमें पॉइंटर्स शामिल हैं।

प्रत्येक थ्रेड में पॉइंटर की अपनी प्रति होगी।

यह आप इस तरह सामान करने देता है:

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

जवाब के लिए धन्यवाद। Spec पढ़ने से, यह _seemed_ जैसा कि मामला था, लेकिन यह थोड़ा अस्पष्ट था। – argoneus

संबंधित मुद्दे