2010-07-02 21 views
5

कुछ मिनट पहले मैंने कुछ पाठ पर ठोकर खाई, जिसने मुझे कुछ ऐसा याद दिलाया जो थोड़ी देर के लिए मेरे दिमाग में सोच रहा था, लेकिन मुझे कहीं पूछना नहीं था।ओपनएमपी और एमपीआई स्पष्टीकरण

तो, आशा है कि यह जगह हो सकती है, जहां लोगों के पास दोनों के साथ अनुभव है, मैं सोच रहा था कि कोई ओपनएमपी और एमपीआई के बीच क्या अंतर है?

मैंने विकिपीडिया लेखों को पूरी तरह से पढ़ा है, उन्हें सेगमेंट में समझा है, लेकिन अभी भी सोच रहा हूं; एक फोरट्रान प्रोग्रामर के लिए जो एक दिन पैरालेलिज्म (केवल ओपनएमपी की मूल बातें सीखना) में प्रवेश करने की इच्छा रखते हैं, तो भविष्य के सबूत के रास्ते क्या है?

मैं अपने सभी टिप्पणियों पर आभारी होंगे

+0

फोरट्रान मेरे लिए "भविष्य-सबूत" नहीं सुनता है ... – Andrey

+7

लोग कह रहे हैं कि 80 के दशक से। अभी भी यहीं। वैज्ञानिक प्रोग्रामिंग और संख्यात्मक तरीकों के लिए अभी भी महत्वपूर्ण है। – duffymo

उत्तर

10

OpenMP मुख्य रूप से कसकर युग्मित बहु के लिए है - यानी, एक ही मशीन पर एकाधिक प्रोसेसर। यह ज्यादातर समानांतर में एक लूप निष्पादित करने के लिए कई धागे कताई जैसी चीजों के लिए है।

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

संपादित करें (टिप्पणी के जवाब में): 24 मशीनों के समूह के लिए, एमपीआई स्पष्ट विकल्प बन जाता है। जैसा ऊपर बताया गया है (और @ मार्क की टिप्पणियों के समान) ओपनएमपी मुख्य रूप से कई प्रोसेसर के लिए है जो स्मृति साझा करते हैं। जब आपके पास साझा स्मृति नहीं है, तो एमपीआई स्पष्ट विकल्प बन जाता है।

एक ही समय में, मान लीजिए कि आप मल्टीप्रोसेसर मशीनों का उपयोग करने जा रहे हैं (क्या अब और कुछ है?) आप अपने मशीन प्रोसेसर में प्रत्येक मशीन में लोड फैलाने के लिए ओपनएमपी का उपयोग करना चाहेंगे।

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

+0

जैरी, आपके उत्तर के लिए भी धन्यवाद। कृपया, जैसा कि इसे दोहराना नहीं है, क्या आपके लिए नीचे टिप्पणी करने के लिए मेरी टिप्पणी पढ़ना संभव होगा, और देखें कि आप इस पर कुछ विचार साझा कर सकते हैं या नहीं। – Friedrich

7

एक और दृश्य, जो @ जेरी पहले से लिखा गया है उससे असंगत नहीं है कि ओपनएमपी साझा-स्मृति समांतरता के लिए है और एमपीआई वितरित-स्मृति समांतरता के लिए है। वितरित सिस्टम पर साझा-स्मृति को अनुकरण करना शायद ही कभी विश्वासयोग्य या सफल होता है, लेकिन साझा-स्मृति प्रणाली पर एमपीआई का उपयोग करने के लिए यह एक बिल्कुल उचित दृष्टिकोण है।

बेशक, सभी (?) मल्टीकोर पीसी और सर्वर इन दिनों साझा-मेमोरी सिस्टम हैं इसलिए ओपनएमपी के लिए निष्पादन मॉडल व्यापक रूप से लागू होता है। एमपीआई क्लस्टर्स पर अपने आप में आती है जिस पर प्रोसेसर नेटवर्क पर एक दूसरे के साथ संवाद करते हैं (जिसे कभी-कभी इंटरकनेक्ट कहा जाता है और अक्सर कार्यालय ईथरनेट की तुलना में उच्च-स्पीक होता है)।

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

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

