कुछ संबंधों में यह होमवर्क समस्या की तरह लगता है, जिसे मैं लोगों के लिए नफरत करता हूं। दूसरी तरफ, ऊपर दिए गए उत्तर पूरी तरह से सटीक नहीं हैं और मुझे लगता है कि सही किया जाना चाहिए।
सबसे पहले, इस उदाहरण में साझा और निजी खंडों की आवश्यकता नहीं है, मैं कोनराड से असहमत हूं कि उनका उपयोग नहीं किया जाना चाहिए। समानांतर कोड वाले लोगों के साथ सबसे आम समस्याओं में से एक यह है कि वे समझने के लिए समय नहीं लेते कि चर का उपयोग कैसे किया जा रहा है। साझा किए गए चरों का निजीकरण और/या सुरक्षा नहीं करना चाहिए, जो मुझे दिखाई देने वाली समस्याओं की सबसे बड़ी संख्या के लिए खाते हैं। यह जांचने के अभ्यास के माध्यम से जा रहा है कि चर का उपयोग कैसे किया जाता है और उन्हें उचित साझा, निजी इत्यादि में डालकर क्लॉज आपके पास होने वाली समस्याओं की संख्या को बहुत कम कर देगा।
बाधाओं के बारे में प्रश्न के लिए, पहले लूप में अबेट क्लॉज हो सकता है, क्योंकि दूसरे लूप में मान गणना (ए) का कोई उपयोग नहीं है।दूसरे लूप में केवल एक ही क्लॉज हो सकता है यदि मूल्य गणना (सी) का उपयोग मूल्यों की गणना से पहले नहीं किया जाता है (यानी, कोई निर्भरता नहीं है)। मूल उदाहरण कोड में दूसरे लूप पर एक प्रतीक्षा है, लेकिन तीसरे पाश से पहले एक स्पष्ट बाधा है। यह ठीक है, क्योंकि आपका प्रोफेसर एक स्पष्ट बाधा के उपयोग को दिखाने की कोशिश कर रहा था - हालांकि दूसरे लूप पर अभी भी छोड़ने से स्पष्ट बाधा अनावश्यक हो जाएगी (क्योंकि लूप के अंत में एक अंतर्निहित बाधा है)।
दूसरी तरफ, दूसरी लूप और स्पष्ट अवरोध पर अब भी की आवश्यकता नहीं हो सकती है। ओपनएमपी वी 3.0 विनिर्देश से पहले, कई लोगों ने माना कि कुछ सच था जिसे विनिर्देशन में स्पष्ट नहीं किया गया था।
स्थिर निर्धारित समय से एक शिकायत कार्यान्वयन सुनिश्चित करना चाहिए कि: OpenMP V3.0 विनिर्देश के साथ निम्नलिखित खंड 2.5.1 लूप का निर्माण, टेबल 2-1 अनुसूची खंड तरह मूल्यों, स्थिर (अनुसूची) को जोड़ा गया है उसी धागे के लिए तार्किक पुनरावृत्ति संख्याओं का असाइनमेंट दो लूप क्षेत्रों में उपयोग किया जाएगा यदि निम्न स्थितियां संतुष्ट हैं: 1) दोनों लूप क्षेत्रों में लूप पुनरावृत्तियों की एक ही संख्या है, 2) दोनों लूप क्षेत्रों में का एक ही मान है chunk_size निर्दिष्ट, या दोनों लूप क्षेत्रों में कोई chunk_size निर्दिष्ट नहीं है, और 3) दोनों लूप क्षेत्र समान समानांतर क्षेत्र से जुड़ते हैं। के बीच एक डेटा निर्भरता दो ऐसे लूपों में एक ही लॉजिकल पुनरावृत्तियों को संतुष्ट होने की गारंटी है अब प्रतीक्षा खंड के सुरक्षित उपयोग की अनुमति ( उदाहरणों के लिए पृष्ठ 170 पर अनुभाग ए.9 देखें)।
अब आपके उदाहरण में, किसी भी लूप पर कोई शेड्यूल नहीं दिखाया गया था, इसलिए यह हो सकता है या नहीं हो सकता है। इसका कारण यह है कि डिफ़ॉल्ट अनुसूची कार्यान्वयन को परिभाषित किया गया है और अधिकांश कार्यान्वयन वर्तमान में डिफ़ॉल्ट शेड्यूल को स्थिर होने के लिए परिभाषित करते हैं, इसकी कोई गारंटी नहीं है। यदि आपके प्रोफेसर ने सभी तीन लूपों पर खंड-आकार के बिना एक शेड्यूल प्रकार का स्थिर रखा है, तो अब पहले और दूसरे लूप पर उपयोग किया जा सकता है और दूसरे के बीच कोई अवरोध (या तो निहित या स्पष्ट) की आवश्यकता नहीं होगी और तीसरे लूप बिल्कुल।
अब हम तीसरे पाश और आपके प्रश्न और कमी के बारे में प्रश्न पूछते हैं। चूंकि माइक ने बताया, ओपनएमपी विनिर्देश दोनों (कमी और अभी भी) निर्दिष्ट करने की अनुमति देता है। हालांकि, यह सच नहीं है कि कमी को पूरा करने के लिए कोई सिंक्रनाइज़ेशन की आवश्यकता नहीं है। उदाहरण में, अंतर्निहित बाधा (तीसरे पाश के अंत में) को अभी भी हटाया जा सकता है। ऐसा इसलिए है क्योंकि समानांतर क्षेत्र के अंतर्निहित बाधा से पहले कमी (योग) का उपयोग नहीं किया जा रहा है।
आप OpenMP V3.0 विनिर्देश को देखें, तो खंड 2.9.3.6 कमी खंड, तो आप पाएंगे निम्नलिखित:
प्रतीक्षा नहीं इस्तेमाल नहीं किया है, कमी गणना के अंत में पूरा हो जाएगा निर्माण; हालांकि, यदि कटौती क्लॉज का उपयोग उस निर्माण पर किया जाता है, जिसके लिए भी लागू होता है, तो मूल सूची आइटम तक पहुंच एक दौड़ तैयार करेगी और इस प्रकार, अनिर्दिष्ट प्रभाव नहीं है जब तक कि सिंक्रनाइज़ेशन सुनिश्चित न हो कि वे सभी धागे के बाद होते हैं सभी निष्पादित उनके पुनरावृत्तियों या अनुभाग संरचनाओं में, और कमी गणना ने उस सूची आइटम के गणना मूल्य को पूरा और संग्रहित कर लिया है। यह बाधा सिंक्रनाइज़ेशन के माध्यम से सबसे अधिक हो सकता है।
इसका मतलब है कि यदि आप तीसरे पाश के बाद समांतर क्षेत्र में योग चर का उपयोग करना चाहते हैं, तो आपको इसका उपयोग करने से पहले बाधा (या तो निहित या स्पष्ट) की आवश्यकता होगी। जैसा कि उदाहरण अब खड़ा है, यह सही है।
मुझे उत्सुकता है, आपको यह उदाहरण कहां मिला? –
यह उदाहरण मेरे प्रोफेसर द्वारा दिया गया था। यह स्पष्ट बाधाओं के उपयोग की व्याख्या करने के लिए था, लेकिन मुझे यकीन नहीं है कि अंतिम लूप सही है या नहीं। – aperez