2013-03-22 10 views
7

मैंने MPI_Open_port और MPI_Comm_accept का उपयोग करके एमपीआई में एक पीयर-टू-पीयर कनेक्शन लागू किया। मैं विभिन्न कंप्यूटरों परmpirun के साथ और बिना प्रोग्राम चलाने के बीच अंतर

[email protected]:~$ mpirun server 
[email protected]:~$ mpirun client 

का उपयोग कर एक सर्वर और क्लाइंट प्रोग्राम चलाता हूं। मैंने देखा कि

[email protected]:~$ ./server 
[email protected]:~$ ./client 

भी ठीक काम करता है। क्या आपको पता है कि MPI निष्पादन योग्य के साथ mpirun के साथ और बिना किसी अंतर के बीच कोई अंतर है?

बेशक, मैं अतिरिक्त पैरामीटर नहीं दे सकता (उदा। mpirun --mca btl self,openib), और सभी प्रक्रियाओं का रैंक 0 है, जो पूरी तरह से ठीक है। लेकिन क्या कुछ कम स्पष्ट है?

उत्तर

15

बिना mpirun/mpiexec चल रहा है "सिंगलटन MPI_INIT" कहा जाता है और उच्च गुणवत्ता कार्यान्वयन, नवीनतम एमपीआई मानक दस्तावेज़ में §10.5.2 के नीचे पाया के लिए एमपीआई सिफारिशों का हिस्सा है:

एक उच्च गुणवत्ता कार्यान्वयन MPI_INIT पर कॉल करके एक एमपीआई प्रक्रिया बनने के लिए किसी भी प्रक्रिया (जिसमें "समांतर अनुप्रयोग" तंत्र के साथ शुरू नहीं किया गया है) शामिल हैं। इस तरह की एक प्रक्रिया MPI_COMM_ACCEPT और MPI_COMM_CONNECT दिनचर्या का उपयोग करके अन्य एमपीआई प्रक्रियाओं से जुड़ सकती है, या अन्य एमपीआई प्रक्रियाओं को जन्म देती है। एमपीआई इस व्यवहार को जरूरी नहीं है, लेकिन तकनीकी रूप से व्यवहार्य रूप से इसे प्रोत्साहित करता है।

एक प्रक्रिया MPI_INIT प्रवेश करती है और निर्धारित करता है कि कोई विशेष कदम उठाए थे, तो (यानी, यह नहीं जानकारी अन्य प्रक्रियाओं के साथ एक MPI_COMM_WORLD के रूप में दिया गया है) यह सफल होता है और एक सिंगलटन एमपीआई कार्यक्रम निर्माण करता है, वह यह है कि, एक जिसमें MPI_COMM_WORLD आकार 1.

का उपयोग करते हुए अपने मामले में mpirun"समांतर आवेदन" तंत्र मानक पाठ में उल्लेख किया है। यह सभी आरंभ प्रक्रियाओं पर MPI_COMM_WORLD स्थापित करने के लिए आवश्यक जानकारी के साथ MPI_INIT प्रदान करता है। mpirun प्रक्रियाओं की जानकारी के बिना केवल सिंगलटन एमपीआई उदाहरणों के रूप में चलाया जा सकता है और इसलिए उनमें से सभी को 0 रैंक है (जो ठीक है, क्योंकि प्रत्येक MPI_COMM_WORLD एक अलग है)।

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