2012-07-03 15 views
17

क्या किसी को पता है कि MPI को gcc के साथ संकलित करना संभव है? मुझे gcc, mpicc का उपयोग करने की आवश्यकता है।जीसीआई के साथ एमपीआई संकलित कैसे करें?

+0

यह संभव है लेकिन आप क्यों चाहते हैं? आम तौर पर, लपेटा हुआ कंपाइलर (यहां mpicc) अधिक सुविधाजनक है और इसे किसी भी तरह से अनुकूलित किया जाएगा। – Hbcdev

उत्तर

0

mpicc पहले से ही एक बैकएंड

+1

अजीब, मेरा 'mpicc' बैकएंड के रूप में 'icc' का उपयोग कर रहा है ... –

0

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

मेरा सुझाव है कि आपको mpicc स्क्रिप्ट का एक उदाहरण मिल जाए और इसे रद्द कर दें।

21

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

उदाहरण के लिए, ओपन एमपीआई में, रैपर सी ++ प्रोग्राम हैं जो सादे पाठ कॉन्फ़िगरेशन फ़ाइलों को पढ़ते हैं और कमांड लाइन विकल्प बनाते हैं जिन्हें आगे संकलक पर पास किया जाता है।

$ mpicc -showme 
icc 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi 
-fexceptions 
-pthread 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-lmpi 
-ldl 
-Wl,--export-dynamic 
-lnsl 
-lutil 

ऐसा नहीं है कि विशेष मामले इंटेल सी संकलक icc बैकएंड के रूप में प्रयोग किया जाता है (यह वास्तव में एक पंक्ति है कि मैं यहाँ विभाजित किया है पठनीयता में सुधार करने के लिए): mpicc -showme इस तरह के विकल्पों की पूर्ण सूची से पता चलता कंपाइलर लेकिन हमारे पास वेरिएंट भी हैं जो जीसीसी का उपयोग करते हैं। तुम भी mpicc -showme:compile साथ विकल्पों comple चरण (आमतौर पर CFLAGS के रूप में जाना जाता है) के लिए आवश्यक की सूची प्राप्त कर सकते हैं:

$ mpicc -showme:compile 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include 
-I/opt/MPI/openmpi-1.5.3/linux/intel/include/openmpi 
-fexceptions 
-pthread 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
साथ

के साथ ही विकल्प है कि आप लिंकर (LDFLAGS के रूप में जाना जाता है) को पास किए जाने की सूची mpicc -showme:link:

$ mpicc -showme:link 
-fexceptions 
-pthread 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-Wl,-rpath,/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-I/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-L/opt/MPI/openmpi-1.5.3/linux/intel/lib 
-lmpi 
-ldl 
-Wl,--export-dynamic 
-lnsl 
-lutil 

इनका उपयोग किया जा सकता है, उदाहरण के लिए एक Makefile, इस तरह में:

... 
CFLAGS += $(shell mpicc -showme:compile) 
LDFLAGS += $(shell mpicc -showme:link) 
... 

जहाँ तक मुझे पता के रूप में -showme:compile और -showme:link खोलने के लिए MPI और अन्य कार्यान्वयन केवल विकल्पों की पूर्ण सूची जब -show के साथ बुलाया देना विशिष्ट हैं।

मैं अब भी लगता है कि यह सीधे mpicc उपयोग करने के लिए है क्योंकि अगर ऐसा होता है कि एमपीआई सेटअप में कुछ बदल गया है, इसे तुरंत आवरण में परिलक्षित होगा बेहतर है आप मैन्युअल रूप से अपने निर्माण स्क्रिप्ट/Makefile परिवर्तन होगा, जबकि (जब तक आप का उपयोग विकल्पों को स्वचालित रूप से प्राप्त करने के लिए -showme:compile और -showme:link)। MP12 के लिए

0

हां, आप वास्तव में जीसीसी का उपयोग कर सकते हैं।

gcc -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent -I/usr/lib/openmpi/include/openmpi/opal/mca/event/libevent2021/libevent/include -I/usr/lib/openmpi/include -I/usr/lib/openmpi/include/openmpi -pthread -Wl,-rpath -Wl,/usr/lib/openmpi/lib -Wl,--enable-new-dtags -L/usr/lib/openmpi/lib -lmpi 

जबकि Open MPI docs में:

ओपन एमपीआई टीम दृढ़ता से है कि आप की सिफारिश की बस लेकिन (Ubuntu पर) मेरे मामले में mpicc सिर्फ जीसीसी के एक आवरण है, यहाँ है आदेश mpicc -showme के उत्पादन में है अपने एमपीआई अनुप्रयोगों को संकलित करने के लिए ओपन एमपीआई के "रैपर" कंपाइलर्स का उपयोग करें। यही है, अपने प्रोग्राम को संकलित करने के लिए gcc (उदाहरण के लिए) gcc का उपयोग करने के बजाय, mpicc का उपयोग करें।

हम उपरोक्त कथन दोहराते हैं: ओपन एमपीआई टीम दृढ़ता से अनुशंसा करता है कि एमपीआई अनुप्रयोगों को संकलित और लिंक करने के लिए रैपर कंपाइलर्स का उपयोग करें। यदि आप खुद को कह रहे हैं, "लेकिन मैं रैपर कंपाइलर्स का उपयोग नहीं करना चाहता!", कृपया हमें हास्य दें और उन्हें आजमाएं। देखें कि वे आपके लिए काम करते हैं या नहीं। अगर वे आपके लिए काम नहीं करते हैं तो हमें बताना सुनिश्चित करें। कई लोग अपने "रैपर कंपाइलर्स चूसते हैं!" 1 99 0 के दशक के मध्य में खराब-कार्यान्वित रैपर कंपाइलरों से बुरे व्यवहार पर मानसिकता। इन दिनों चीजें बहुत बेहतर हैं; रैपर कंपाइलर लगभग किसी भी स्थिति को संभाल सकते हैं, और ओपन एमपीआई-विशिष्ट कंपाइलर और लिंकर झंडे मैन्युअल रूप से हार्ड-कोड करने की कोशिश करने से कहीं अधिक विश्वसनीय हैं। कहा जा रहा है कि कुछ बहुत ही बहुत कम स्थितियां हैं - जहां रैपर कंपाइलर्स का उपयोग समस्याग्रस्त हो सकता है - जैसे कई परियोजनाओं के एकाधिक रैपर कंपाइलर्स घोंसले करना। इसलिए, ओपन एमपीआई एमपीआईआई अनुप्रयोगों को संकलित करने के लिए आपको कौन सी कमांड लाइन झंडे की आवश्यकता है, यह जानने के लिए एक समाधान प्रदान करता है।

यहां यह उत्तर आपके लिए उपयोगी है।

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