और, जैसा कि टिप्पणियों में से एक ने पहले से ही कहा है, मुझे लगता है कि फोरट्रान समांतर, उच्च प्रदर्शन, वैज्ञानिक और इंजीनियरिंग अनुप्रयोगों के डोमेन में भविष्य के सबूत हैं। मानक के नवीनतम (2008) संस्करण में भाषा में सीधे सह-सरणी (यानी सरणी जो स्वयं को स्मृति प्रणाली में गैर-स्थानीय और स्थानीय पहुंच के साथ वितरित की जाती हैं) शामिल करती हैं। इस सुविधा के एक या दो प्रारंभिक कार्यान्वयन भी हैं। मेरे पास अभी तक उनका कोई अनुभव नहीं है और उम्मीद है कि कुछ सालों के लिए कुछ समस्याएं होंगी।

संपादित ओपी की टिप्पणियों में अंकों की संख्या पर लेने के लिए ...

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

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

एमपीआई तरफ Gropp द्वारा पुस्तकों एट अल, एमपीआई और का उपयोग का उपयोग करना एमपीआई -2 अपरिहार्य हैं; ऐसा शायद इसलिए है क्योंकि वे (जहां तक ​​मैंने पाया है) एमपी 3 के लिए एकमात्र ट्यूटोरियल परिचय उनके उत्कृष्टता के कारण है। मुझे नहीं लगता कि वे बुरे हैं, आपको दिमाग है लेकिन उनके पास बहुत प्रतिस्पर्धा नहीं है। मुझे सी ++ और एमपीआई में समानांतर वैज्ञानिक कंप्यूटिंग करना और कर्णबीकिस और किर्बी द्वारा भी पसंद है; वैज्ञानिक कंप्यूटिंग ज्ञान के अपने स्तर के आधार पर हालांकि आप अधिकतर सामग्री को मूलभूत पाते हैं।

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

24 प्रोसेसर (सीपीयू? या कोर?, वास्तव में कोई फर्क नहीं पड़ता, बस पूछता है) के साथ एक नई प्रयोगशाला के लिए आपकी योजनाओं के अनुसार, आपके द्वारा लिया गया मार्ग आपकी जेब की गहराई पर निर्भर होना चाहिए।यदि आप इसे बर्दाश्त कर सकते हैं तो मैं सुझाव दूंगा:

- एक साझा-स्मृति कंप्यूटर पर विचार करें, निश्चित रूप से एक साल पहले सूर्य, एसजीआई और आईबीएम सभी इस तरह के कोर के साथ साझा-मेमोरी सिस्टम की आपूर्ति कर सकते हैं, मैं बाजार की वर्तमान स्थिति के बारे में निश्चित नहीं हूं लेकिन चूंकि आपके पास यह तय करने के लिए फरवरी तक है कि यह देखने लायक है। एक साझा-मेमोरी सिस्टम आपको साझा-स्मृति समांतरता विकल्प देता है, जो क्लस्टर नहीं करता है, और साझा-मेमोरी प्लेटफ़ॉर्म पर संदेश-पासिंग को हल्की गति से चलाना चाहिए। (वैसे, यदि आप इस मार्ग पर जाते हैं, तो सिस्टम के इस पहलू को बेंचमार्क करें, साझा-मेमोरी कंप्यूटर पर कुछ खराब एमपीआई कार्यान्वयन हुए हैं।) साझा किए गए मेमोरी कंप्यूटर पर एक अच्छा एमपीआई कार्यान्वयन (इसका मेरा अंतिम अनुभव चालू था एक 512 प्रोसेसर एसजीआई Altix) कोई संदेश नहीं भेजता है, यह बस कुछ बिंदुओं को चारों ओर ले जाता है और इसके परिणामस्वरूप, तेजी से तेजी से। Altix के साथ समस्या यह थी कि 128 प्रोसेसर से परे स्मृति बस सभी यातायात से अभिभूत होने के लिए प्रतिबद्ध था; वह समय क्लस्टर या एमपीपी बॉक्स पर एमपीआई में स्विच करने का समय था।

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

