मेरे पास एक लूप है जिसे किसी शर्त के आधार पर schedule(static)
या schedule(dynamic, 10)
का उपयोग करके निष्पादित किया जा सकता है। वर्तमान में, मेरे कोड सूखी नहीं है (अपने आप को दोहराना नहीं) पर्याप्त और पिछले कार्यक्षमता यह निम्नलिखित पुनरावृत्ति है समायोजित करने के लिए:ओपनएमपी सशर्त प्रगति "अगर अन्य"
boolean isDynamic; //can be true or false
if(isDynamic){
#pragma omp parallel for num_threads(thread_count) default(shared) private(...) schedule(dynamic, 10)
for(...){
//for code inside
}
}else{
#pragma omp parallel for num_threads(thread_count) default(shared) private(...) schedule(static)
for(...){
//SAME for code inside, in fact, this is the EXACT same for as before
}
}
इन धागों को पढ़ने के बाद, मैंने देखा है OpenMP एक #if(expression)
pragma है:
- OpenMP: conditional use of #pragma
- http://msdn.microsoft.com/en-us/library/5187hzke.aspx
- Choose OpenMP pragma according to condition
- Conditional "pragma omp"
- http://openmp.org/mp-documents/ntu-vanderpas.pdf
लेकिन हालांकि मैं मेरी समस्या के साथ कई लोगों को देखा है, वहाँ एक सामान्य समाधान कमी जा रहा है। सबसे अच्छा समाधान लूप के शरीर को फ़ंक्शन में बदलने के लिए है, और उसके बाद फ़ंक्शन कहा जाता है, लेकिन यह समाधान मेरे लिए पर्याप्त नहीं है।
तो मुझे आश्चर्य है, क्या ओपनएमपी में #if(expression) else
प्रज्ञा का प्रकार है? कुछ की तरह:
#if(isDynamic)pragma omp parallel for num_threads(thread_count) default(shared)
private(...) schedule(dynamic, 10)
else
pragma omp parallel for num_threads(thread_count) default(shared)
private(...) schedule(static)
या हूँ मैं एक अलग समारोह में पाश शरीर के लिए मेरी जगह है और इसे उस तरह से कॉल करने के लिए मजबूर कर दिया?
मुझे लगता है कि आप इस सुझाव के बारे में बात कर रहे हैं (http://stackoverflow.com/questions/4085595/conditional-pragma-omp/4087196#4087196)। टीबीएच, मुझे नहीं लगता कि यहां तक कि संकलित भी है, OMP_FOR को भी परिभाषित नहीं किया गया है। जहां तक OMP_SCHEDULE जाता है मुझे इसके बारे में कोई जानकारी नहीं थी। मैं चारों ओर देखने की कोशिश करूंगा और देख सकता हूं कि मैं क्या पा सकता हूं, थक्स! –