mpi - एमपीआईसी बनाम ओपनएमपीआई




hpc openmpi (3)

उद्देश्य

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

नेटवर्क प्रौद्योगिकी के लिए समर्थन

ओपन-एमपीआई दस्तावेज उनके नेटवर्क समर्थन here । एमपीआईसी प्रत्येक संस्करण के साथ वितरित README में इस जानकारी को सूचीबद्ध करता है (उदाहरण के लिए this 3.2.1 के लिए है)। ध्यान दें कि ओपन-एमपीआई और एमपीआईसी दोनों OFI (उर्फ libfabric) नेटवर्किंग परत का समर्थन करते हैं, वे कई नेटवर्कों का समर्थन करते हैं। हालांकि, libfabric एक बहु-पक्षीय एपीआई है, इसलिए प्रत्येक नेटवर्क को दोनों में समान रूप से समर्थित नहीं किया जा सकता है (उदाहरण के लिए एमपीआईसी में ओएफआई आधारित आईबीएम ब्लू जीन / क्यू कार्यान्वयन है, लेकिन मुझे ओपन-एमपीआई में समकक्ष समर्थन के बारे में पता नहीं है) । हालांकि, एमपीआईसी और ओपन-एमपीआई दोनों के ओएफआई-आधारित कार्यान्वयन साझा-मेमोरी, ईथरनेट (टीसीपी / आईपी के माध्यम से), मेलानॉक्स इंफिनीबैंड, इंटेल ओमनी पथ और संभवतः अन्य नेटवर्क पर काम कर रहे हैं। ओपन-एमपीआई इन दोनों नेटवर्कों और दूसरों को मूल रूप से समर्थन करता है (यानी बीच में ओएफआई के बिना)।

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

नवीनतम एमपीआई मानक से फ़ीचर समर्थन

हार्डवेयर / मंच समर्थन के लिए एक ऑर्थोगोनल धुरी एमपीआई मानक का कवरेज है। यहां एमपीआईसी आमतौर पर दूर और दूर श्रेष्ठ है। एमपीआईसी एमपीआई -1 से लेकर एमपीआई -3 तक एमपीआई मानक की हर एक रिलीज का पहला कार्यान्वयन रहा है। ओपन-एमपीआई ने हाल ही में एमपीआई -3 का समर्थन किया है और मुझे लगता है कि कुछ एमपीआई -3 विशेषताएं कुछ प्लेटफार्मों पर छोटी हैं (एमपीआईसी बग-फ्री नहीं है, लेकिन एमपीआई -3 फीचर्स में बग बहुत कम आम हैं)।

