MPI

2012-02-07 8 views
14

के साथ कमांड लाइन के माध्यम से तर्क पास करना मैं सी ++ का उपयोग कर एकाधिक प्रक्रियाओं पर एक प्रक्रिया चलाने के लिए एमपीआई कॉल का उपयोग कर रहा हूं। मेरी मुख्य समारोह में प्रथम कुछ पंक्तियों देखने की तरह:MPI

int main(int argc, char *argv[]){ 
int comm_sz; 
int my_rank; 

MPI_Init(&argc, &argv); 
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); 
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); 

x = atoi(argv[4]); 
y = atoi(argv[5]); 

अब जब मैं निष्पादित और का उपयोग कर

mpiexec -n 1 program 10 10 

मैं चाहता हूँ x और y मान 10 और 10 आवंटित करने के लिए मेरे कार्यक्रम चलाने के रूप में, वे 4 और 5 वें तर्क पारित कर रहे हैं। लेकिन यह नहीं हो रहा है और यह इन चर को 0 और 0 के अनुसार निर्दिष्ट करता है। और मेरा कार्यक्रम वांछित के रूप में नहीं चलाता है।

जब मैं इन नंबरों को बदलता हूं तो मेरा सीरियल कोड चल रहा है। यह सिर्फ मैं एमपीआई के लिए नया हूँ।

क्या आप सुझाव दे सकते हैं कि मैं गलत कहां जा रहा हूं?

+0

क्या आपने अभी 'argv' की सामग्री को प्रिंट करने का प्रयास किया है? परिणाम क्या है? – suszterpatt

+0

मैंने किया। जब मैंने सरणी में सामग्री मुद्रित की, तो उसने दो तर्क 10, 10 को पहचान लिया लेकिन पद 4 और 5 पर नहीं। – freshmaster

+0

ऐसा लगता है कि उन्हें उन्हें argv [1] और argv [2] के रूप में पढ़ा जा रहा है। मैंने अपनी समस्या को हल किया हाँ, लेकिन मैं जानना चाहता था कि यह क्यों हो रहा है। मैं वास्तव में MPI_Init समझ नहीं रहा हूँ। – freshmaster

उत्तर

15

लिनक्स/विंडोज/मैक ओएसएक्स पर अधिकांश एमपीआई कार्यान्वयन में, जब आप MPI_Init(&argc, &argv) पर कॉल करते हैं, तो तर्क सूची संशोधित होती है जैसे कि आपने सीरियल समस्या program 10 10 के रूप में चलाई है; यह निष्पादन योग्य तक तर्क सूची खाता है, जो संभावित रूप से mpirun कमांड में कई विकल्पों को शामिल कर सकता है।

मानक यह निर्दिष्ट नहीं करता है; मानक प्रक्रियाओं को लॉन्च करने और आरंभिक प्रक्रिया को कुछ हद तक अस्पष्ट करने के बारे में बहुत सारी चीज़ें छोड़ देता है, क्योंकि एमपीआई को उन प्रणालियों पर काम करना पड़ता है जो पॉज़िक्स-प्रकार सिस्टम से बहुत अलग व्यवहार करते हैं। लेकिन मैंने कभी भी एक पीओएसआईक्स-प्रकार पर्यावरण में एमपीआई कार्यान्वयन नहीं देखा है जो ऐसा नहीं करता है।

(जोड़ने के लिए अपडेट किया गया :) प्रश्न पर g.inozemtsev की टिप्पणी के रूप में एक उत्कृष्ट, संक्षिप्त स्पष्टीकरण है ऐसा क्यों होता है।

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