/ / बूस्ट.एमपीआई पर उबंटू 12.04 - सी ++, बूस्ट, उबंटू, एमपीआई

उबंटू 12.04 पर बूस्ट.एमपीआई - सी ++, बूस्ट, उबंटू, एमपीआई

पृष्ठभूमि

नमस्ते,

मैं बूस्ट का उपयोग करने की कोशिश कर रहा हूँ :: MPI, फिलहाल मैं सिर्फ सरल पहला उदाहरण चलाने की कोशिश कर रहा हूँ ट्यूटोरियल। मुझे इसे बनाने / चलाने में परेशानी हो रही है।

मैंने synaptic पैकेज मैनेजर का उपयोग करके apt-get और इंस्टॉल किए गए boost_mpi & boost_serialization (1.48.0) का उपयोग करके बढ़ावा दिया। मैंने apt-get का उपयोग करके MPICH2 स्थापित किया।

भले ही OpenMPI कभी स्पष्ट रूप से स्थापित नहीं था, यह मेरे सिस्टम पर प्रतीत होता है, मुझे लगता है कि यह Boost :: MPI के लिए एक निर्भरता है, लेकिन ऐसा लगता है कि MPICH2 और OpenMPI एक दूसरे के पैर की उंगलियों पर चल रहे हैं।

जानकारी

अगर मैं निर्माण का उपयोग कर रहा हूँ

g++ test.cpp -I/usr/include/mpich2 -L/usr/lib -lboost_mpi -lboost_serialization

इसके बाद रनिंग करें

mpiexec -n 2 ./a.out

यह त्रुटियों का एक गुच्छा फेंकता है जो OpenMPI से आते हैं। अगर मैं OpenMPI लाइब्रेरी के उपयोग से लिंक करके कोशिश करता हूं और निर्माण करता हूं

g++ test.cpp -L/usr/lib -lboost_mpi -lboost_serialization -lmpi -I/usr/include/openmpi

मुझे निम्न त्रुटियां मिलती हैं:

/usr/bin/ld: /tmp/ccJ5ezv7.o: undefined reference to symbol "ompi_op_set_cxx_callback"
/usr/bin/ld: note: "ompi_op_set_cxx_callback" is defined in DSO /usr/lib/libmpi.so.0 so try adding it to the linker command line
/usr/lib/libmpi.so.0: could not read symbols: Invalid operation

अगर मैं निर्माण का उपयोग करने की कोशिश करता हूं mpic++ निम्न आदेश के साथ

mpic++ test.cpp -lboost_mpi -lboost_serialization

यह प्रपत्र की त्रुटियों का एक गुच्छा लौटाने को लिंक नहीं करेगा

 /usr/lib/libmpich.so: undefined reference to `MPL_trid"

इसलिए मैंने libmpi के खिलाफ लिंक करने की कोशिश की यानी

mpic++ test.cpp -lboost_mpi -lboost_serialization -lmpi

यह बनाता है लेकिन साथ चलने पर mpiexec निम्न त्रुटियाँ उत्पन्न करता है

Fatal error in PMPI_Errhandler_set: Invalid communicator, error stack:
PMPI_Errhandler_set(118): MPI_Errhandler_set(comm=0x370500, errh=0x370be0) failed
PMPI_Errhandler_set(70).: Invalid communicator

सवाल

मुझे ऐसा लगता है कि किसी तरह ओपनएमपीआई और एमपीएचई 2 का अंतर्संबंध हो रहा है, जहां वास्तव में नहीं होना चाहिए। mpiexec?

उत्तर:

उत्तर № 1 के लिए 1

विभिन्न MPI पुस्तकालयों के विरुद्ध संकलित मिक्सिंग कोड सामान्य रूप से समर्थित नहीं है। यदि आपका Boost :: MPI ओपन MPI के खिलाफ जुड़ा हुआ है, तो आप जरूर अपने शेष आवेदन के लिए ओपन MPI का उपयोग करें।

पाने के लिए mpic++ साथ ही अन्य कंपाइलर रैपर और सभी हेडर फाइलें जो आपको स्थापित करनी चाहिए -dev ओपन एमपीआई के लिए पैकेज। यदि पुस्तकालय को एक निर्भरता के रूप में स्थापित किया गया है, तो केवल रन-टाइम हिस्सा होगा।