2012-07-08 10 views
10

क्या होता है यदि आप एक एमपीआई संचार विधियों में से एक का उपयोग रैंक के साथ संवाद करने के लिए करते हैं? क्या कोई अच्छी तरह से परिभाषित व्यवहार है (उदाहरण के लिए सफल या असफल होने की गारंटी है), या यह मौका/अन्य अनियंत्रित प्रभावों पर निर्भर करता है, चाहे कार्यक्रम जारी रहेगा या नहीं?क्या रैंक के एमपीआई संचार का व्यवहार स्वयं परिभाषित है?

एक उदाहरण तरल गतिशीलता कोड होगा, जहां प्रत्येक रैंक निर्धारित करता है कि कम्प्यूटेशनल स्टैंसिल के लिए आवश्यक हेलो बनाने के लिए पड़ोसी रैंकों में कौन सी ग्रिड कोशिकाओं को भेजने की आवश्यकता है। यदि सिमुलेशन केवल एक रैंक पर शुरू होता है, तो रैंक 0 के साथ गैर-अवरुद्ध भेज/प्राप्त होगा (लगभग 0-लंबाई की जानकारी भेजना)।

उत्तर

12

जबकि आप सस्ज़टरपैट के उत्तर के अनुसार स्वयं-संदेश से बच सकते हैं, स्वयं संदेश संदेश काम करेगा और एमपीआई मानक का हिस्सा होगा। यहां तक ​​कि एक पूर्व परिभाषित सुविधा संचारक MPI_COMM_SELF भी है। जब तक प्रेषण/प्राप्त कॉल डेडलॉक का कारण नहीं बनता है (उदाहरण के लिए, गैर-अवरुद्ध कॉल का उपयोग किया जाता है), स्वयं को भेजना ठीक है। बेशक, भेजने और प्राप्त बफर ओवरलैप नहीं होना चाहिए।

ध्यान दें कि ओपनएमपीआई के साथ आपको enable the self BTL की आवश्यकता है।


स्रोत: MPI 1.1 Section 3.2.4

स्रोत = गंतव्य एक प्रक्रिया ही करने के लिए एक संदेश भेज सकते हैं, वह है, अनुमति दी है। (हालांकि, यह असुरक्षित ऊपर वर्णित अवरुद्ध भेजने और प्राप्त संचालन के साथ ऐसा करने के लिए, के बाद से इस गतिरोध को जन्म दे सकती। सेक देखें। 3.5। बिंदु से बिंदु संचार के शब्दार्थ।)

+0

अच्छी खबर है कि। क्या आप वर्तमान एमपीआई मानक में अध्याय को इंगित कर सकते हैं जो प्रेषण से स्वयं नीति तैयार करता है? मैं इसे खुद ढूंढ रहा हूं और कुछ भी नहीं मिला। –

+0

मैंने उत्तर में स्रोत जोड़ा। –

1

एक मानक मोड में भेजें (यानी MPI_Send()), यह एमपीआई कार्यान्वयन पर निर्भर करता है कि संदेश को बफर करना है या नहीं। यह मानना ​​उचित है कि कोई भी कार्यान्वयन, या कम से कम लोकप्रिय लोग स्वयं को एक प्रेषण पहचानेंगे, और संदेश को बफर करने का निर्णय लेंगे। निष्पादन तब जारी रहेगा, और मिलान प्राप्त होने के बाद, संदेश बफर से पढ़ा जाएगा। यदि आप बिल्कुल निश्चित होना चाहते हैं, तो आप MPI_Bsend() का उपयोग कर सकते हैं, लेकिन फिर MPI_Buffer_attach() और MPI_Buffer_detach() के माध्यम से बफर को प्रबंधित करना आपकी ज़िम्मेदारी हो सकती है।

हालांकि, अपने विशिष्ट समस्या के लिए आदर्श समाधान भेजने के स्रोत/गंतव्य बहस में MPI_PROC_NULL उपयोग कर रहा है/कॉल है, जो भेजें और Recv किसी भी संचार छोड़ और यथाशीघ्र वापस जाने के लिए कारण होगा प्राप्त करते हैं।

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