का उपयोग करके कम करें I वर्तमान में ग्राफ सिद्धांत समस्या के लिए कुछ एमपीआई कोड पर काम कर रहा हूं जिसमें कई नोड्स में प्रत्येक का उत्तर और उस उत्तर की लंबाई हो सकती है। मास्टर नोड पर सबकुछ वापस पाने के लिए मैं उत्तर के लिए एमपीआई_गैदर कर रहा हूं और MPI_MINLOC ऑपरेशन का उपयोग करके MPI_Reduce करने का प्रयास कर रहा हूं, यह पता लगाने के लिए कि सबसे छोटा समाधान कौन था। अभी मेरी डेटाप्रकार कि लंबाई संग्रहीत करता है और नोड आईडी (http://www.open-mpi.org/doc/v1.4/man3/MPI_Reduce.3.php की तरह कई साइटों पर दिखाए जाने उदाहरणों के अनुसार) के रूप में परिभाषित किया गया है:ओपनएमपीआई MINLOC
struct minType
{
float len;
int index;
};
प्रत्येक नोड मैं निम्नलिखित तरीके से इस struct की स्थानीय कॉपी आरंभ कर रहा हूँ पर:
int commRank;
MPI_Comm_rank (MPI_COMM_WORLD, &commRank);
minType solutionLen;
solutionLen.len = 1e37;
solutionLen.index = commRank;
निष्पादन मैं एक MPI_Gather कॉल कि सफलतापूर्वक (मैं स्मृति में से उन्हें बाहर मुद्रित किया है उन्हें सत्यापित करने के) समाधान के सभी नीचे खींचती है के अंत में, और कॉल:
MPI_Reduce (&solutionLen, &solutionLen, 1, MPI_FLOAT_INT, MPI_MINLOC, 0, MPI_COMM_WORLD);
,210
यह मेरी समझ है कि बहस होने की अपेक्षा की जाती है:
- डेटा स्रोत
- परिणाम के लिए लक्ष्य (नामित रूट नोड पर केवल महत्वपूर्ण)
- द्वारा भेजे गए आइटम्स की संख्या है प्रत्येक नोड
- डेटाप्रकार
- आपरेशन
- रूट (MPI_MINLOC रूप में अच्छी तरह से परिभाषित किया जाना प्रतीत होता है) (MPI_FLOAT_INT ऊपर के लिंक के आधार पर परिभाषित किया गया प्रतीत होता) निर्दिष्ट कम समूह
- संचार समूह में नोड की आईडी प्रतीक्षा करने के लिए।
[compute-2-19.local:9754] *** An error occurred in MPI_Reduce [compute-2-19.local:9754] *** on communicator MPI_COMM_WORLD [compute-2-19.local:9754] *** MPI_ERR_ARG: invalid argument of some other kind [compute-2-19.local:9754] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort) -------------------------------------------------------------------------- mpirun has exited due to process rank 0 with PID 9754 on node compute-2-19.local exiting improperly. There are two reasons this could occur: 1. this process did not call "init" before exiting, but others in the job did. This can cause a job to hang indefinitely while it waits for all processes to call "init". By rule, if one process calls "init", then ALL processes must call "init" prior to termination. 2. this process called "init", but exited without calling "finalize". By rule, all processes that call "init" MUST call "finalize" prior to exiting or it will be considered an "abnormal termination" This may have caused other processes in the application to be terminated by signals sent by mpirun (as reported here). --------------------------------------------------------------------------
मैं करने के लिए पूरी तरह से इस पर स्टम्प्ड जा रहा स्वीकार करेंगे:
मेरे कोड को कम आपरेशन के लिए बनाता जब मैं इस त्रुटि मिलती है। यदि यह महत्वपूर्ण है तो मैं CentOS 5.5 के आधार पर एक रॉक्स क्लस्टर पर OpenMPI 1.5.3 (जीसीसी 4.4 का उपयोग करके निर्मित) का उपयोग करके संकलित कर रहा हूं।
वह था। मैं थोड़ी देर के लिए इस तरह की चीजें कर रहा हूं (भेजने और प्राप्त करने के लिए एक ही वस्तु का उपयोग करके), मुझे वापस जाना चाहिए और सुनिश्चित करना है कि मुझे इसे वैध रूप से करने की अनुमति है। जल्दी जवाब देने का शुक्रिया। – jthecie
अच्छा। (आपको डॉकू को अधिक सावधानी से पढ़ना चाहिए था लेकिन ओपनएमपीआई को एक स्पष्ट त्रुटि संदेश देना चाहिए) – Walter
जहां मैंने अपने आप को पैर में गोली मार दी थी, यह याद कर रहा था कि यह सब कुछ सभी परिचालनों पर ऐसा करने में सक्षम है और यह मानने की मूर्ख गलती कर रहा है यह यहां भी काम करेगा। अब मुझे पता है और यह कोड प्राप्त करने और काम करने में सक्षम था। एक बार फिर, त्वरित उत्तर के लिए धन्यवाद। – jthecie