ऐतिहासिक रूप से, ओपन-एमपीआई में MPI_THREAD_MULTIPLE लिए समग्र समर्थन नहीं है, जो कुछ अनुप्रयोगों के लिए महत्वपूर्ण है। यह कुछ प्लेटफार्मों पर समर्थित हो सकता है लेकिन आम तौर पर काम पर नहीं माना जा सकता है। दूसरी तरफ, MPI_THREAD_MULTIPLE के पास MPI_THREAD_MULTIPLE लिए कई वर्षों तक समग्र समर्थन रहा है, हालांकि कार्यान्वयन हमेशा उच्च प्रदर्शन नहीं होता है (देखें " एक विश्लेषण के लिए " मल्टीथ्रेडेड एमपीआई कार्यान्वयन में लॉकिंग पहलू " देखें)।

ओपन-एमपीआई 1.x में टूटा गया एक और फीचर एक तरफा संचार, उर्फ ​​आरएमए था। यह हाल ही में तय किया गया है और मुझे लगता है कि इन सुविधाओं के बहुत भारी उपयोगकर्ता के रूप में, वे आम तौर पर ओपन-एमपीआई 3.x में अच्छी तरह से काम कर रहे हैं (उदाहरण के लिए ट्रैविस सीआई में एआरएमसीआई-एमपीआई परीक्षण मैट्रिक्स देखें जिसके परिणामस्वरूप आरएमए काम कर रहा है दोनों कार्यान्वयन, कम से कम साझा-स्मृति में। मैंने इंटेल ओमनी पथ पर समान सकारात्मक परिणाम देखे हैं, लेकिन मैलेनॉक्स इन्फिनी बैंड का परीक्षण नहीं किया है।

प्रक्रिया प्रबंधन

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

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

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

बाइनरी पोर्टेबिलिटी

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

एमपीआईसी और इसके कई डेरिवेटिव्स एबीआई संगतता ( website ) का समर्थन करते हैं, जिसका अर्थ है कि लाइब्रेरी में बाइनरी इंटरफ़ेस स्थिर है और इसलिए कोई एक कार्यान्वयन से mpi.h साथ संकलित कर सकता है और फिर दूसरे के साथ चला सकता है। यह पुस्तकालयों के कई संस्करणों में भी सच है। उदाहरण के लिए, मैं अक्सर इंटेल एमपीआई संकलित करता हूं लेकिन रनटाइम पर एमपीआईसी का विकास संस्करण LD_PRELOAD करता हूं। एबीआई संगतता के बड़े फायदों में से एक यह है कि आईएसवी (स्वतंत्र सॉफ्टवेयर विक्रेता) एमपीआईसी परिवार के केवल एक सदस्य के खिलाफ संकलित द्विआधारी जारी कर सकते हैं।

एबीआई बाइनरी संगतता का एकमात्र प्रकार नहीं है। ऊपर वर्णित परिदृश्य मानते हैं कि उपयोगकर्ता MPI लॉन्चर (आमतौर पर mpirun या mpiexec , इसके गणना-नोड mpiexec के साथ) और एमपीआई लाइब्रेरी के समान संस्करण का उपयोग करते हैं। यह जरूरी नहीं है कि कंटेनरों के मामले में।

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

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

मैं कंटेनर मुद्दों को समझाने के लिए ओपन-एमपीआई टीम के राल्फ कास्टेन को स्वीकार करता हूं। तत्काल पूर्व उद्धरण उसका है।

प्लेटफार्म-विशिष्ट तुलना

मंच-दर-प्लेटफ़ॉर्म आधार पर मेरा मूल्यांकन यहां दिया गया है:

  • मैक ओएस: ओपन-एमपीआई और एमपीआईसी दोनों को ठीक काम करना चाहिए। एमपीआई -3 मानक की नवीनतम विशेषताएं प्राप्त करने के लिए, आपको ओपन-एमपीआई के हालिया संस्करण का उपयोग करने की आवश्यकता है, जो होमब्रू से उपलब्ध है। यदि आप मैक लैपटॉप पर चल रहे हैं तो एमपीआई प्रदर्शन के बारे में सोचने का कोई कारण नहीं है।

  • साझा-स्मृति के साथ लिनक्स: ओपन-एमपीआई और एमपीआईसी दोनों को ठीक काम करना चाहिए। यदि आप एक रिलीज़ संस्करण चाहते हैं जो एमपीआई -3 या एमपीआई_THREAD_MULTIPLE का समर्थन करता है, तो आपको शायद एमपीआईसी की आवश्यकता है, जब तक कि आप ओपन-एमपीआई स्वयं नहीं बनाते, क्योंकि उदाहरण के लिए उबंटू 16.04 केवल एपीटी के माध्यम से प्राचीन संस्करण 1.10 प्रदान करता है। मुझे दो कार्यान्वयन के बीच किसी भी महत्वपूर्ण प्रदर्शन अंतर के बारे में पता नहीं है। यदि ओएस उन्हें अनुमति देता है तो दोनों एकल एकल प्रति अनुकूलन का समर्थन करते हैं।

  • मेलनॉक्स इन्फिनी बैंड के साथ लिनक्स: ओपन-एमपीआई या एमवीएपीआईसी 2 का उपयोग करें। यदि आप एक रिलीज़ संस्करण चाहते हैं जो MPI-3 या MPI_THREAD_MULTIPLE सभी का समर्थन करता है, तो आपको शायद MVAPICH2 की आवश्यकता है। मुझे लगता है कि एमवीएपीआईएचआईसी 2 बहुत अच्छी तरह से प्रदर्शन करता है लेकिन इन्फिनीबैंड पर ओपनएमपीआई के साथ सीधी तुलना नहीं करता है, क्योंकि कुछ हद तक प्रदर्शन मेरे लिए सबसे महत्वपूर्ण है (आरएमए उर्फ ​​एक तरफा) अतीत में ओपन-एमपीआई में टूटा गया है।

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

  • क्रे या आईबीएम सुपरकंप्यूटर: एमपीआई इन मशीनों पर स्वचालित रूप से स्थापित होता है और यह दोनों मामलों में एमपीआईसी पर आधारित होता है। OFI , here काई एक्ससी 40 ( here ) पर OFI , इंटेल एमपीआई पर OFI , एमआईआईसी पर ब्लू जीन / क्यू का उपयोग करते हुए ओईआई और यूजीएनआई का उपयोग करते हुए क्रे एक्ससी 40 पर ओपन-एमपीआई का उपयोग कर क्रे एक्ससी 40 ( here ) पर एमआईसीआई का प्रदर्शन किया गया है। ( here ), लेकिन इनमें से कोई भी विक्रेता समर्थित नहीं है।

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

टिप्पणियाँ

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

क्या कोई एमपीआईआई के ओपनएमपीआई और एमपीआईसी कार्यान्वयन के बीच मतभेदों को विस्तारित कर सकता है? इनमें से कौन सा बेहतर कार्यान्वयन है?


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


यदि आप उत्पादन प्रणाली के बजाय विकास करते हैं, तो एमपीआईसी के साथ जाएं। एमपीआईसी ने डिबगर बनाया है, जबकि ओपन-एमपीआई आखिरी बार मैंने चेक नहीं किया है।

उत्पादन में, ओपन-एमपीआई सबसे अधिक तेज़ होगा। लेकिन फिर आप इंटेल एमपीआई जैसे अन्य विकल्पों का शोध करना चाह सकते हैं।