2010-03-11 14 views
95

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

+1

इसे देखें: http://stackoverflow.com/questions/144309/what-is-the-best-mpi-implementation –

+2

हमने व्यक्तिगत रूप से ओपनएमपीआई को हमारे एमपीआई कार्यान्वयन के रूप में चुना है। हमारे लिए, यह बेहतर बेंचमार्क किया गया और पोर्टेबिलिटी एक मुद्दा नहीं था। टेलर एल पोस्ट सवाल लिंक देखें। – Xorlev

+0

आप यह भी मान सकते हैं कि [Google Trends] (https://trends.google.com/trends/explore?q=openmpi,MPICH2,mpich,%2Fm%2F03z8q2,%2Fm%2F07yb2g) ओपनएमपीआई 2-3 बार है एमपीआईसी/एमपीआईसी 2 की तुलना में अधिक खोजा गया। – Foad

उत्तर

11

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

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

+1

टिप के लिए धन्यवाद !! – lava

+2

मुझे यकीन नहीं है कि अंतर्निहित डीबगर द्वारा आपका क्या मतलब है, लेकिन मुझे लगता है कि ओपन-एमपीआई के साथ अच्छा एकीकरण है। जीडीबी: https://www.open-mpi.org/faq/?category=debugging। – Jeff

+0

उत्पादन के लिए, क्या टीएओ के साथ एमपीआईसी का उपयोग करने पर कोई विचार है? – namu

10

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

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

+11

यदि सभी आरटीएफएमड हैं, तो हमें स्टैक ओवरफ्लो की आवश्यकता नहीं होगी :-) – Jeff

+1

एफडब्ल्यूआईडब्ल्यू, ओपन-एमपीआई में वालग्रिंड-क्लीनिविटी पर एक एफएक्यू एंट्री है: https://www.open-mpi.org/faq/?category=debugging#valgrind_clean – Jeff

+0

@ जेफ उम बग के बारे में क्या? तारीख से बाहर दस्तावेज़? यह मेरे (सैकड़ों ..) प्रश्नों की बहुलता के पीछे है;) – javadba

6

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

105

उद्देश्य

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

नेटवर्क प्रौद्योगिकी

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

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

एक ओर्थोगोनल हार्डवेयर/प्लैटफार्म समर्थन पर धुरी से

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

ऐतिहासिक रूप से, ओपनएमपीआई को MPI_THREAD_MULTIPLE के लिए समग्र समर्थन नहीं मिला है, जो कुछ अनुप्रयोगों के लिए महत्वपूर्ण है। यह कुछ प्लेटफार्मों पर समर्थित हो सकता है लेकिन आम तौर पर काम पर नहीं माना जा सकता है। दूसरी ओर, MPICH के पास MPI_THREAD_MULTIPLE के लिए कई वर्षों तक समग्र समर्थन है।

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

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

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

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

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

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

यहाँ एक मंच द्वारा मंच के आधार पर मेरी मूल्यांकन है:

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

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

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

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

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

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

नोट्स

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

+0

यह संभव है कि OpenMPI को सामूहिक रूप से साझा-स्मृति के लिए बेहतर समर्थन मिले, लेकिन मुझे अपना उत्तर अपडेट करने से पहले पूरी तरह से जांच करने की आवश्यकता है। – Jeff

+1

क्या आप विस्तारित कर सकते हैं कि आप विंडोज़ पर एमपीआई चलाने में कोई बात क्यों नहीं देखते? –

+1

नहीं, लेकिन विंडोज़ पर एचपीसी के बारे में स्टैक ओवरव्लो पर एक नया सवाल पूछने के लिए महसूस करें। – Jeff

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