पृष्ठभूमि
नमस्ते,
मैं बूस्ट का उपयोग करने की कोशिश कर रहा हूँ :: 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
ओपन एमपीआई के लिए पैकेज। यदि पुस्तकालय को एक निर्भरता के रूप में स्थापित किया गया है, तो केवल रन-टाइम हिस्सा होगा।