समानांतर कमी के लिए संख्यात्मक गैर-समरूपता को कैसे संबोधित किया जाए?


17

एक समानांतर कमी मानती है कि संबंधित ऑपरेशन सहयोगी है। फ्लोटिंग पॉइंट नंबरों के अलावा इस धारणा का उल्लंघन किया जाता है। आप पूछ सकते हैं कि मुझे इसकी परवाह क्यों है। खैर, यह परिणाम कम प्रजनन योग्य बनाता है। और यह तब और खराब हो जाता है जब नकली एनरोलिंग का उपयोग ऐसे गैर-प्रजनन योग्य परिणामों का निर्माण करने वाले उप-योगों के ऊपर (या फिट मापदंडों) को अनुकूलित करने के लिए किया जाता है।

इस समस्या से निपटने के सामान्य तरीके क्या हैं? निम्नलिखित रणनीतियों के बारे में क्या कहा जा सकता है?

  • गैर- reproducibility के बारे में परवाह नहीं है।
  • फ़्लोटिंग पॉइंट नंबरों और जोड़ के साथ समानांतर कमी का उपयोग न करें।
  • एक प्रतिलिपि प्रस्तुत करने योग्य तरीके से उपयुक्त आकार के वर्क-पैकेज बनाएं, और अंतिम कटौती हाथ से करें।
  • जोड़ के लिए उच्च परिशुद्धता का उपयोग करें (लेकिन सभी संकलक उच्च परिशुद्धता फ्लोटिंग पॉइंट प्रकार की पेशकश नहीं करते हैं)।

क्या आप एक ही नंबर पर प्रोसेसर्स या एक अलग नंबर के प्रोसेसर्स पर रिप्रोड्यूसबिलिटी के लिए रिप्रोड्यूसबिलिटी से चिंतित हैं? बिटविंड रेपिरुसिबिलिटी के लिए आप कितना अच्छा प्रदर्शन कर सकते हैं? क्या आप केवल नकली annealing में रुचि रखते हैं?
जेड ब्राउन

@JedBrown मैं संभावित समस्याओं को डीबग करने के लिए उदाहरण के लिए, प्रतिलिपि प्रस्तुत करने योग्य परिणाम प्राप्त करने की संभावना के बारे में चिंतित हूं। यह मेरे लिए ठीक है अगर परिणाम को पुन: पेश करने का एक तरीका है, उदाहरण के लिए एक ही संख्या में प्रोसेसर का उपयोग करके (या मूल रूप से उपयोग किए गए प्रोसेसर की संख्या को "जानना" के द्वारा)। मैं इसके अलावा उच्च परिशुद्धता फ्लोटिंग पॉइंट प्रकारों के उपयोग से जुड़े प्रदर्शन को हिट करने के लिए तैयार हूं। मेरी ठोस समस्याएं ज्यादातर नकली annealing और अप्रत्याशित मतभेदों से संबंधित थीं, लेकिन ये सभी वास्तविक बग थे।
थॉमस क्लिम्पेल

जवाबों:


15

MPI_Allreduce()जब तक आप एक ही संख्या में प्रोसेसर का उपयोग करते हैं, तब तक उपयोग में लाया जाने वाला एक कमी प्रतिलिपि प्रस्तुत करने योग्य है, बशर्ते कार्यान्वयन ने निम्नलिखित नोट को MPI-2.2 मानक की धारा 5.9.1 में प्रदर्शित किया।

कार्यान्वयनकर्ताओं को सलाह । यह दृढ़ता से अनुशंसा की जाती है कि MPI_REDUCEइसे लागू किया जाए ताकि जब भी फ़ंक्शन समान तर्कों पर लागू हो, तो समान परिणाम प्राप्त हो। ध्यान दें कि यह उन अनुकूलन को रोक सकता है जो प्रोसेसर के भौतिक स्थान का लाभ उठाते हैं। ( कार्यान्वयनकर्ताओं को सलाह की समाप्ति )

यदि आपको हर कीमत पर प्रतिलिपि प्रस्तुत करने की गारंटी देने की आवश्यकता है, तो आप अगले पैराग्राफ में दिशानिर्देशों का पालन कर सकते हैं:

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

