के बिना ओपनएमपीआई प्रोग्राम चलाना मैं gcc
और OpenMPI का उपयोग कर रहा हूं। आम तौर पर मैं mpirun
आवरण का उपयोग कर एमपीआई प्रोग्राम को चलाने के - उदाहरण के लिए,mpirun
mpirun -np 4 myprogram
4 प्रक्रियाओं शुरू करने के लिए।
हालांकि, मैं सोच रहा था कि बाइनरी आसानी से उत्पन्न करना संभव है, जो स्वचालित रूप से ऐसा करेगा (शायद कुछ हार्डकोडेड विकल्पों जैसे -np 4
ऊपर)।
मैं जानता हूँ कि मैं एक सी आवरण कि इस तरह के निम्नलिखित के रूप में मेरे कार्यक्रम कहता है, लिख सकते हैं:
#include <stdlib.h>
#include <unistd.h>
int main() {
char *options[] = { "mpirun", "-np", "4", "myprogram" };
execvp("mpirun", options);
/* Ignoring return value to keep example simple */
return EXIT_SUCCESS;
}
लेकिन यह थोड़ा अनाड़ी लगता है और मैं एक की जगह दो निष्पादनयोग्य के साथ खत्म।
मैं स्पष्ट रूप से की तरह
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
लेकिन जब मैं निष्पादन योग्य जिसके परिणामस्वरूप चलाने के लिए, MPI_Comm_size
सेट समूह आकार के रूप में शून्य (जैसे मैं -np 0
तर्क के रूप में दिया था), एमपीआई पुस्तकालयों जोड़ने की कोशिश की है। क्या मैं समूह के आकार को पार करने के लिए पर्यावरण चर या कुछ और उपयोग कर सकता हूं? या, एक एकल निष्पादन योग्य एमपीआई प्रोग्राम (लिनक्स और gcc
का उपयोग करके) बनाने का कोई और तरीका है?
यह किया जा सकता है, हालांकि मुझे नहीं पता कि मेरे सिर के शीर्ष से कैसे। मुझे पता है कि मैंने जो कुछ कार्यक्रम चलाए हैं, वे ऐसा करते हैं। वहां कोई असली जादू नहीं है, यह सिर्फ दृश्यों के पीछे सामान का एक गुच्छा करता है जिसे आप स्वयं भी कर सकते हैं। –
क्या मैं सही ढंग से समझता हूं - आप 'mpirun' को छोड़ना चाहते हैं या आप किसी भी तरह से' mpirun' को स्वचालित रूप से कॉल करना चाहते हैं? –
@ हिस्टो इलिव: अगर मेरे पास एक स्थिर बाइनरी थी तो यह अच्छा होगा। – Jay