यदि आप महंगी विकल्प बर्दाश्त नहीं कर सकते हैं, तो मैं प्रति बॉक्स 4 या 8 कोर के साथ कई रैक-माउंटेड सर्वरों के लिए जाऊंगा (पसंद मूल्य निर्भर है, और यहां तक ​​कि 16 कोर प्रति बॉक्स भी आज के लायक है) और, आज, मैं प्रति कोर कम से कम 4 जीबी रैम की योजना बना रहा हूं। फिर आपको सबसे तेज़ इंटरकनेक्ट की आवश्यकता हो सकती है; जीबी ईथरनेट ठीक है, लेकिन इन्फिनिबैंड (या दूसरा जिसका नाम मैं भूल जाता हूं) बेहतर है, हालांकि कीमत में कूद ध्यान देने योग्य है। और आपको अपने नए क्लस्टर के लिए हेड नोड के रूप में कार्य करने, नौकरी प्रबंधन प्रणाली और अन्य सामान चलाने के लिए एक पीसी की आवश्यकता होगी। इंटरनेट पर उत्कृष्ट सामग्री का एक टन है जो बिल्डिंग और क्लस्टर पर चल रहा है, अक्सर बियोवुल्फ़ के शीर्षक के तहत, जो कि 'होम-ब्रू' क्लस्टर माना जाता है, का नाम था।

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

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

+0

मार्क, वास्तव में एक अच्छी तरह लिखित उत्तर, स्पष्ट और बिंदु के लिए धन्यवाद।तो, आपको लगता है कि समानांतर शुरुआत में "ओपनएमपी" के साथ शुरू करने का मेरा निर्णय अनिवार्य रूप से खराब और अनन्य नहीं है, क्या एक दिन मैं एमपीआई के साथ अपने कौशल/व्यापक कौशल से बाहर,/या मजबूर होना चाहता हूं? (पीएस मुझे भविष्य में फोरट्रान की भविष्य-साक्ष्य के बारे में कोई संदेह नहीं था; जैसे किसी ने पहले ही कहा था कि "यह 80 के दशक में मर चुका था", फिर 90 के दशक में, फिर ...;) – Friedrich

+0

मुझे बस बताएं कि मैं क्यों हूं पूछ। मेरे कार्यस्थल में, एक प्रयोगशाला स्थापित करने का विचार है। लगभग 24 मशीनों के साथ, कुछ कंप्यूटेशंस को हल करने/उम्मीद करने के लिए जो वर्तमान में बहुत अधिक समय ले रहे हैं (एक अपेक्षाकृत मजबूत मशीन पर लगभग 26 घंटे; जो अव्यवहारिक है)। तो मेरे सहयोगियों में से एक, और मैंने, समांतर कंप्यूटिंग में शोध करना शुरू कर दिया है (हम में से कोई भी पैरालाइजिंग के साथ कोई अनुभव नहीं है; हालांकि, हम एफके 66 से मजबूत मजबूत पृष्ठभूमि हैं, मैं f90 से शुरू हुआ; दोनों 2003 की विशेषताओं के साथ सफलतापूर्वक काम कर रहे हैं – Friedrich

+0

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

2

जैसा ऊपर बताया गया है, ओपनएमपी निश्चित रूप से वृद्धिशील समानांतरता के कारण एमपीआई की तुलना में कार्यक्रम का आसान तरीका है। ओपनएमपी का इस्तेमाल ज्यादातर अनाज समांतरता (लूप स्तर) के लिए किया जाता है, जबकि एमपीआई एक मोटे अनाज समांतरता (डोमेन अपघटन) के अधिक होता है। दोनों समानांतर प्रदर्शन प्राप्त करने के अच्छे तरीके हैं।

हमारे पास हमारे सॉफ्टवेयर (फोरट्रान) का एक ओपनएमपी और एमपीआई संस्करण है और ग्राहक दोनों अपनी आवश्यकताओं के आधार पर उपयोग करते हैं।

बहु-कोर आर्किटेक्चर में मौजूदा रुझानों के साथ, हाइब्रिड ओपनएमपी-एमपीआई एक और व्यवहार्य दृष्टिकोण है।

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