2011-10-21 15 views
15

मेरे पास ओपनएमपी pragmas के साथ सी ++ कोड है। मैं मल्टीथ्रेड मोड (ओपनएमपी के साथ) और सिंगल थ्रेड मोड (ओपनएमपी) में दोनों को इस कोड का परीक्षण करना चाहता हूं।ओपनएमपी निर्देशों को एक अच्छे तरीके से कैसे अक्षम करें?

अभी के लिए, मोड के बीच स्विच करने के लिए मुझे #pragma omp (या कम से कम parallel) पर टिप्पणी करने की आवश्यकता है।

OpenMP को सक्षम/अक्षम करने का सबसे साफ, या डिफ़ॉल्ट तरीका क्या है?

उत्तर

10

ओपनएमपी को अक्षम करने वाले स्विच के लिए कंपाइलर मैनुअल में देखें। जीसीसी के लिए, ओपनएमपी डिफ़ॉल्ट रूप से अक्षम है और -fopenmp विकल्प के साथ सक्षम है।

एक और विकल्प ओएमपी_NUM_THREADS पर्यावरण चर सेट के साथ कोड को चलाने के लिए होगा, हालांकि यह पहली जगह ओपनएमपी के बिना संकलन के समान नहीं है।

+0

साथ कोड लिखने "#pragma omp ..." और बाद में _not_ "GOMP_parallel_start को अपरिभाषित संदर्भ" –

+4

की तरह मिली त्रुटियाँ जोड़ने का कारण बनता है -fopenmp सक्षम करने मैं 'पाया omp_set_num_threads (1)' सबसे अधिक उपयोगी (दुर्भाग्य से, बहुत में सुरुचिपूर्ण नहीं मेरी राय) –

+0

हमारे प्रोजेक्ट के लिए हमारे पास with_OPENMP है - एक बुलियन बिल्ड टाइम विकल्प जो पास-फॉपेनंप को संभालने में संभालता है और यदि आवश्यक हो तो कोई भी परिभाषित करता है। आईडी किसी प्रोजेक्ट में ओपनएमपी का उपयोग करके किसी और को सुझाव देती है, ओपनएम के बिना परीक्षण करने की क्षमता किसी भी बग के कारण के रूप में इसे बाहर करने के लिए उपयोगी हो सकती है। – ideasman42

2

तरह से ऐसी बातें आम तौर पर नियंत्रित किया जाता है (सामान्य स्थिति) #define और #ifdef साथ है:

अपने हेडर फाइल में:

#ifndef SINGLETHREADED 
#pragma omp 
#endif 

जब आप संकलन, OpenMP निष्क्रिय करने के लिए -DSINGLETHREADED जोड़ें:

cc -DSINGLETHREADED <other flags go here> code.c 
25

यदि आप -fopenmp विकल्प के साथ संकलित नहीं करते हैं, तो आपको समांतर कोड नहीं मिलेगा। आप इसे एक एप्राइपियेट परिभाषित और मेकफ़ाइल के साथ कर सकते हैं जो सभी कोड उत्पन्न करता है।

OpenMP प्रलेखन का कहना है (केवल एक उदाहरण):

#ifdef _OPENMP 
    #include <omp.h> 
#else 
    #define omp_get_thread_num() 0 
#endif 

देखें http://www.openmp.org/mp-documents/spec30.pdf (सशर्त संकलन)।

+0

उपरोक्त सशर्त अभी भी अन्य कथन प्रदान किए बिना काम करता है। – sinner

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