MPI_Allreduce()
जब तक आप एक ही संख्या में प्रोसेसर का उपयोग करते हैं, तब तक उपयोग में लाया जाने वाला एक कमी प्रतिलिपि प्रस्तुत करने योग्य है, बशर्ते कार्यान्वयन ने निम्नलिखित नोट को MPI-2.2 मानक की धारा 5.9.1 में प्रदर्शित किया।
कार्यान्वयनकर्ताओं को सलाह । यह दृढ़ता से अनुशंसा की जाती है कि MPI_REDUCE
इसे लागू किया जाए ताकि जब भी फ़ंक्शन समान तर्कों पर लागू हो, तो समान परिणाम प्राप्त हो। ध्यान दें कि यह उन अनुकूलन को रोक सकता है जो प्रोसेसर के भौतिक स्थान का लाभ उठाते हैं। ( कार्यान्वयनकर्ताओं को सलाह की समाप्ति )
यदि आपको हर कीमत पर प्रतिलिपि प्रस्तुत करने की गारंटी देने की आवश्यकता है, तो आप अगले पैराग्राफ में दिशानिर्देशों का पालन कर सकते हैं:
उपयोगकर्ताओं को सलाह । कुछ एप्लिकेशन फ्लोटिंग-पॉइंट ऑपरेशंस की गैर-सहयोगी प्रकृति को अनदेखा करने में सक्षम नहीं हो सकते हैं या उपयोगकर्ता-परिभाषित संचालन (धारा 5.9.5 देखें) का उपयोग कर सकते हैं जिन्हें एक विशेष कमी आदेश की आवश्यकता होती है और उन्हें सहयोगी के रूप में नहीं माना जा सकता है। ऐसे अनुप्रयोगों को मूल्यांकन के क्रम को स्पष्ट रूप से लागू करना चाहिए। उदाहरण के लिए, परिचालन के मामले में जिन्हें सख्त बाएं-से-दाएं (या दाएं-बाएं) मूल्यांकन आदेश की आवश्यकता होती है, यह एक ही प्रक्रिया में सभी ऑपरेंड को इकट्ठा करके किया जा सकता है (जैसे, साथ
MPI_GATHER
), कमी ऑपरेशन को लागू करना। वांछित क्रम में (जैसे, के साथ
MPI_REDUCE_LOCAL
), और यदि आवश्यक हो, तो परिणाम को अन्य प्रक्रियाओं (जैसे, के साथ MPI_BCAST
) को प्रसारित या तितर बितर करें । ( उपयोगकर्ताओं के लिए सलाह का अंत ।)
चीजों की व्यापक योजना में, अधिकांश अनुप्रयोगों के लिए कुशल एल्गोरिदम स्थानीयता का लाभ उठाते हैं। चूंकि एल्गोरिथ्म वास्तव में अलग है जब विभिन्न प्रक्रियाओं की संख्या पर चलाया जाता है, तो विभिन्न प्रक्रियाओं पर चलने पर परिणामों को पुन: उत्पन्न करना व्यावहारिक नहीं है। एक संभावित अपवाद नम जैकोबी या बहुपद (उदाहरण के लिए चेबिशेव) के साथ बहुरंगी है, जहां इस सरल विधि के लिए बहुत अच्छा प्रदर्शन करना संभव है।
समान प्रक्रियाओं के साथ, संदेशों को संसाधित करने के लिए प्रदर्शन करने के लिए अक्सर यह फायदेमंद होता है कि उन्हें प्राप्त किया जाता है (उदाहरण का उपयोग करके MPI_Waitany()
), जो गैर-नियतात्मकता का परिचय देता है। ऐसे मामलों में, आप दो वेरिएंट को लागू कर सकते हैं, फास्ट जो किसी भी क्रम में प्राप्त होता है और एक "डीबग" जो एक स्थिर क्रम में प्राप्त होता है। इसके लिए आवश्यक है कि सभी अंतर्निहित पुस्तकालयों को भी इस व्यवहार की पेशकश करने के लिए लिखा जाए।
कुछ मामलों में डिबगिंग के लिए, आप एक अभिकलन के हिस्से को अलग कर सकते हैं जो इस प्रतिलिपि प्रस्तुत करने योग्य व्यवहार की पेशकश नहीं करता है और उस पुनर्वितरण को निष्पादित करता है। घटकों को कैसे डिज़ाइन किया गया था, इस पर निर्भर करते हुए कि परिवर्तन कोड की एक छोटी राशि या बहुत दखल हो सकता है।