चीजों की व्यापक योजना में, अधिकांश अनुप्रयोगों के लिए कुशल एल्गोरिदम स्थानीयता का लाभ उठाते हैं। चूंकि एल्गोरिथ्म वास्तव में अलग है जब विभिन्न प्रक्रियाओं की संख्या पर चलाया जाता है, तो विभिन्न प्रक्रियाओं पर चलने पर परिणामों को पुन: उत्पन्न करना व्यावहारिक नहीं है। एक संभावित अपवाद नम जैकोबी या बहुपद (उदाहरण के लिए चेबिशेव) के साथ बहुरंगी है, जहां इस सरल विधि के लिए बहुत अच्छा प्रदर्शन करना संभव है।

समान प्रक्रियाओं के साथ, संदेशों को संसाधित करने के लिए प्रदर्शन करने के लिए अक्सर यह फायदेमंद होता है कि उन्हें प्राप्त किया जाता है (उदाहरण का उपयोग करके MPI_Waitany()), जो गैर-नियतात्मकता का परिचय देता है। ऐसे मामलों में, आप दो वेरिएंट को लागू कर सकते हैं, फास्ट जो किसी भी क्रम में प्राप्त होता है और एक "डीबग" जो एक स्थिर क्रम में प्राप्त होता है। इसके लिए आवश्यक है कि सभी अंतर्निहित पुस्तकालयों को भी इस व्यवहार की पेशकश करने के लिए लिखा जाए।

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


6

अधिकांश भाग के लिए मैंने जेत्स के उत्तर को लिखा। हालाँकि, एक अलग तरीका है: सामान्य फ्लोटिंग पॉइंट नंबरों के आकार को देखते हुए, आप हर नंबर को 4000-या-तो बिट फिक्स्ड पॉइंट नंबर में स्टोर कर सकते हैं। इसलिए यदि आप फ्लोटिंग पॉइंट नंबरों पर कमी करते हैं, तो आप एक सटीक गणना प्राप्त करते हैं, कोई फर्क नहीं पड़ता है। (क्षमा करें, मेरे पास वह संदर्भ नहीं है जो इस विचार के साथ आया है।)


1
मुझे नहीं लगता कि वह पहले थे, लेकिन आपके सहयोगी डॉ। बैंडविड्थ ने निश्चित रूप से इस विषय पर एक अच्छा लेखन कार्य किया है: sites.utexas.edu/jdm4372/2012/02/15/…
Jeff

5

आप MPI में संख्यात्मक रूप से स्थिर कमी एल्गोरिदम को लागू कर सकते हैं जैसा कि आप धारावाहिक में कर सकते हैं। निश्चित रूप से एक प्रदर्शन हिट हो सकता है। यदि आप वेक्टर को दोहराने का जोखिम उठा सकते हैं, तो MPI_Gather का उपयोग करें और रूट पर सीरियल में संख्यात्मक रूप से स्थिर कमी करें। कुछ मामलों में, आप पा सकते हैं कि प्रदर्शन हिट होना कोई बड़ी बात नहीं है।

एक अन्य उपाय यहां वर्णित के रूप में विस्तृत संचयकों का उपयोग करना है । आप इसे MPI के साथ उपयोगकर्ता-परिभाषित कमी के रूप में कर सकते हैं, हालांकि यह बहुत अधिक बैंडविड्थ का उपयोग करेगा।

उपर्युक्त के लिए एक समझौता मुआवजा योग का उपयोग करना है। विवरण के लिए संदर्भ "कहन सारांश" देखें। इस विषय पर हिघम की " सटीकता और संख्यात्मक एल्गोरिदम की स्थिरता " एक उत्कृष्ट संसाधन है।


3

एक साझा मेमोरी सिस्टम पर थ्रेड्स के संदर्भ में समस्या को संबोधित करने के लिए, मैंने यह पृष्ठ लिखा है जो बताता है कि हम deal.II में क्या करते हैं: http://dealii.org/developer/doxygen/deal.II/group__threads.html #MTWorkStream


2

मैं यह बताना चाहता हूं कि इसके अलावा उच्च परिशुद्धता अंकगणित का उपयोग करने के बजाय, क्षतिपूर्ति योग का उपयोग करने की संभावना है (देखें [१])। इससे बड़े डेटा प्रकारों का सहारा लेने की आवश्यकता के बिना योग की सटीकता बढ़ सकती है।

[1] हिघम, एनजे द फ्लोइंग पॉइंट ऑफ़ फ्लोटिंग पॉइंट सारांश। वैज्ञानिक कंप्यूटिंग 14 पर SIAM जर्नल, 783–799 (1993)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.