2011-04-13 12 views
5

अरे वहाँ, मेरे पास ओपनएमपी में साझा चर की एक बहुत लंबी सूची है इसलिए मुझे फोर्टन में लाइनों को विभाजित करना है और "" -सिंटाक्स का उपयोग यह सुनिश्चित करने के लिए है कि लाइनें एक साथ रहें!ओपनएमपी कई "साझा" -निर्देशित?

कुछ इस तरह:

!$OMP PARALLEL DEFAULT(private) SHARED(vars...., 
    & more_vars..., 
    & more_vars... 
    &) 

जो मुझे त्रुटियों देता है जब OpenMP बिना संकलन, के बाद से ही पहली पसंद एक टिप्पणी के रूप में मान्यता प्राप्त है! अब समस्या यह है कि मैं "!" जोड़ नहीं सकता एक "&" के साथ उन पंक्तियों के सामने सामने OpenMP बिना संकलन का समर्थन करने के:

!$OMP PARALLEL DEFAULT(private) SHARED(vars...., 
!  & more_vars..., 
!  & more_vars... 
!  &) 

क्योंकि तुलना में यह OpenMP साथ अब और संकलन नहीं है ... लेकिन मैं सिर्फ एक में संकलन के दोनों प्रकार का समर्थन करना चाहते कोड ... इसे कैसे करें इस पर कोई सलाह?

उत्तर

8

आप सही वाक्यविन्यास का उपयोग नहीं कर रहे हैं।

प्रहरी केवल सफेद स्थान द्वारा जब तक यह पहले किसी भी कॉलम में प्रकट कर सकते हैं: आप OpenMP V3.0 विनिर्देश को देखें, तो खंड 2.1.2 नि: शुल्क स्रोत प्रपत्र निर्देशों, तो आपको निम्न देखेंगे (रिक्त स्थान और टैब वर्ण)। यह चरित्र के हस्तक्षेप वाले एक शब्द के रूप में दिखाई देना चाहिए। फोरट्रान मुक्त रूप रेखा लंबाई, सफेद स्थान, और निरंतरता नियम निर्देश रेखा पर लागू होते हैं। प्रारंभिक निर्देश लाइनों में सेंटीनेल के बाद एक जगह होनी चाहिए। जारी निर्देश पंक्तियों में लाइन पर अंतिम nonblank चरित्र के रूप में एक एम्पर्सेंड होना चाहिए, निर्देश के अंदर रखी गई किसी भी टिप्पणी के लिए से पहले। एम्पर्सेंड के पहले और बाद में वैकल्पिक सफेद स्थान के साथ निर्देशित सेंटीनेल के बाद निरंतर निर्देश पंक्तियों में एम्परसैंड हो सकता है।

तो सही रूप से किया जाना चाहिए:

!$OMP PARALLEL DEFAULT(private) SHARED(vars...., & 
!$OMP& more_vars..., & 
!$OMP& more_vars... & 
!$OMP&) 

निश्चित रूप से, यह बात एक ही प्रकार है। आप ओएमपी सेंटीनेल के साथ प्रत्येक लाइन शुरू करते हैं और सुनिश्चित करते हैं कि निरंतर लाइनों में कॉलम 6 में एक गैर-खाली और गैर-शून्य वर्ण है।

+0

ओह धन्यवाद, उसे नहीं पता था! उससे मुझे बहुत सहायता मिली! – tim

+0

क्षमा करें, मैं गलत था, वह मेरे लिए काम नहीं करता: जब से एक उम्मीद सिंटेक्स त्रुटि पाया 'और':/ tim

+1

क्या संकलक आप उपयोग कर रहे हैं? साथ ही, मेरा उदाहरण मुफ्त रूप में था, हालांकि आपका उदाहरण वास्तव में अधिक दिखता है जैसे आप निश्चित रूप का उपयोग कर रहे हैं। यदि निश्चित रूप है, तो आपको निरंतरता रेखाओं पर सेंटीनेल और कॉलम 6 गैर-खाली (यानी, $ $ omp + shared_var, shared_var,) होना चाहिए। – ejd

0

ठीक है दोस्तों ... मुझे समाधान पता चला: लूप-पहचानकर्ता (मेरा मतलब है I निम्नलिखित कोड में: do i=1,end) को साझा करना होगा और जैसा कि मैं DEFAULT(private) का उपयोग कर रहा हूं, मुझे इसे साझा वार्स की सूची में लिखना था :) उम्मीद है कि यह किसी दिन किसी की मदद करेगा :)

+1

चूंकि आपने यह नहीं दिखाया है कि आप इस लूप का उपयोग कैसे कर रहे हैं, यह संभव है कि आप जो कह रहे हैं वह सही है। हालांकि, सामान्य रूप से, यदि आपके समांतर क्षेत्र में लूप है तो आप लूप इंडेक्स को निजी रखना चाहते हैं। असल में, डिफ़ॉल्ट रूप से, ओपनएमपी लूप इंडेक्स को निजी बना देगा ताकि आपके पास दौड़ की स्थिति न हो। यह टिप्पणी मूल प्रश्न से पूरी तरह से असंबंधित प्रतीत नहीं होती है, इसलिए मुझे यकीन नहीं है कि यह सबसे अच्छा जवाब कैसे है। – ejd

+0

ओह क्षमा करें, हाँ आप सही थे, इस बारे में खेद है; मैं मूल रूप से इसे अपने प्रश्न पर पोस्ट करना चाहता था "फोरट्रान में ओपनएमपी: डेटा प्रकारों में परिवर्तन?" लेकिन बस इसे गड़बड़ कर दिया, क्षमा करें! हालांकि, मुझे लगता है कि लूप इंडेक्स निजी नहीं हो सकता है, क्या आप अपने बयान के बारे में निश्चित हैं? मैं नहीं देख सकता कि साझा करने के लिए इसे सेट करते समय प्रोग्राम तुरंत क्यों काम करता है। मैं सिर्फ कोड पोस्ट नहीं कर सकता क्योंकि यह थोड़ा लंबा है और मुझे नहीं पता कि क्या बाहर निकलना है, लेकिन जैसा कि यह अब काम करता है, मुझे शायद इसकी आवश्यकता नहीं है – tim

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