के साथ अनुक्रमिक लूप में समांतर लूप को कैसे घोंसला करना है मैं वर्तमान में ओपनएमपी के साथ मैट्रिक्स गणना पर काम कर रहा हूं। मेरे कोड में मेरे पास कई लूप हैं, और इसके बजाय प्रत्येक लूप #pragma omp के लिए समानांतर कॉल करने के लिए [...] (जो सभी धागे बनाते हैं और उन्हें ठीक से नष्ट कर देते हैं) मैं शुरुआत में उन सभी को बनाना चाहता हूं, और ओवरहेड से बचने के लिए कार्यक्रम के अंत में उन्हें हटा दें। मैं चाहता हूँ की तरह कुछ:ओपनएमपी
#pragma omp parallel
{
#pragma omp for[...]
for(...)
#pragma omp for[...]
for(...)
}
समस्या यह है कि मैं कुछ भागों है उन केवल एक धागा द्वारा निष्पादित किया जाना है, लेकिन एक पाश, जिसमें में लूप उन समानांतर में निष्पादित रहना होगा ... यह यह कैसा दिखाई देता है:
//have to be execute by only one thread
int a=0,b=0,c=0;
for(a ; a<5 ; a++)
{
//some stuff
//loops which have to be parallelize
#pragma omp parallel for private(b,c) schedule(static) collapse(2)
for (b=0 ; b<8 ; b++);
for(c=0 ; c<10 ; c++)
{
//some other stuff
}
//end of the parallel zone
//stuff to be execute by only one thread
}
(पाश सीमाओं मेरी उदाहरण में काफी छोटे हैं मेरे कार्यक्रम में पुनरावृत्तियों की संख्या 20.000 जब तक चला जाता है कर सकते हैं ...।) मेरा पहला विचार में से एक इस तरह कुछ करने के लिए था :
//have to be execute by only one thread
#pragma omp parallel //creating all the threads at the beginning
{
#pragma omp master //or single
{
int a=0,b=0,c=0;
for(a ; a<5 ; a++)
{
//some stuff
//loops which have to be parallelize
#pragma omp for private(b,c) schedule(static) collapse(2)
for (b=0 ; b<8 ; b++);
for(c=0 ; c<10 ; c++)
{
//some other stuff
}
//end of the parallel zone
//stuff to be execute by only one thread
}
}
} //deleting all the threads
यह संकलित नहीं करता है, मुझे यह त्रुटि जीसीसी से मिलती है: "कार्य-साझाकरण क्षेत्र को कार्य-साझाकरण, महत्वपूर्ण, आदेशित, मास्टर या स्पष्ट कार्य क्षेत्र के अंदर घनिष्ठ रूप से घोंसला नहीं किया जा सकता है"।
मुझे पता है कि यह निश्चित रूप से "गलत" घोंसले से आता है, लेकिन मुझे समझ में नहीं आता कि यह क्यों काम नहीं करता है। क्या मुझे समांतर क्षेत्र से पहले बाधा जोड़ने की ज़रूरत है? मैं थोड़ा हारा हूं और यह नहीं जानता कि इसे कैसे हल किया जाए।
आपकी मदद के लिए अग्रिम धन्यवाद। चीयर्स।
आपके उत्तर के लिए धन्यवाद। मैं समानांतर के लिए एक आसान संरचना के लिए अपने कोड को पुन: व्यवस्थित करने का प्रयास करूंगा। – user3014051