2012-05-01 8 views
6

है मैं आज में आए (http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Send.html)एमपीआई गिनती अक्सर वैध

MPI_ERR_COUNT 
    Invalid count argument. Count arguments must be non-negative; a count of zero is often valid. 

क्या यह शून्य की गिनती से मतलब है अक्सर मान्य है? क्या इसका मतलब यह है कि यह कार्यान्वयन निर्भर है?

उत्तर

9

मुझे लगता है कि आप इसमें बहुत अधिक पढ़ रहे हैं। मुझे लगता है कि इसका मतलब यह है कि उपयोगकर्ता कार्यान्वयन के आधार पर, 0 यादृच्छिक सकारात्मक पूर्णांक से कुछ भी वैध गणना है। एक संदेश टैग की कल्पना करना मुश्किल नहीं है जिसके लिए कोई पैरामीटर की आवश्यकता नहीं है।

संदेश टैग कोई पैरामीटर की आवश्यकता है, तो यह केवल शून्य (और, वास्तव में, संभवतः अवैध उससे कहीं अधिक भेजने के लिए) भेजने के लिए मान्य है। आपको यह ध्यान रखना होगा कि कोई भी पैरामीटर समान डेटा जैसा नहीं है, क्योंकि संदेश टैग एक "पैरामीटर" है और अपने आप में है।

+0

+1 के बहुत सारे के बिना जैसे कोड लिखने के लिए सक्षम बनाता है। संक्षेप में भी एक पेलोड के बिना, बहुत तथ्य यह है कि एक संदेश प्राप्त हुआ था हो सकता है पर्याप्त जानकारी, उदाहरण के लिए कि निष्पादन में एक निश्चित बिंदु तक पहुंच गया है। – suszterpatt

+0

लेकिन फिर यह क्यों नहीं कहेंगे कि शून्य की गिनती हमेशा वैध होती है? (मैं मानता हूं कि पेलोड के बिना संदेश उपयोगी हैं) – mgilson

+2

आप सही हैं शून्य हमेशा मान्य है। मैंने मानक (एमपीआई 2.2 मानक का खंड 3.2.2) देखा है – mgilson

5

इसका मतलब है कि एमपीआई में किसी भी फ़ंक्शन को निर्दिष्ट करने के लिए एक संदेश डेटा आकार की आवश्यकता होती है, लेकिन इसका मतलब यह नहीं है कि इससे सही एप्लिकेशन कोड होगा।

उदाहरण के लिए, MPI_Send 0 को गिनती के रूप में स्वीकार करता है और हमेशा एक खाली संदेश भेजता है जिसमें कोई डेटा नहीं है लेकिन अभी भी एक लिफाफा है और यह किसी भी मिलान MPI_Recv से प्राप्त किया जा सकता है। दूसरी तरफ यदि आप MPI_Recv में गिनती के रूप में 0 निर्दिष्ट करते हैं तो आपको आने वाले किसी भी मेल खाने वाले गैर-खाली संदेश के लिए एक संदेश छंटनी त्रुटि मिलेगी। यह 0 MPI_Recv के लिए गणना मान लगभग मान्य नहीं है (आवेदन बिंदु दृश्य से) हालांकि यह एमपीआई के लिए पूरी तरह से स्वीकार्य है।

जीरो व्यापक रूप से एमपीआई में स्वीकार कर रहे हैं के बाद से है कि एक और सममित कोड (if (count != 0) ...

+0

मुझे यकीन नहीं है कि मैं 'सममित' कोड तर्क को समझता हूं ... कभी-कभी संदेश लिफाफा से जानकारी की आवश्यकता होती है (उदाहरण के लिए दो प्रक्रियाओं को सिंक्रनाइज़ करने के लिए)। – mgilson

+1

सममित का अर्थ है कि कोड में कोई 'if'-s नहीं है और इस प्रकार इसे पढ़ने और समझना अधिक आसान है। गैर-आवधिक कार्टेशियन टोपोलॉजी में सीमा प्रक्रियाओं में रैंक-विशिष्ट तर्क को रोकने के लिए 'एमपीआई_PROC_NULL' का उपयोग एक और उदाहरण है, उदा। "अगर मैं उच्चतम रैंक नहीं हूं, तो रैंक + 1 पर एक संदेश भेजें" या "यदि मैं रैंक 0 नहीं हूं, तो रैंक -1 से एक संदेश प्राप्त करें"। –

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