मुझे पता है MPI_Send()
एक अवरुद्ध कॉल है, जो तब तक प्रतीक्षा करता है जब तक कि पुन: उपयोग के लिए एप्लिकेशन बफर को संशोधित करना सुरक्षित न हो। प्रेषण कॉल सिंक्रोनस (रिसीवर के साथ एक हैंडशेक होना चाहिए) बनाने के लिए, हमें MPI_Ssend()
का उपयोग करने की आवश्यकता है। मैं दोनों के बीच का अंतर जानना चाहता हूं। मान लीजिए कि मुझे प्रक्रियाओं के बीच बाइट्स की निश्चित मात्रा भेजने की ज़रूरत है, जिसे किसी को अधिक समय लगाना चाहिए?
मेरे साथ कोड MPI_Send() कॉल को अच्छी तरह से काम करता है लेकिन MPI_Ssend() के लिए अनिश्चित काल तक प्रतीक्षा कर रहा है। संभावित कारण क्या हो सकते हैं?अंतर?
और सबसे महत्वपूर्ण बात यह है कि, मुझे यकीन है कि MPI_Send()
का उपयोग करते समय प्राप्त करने की प्रक्रिया में डेटा प्राप्त किया जा रहा है, इसलिए MPI_Ssend()
का उपयोग करते समय यह अनुमान हस्तशिल्प की प्रतीक्षा करने के पक्ष में कुछ भी नहीं लेता है।
या मैं निष्कर्ष निकाल सकता हूं: MPI_Send()
के साथ आप स्वयं प्रक्रिया में डेटा भेज सकते हैं लेकिन MPI_Ssend()
का उपयोग नहीं कर सकते?
और सबसे महत्वपूर्ण बात यह है कि, मुझे पूरा यकीन है कि MPI_Send() का उपयोग करते समय प्राप्त प्रक्रिया में डेटा प्राप्त किया जा रहा है, इसलिए MPI_Ssend() का उपयोग करते समय हैंडशेक की प्रतीक्षा करने के लिए यह अनुमान कुछ भी नहीं करता है। मेरा कोड MPI_Send() के साथ ठीक काम करता है लेकिन MPI_Ssend() के साथ अनिश्चित काल तक प्रतीक्षा करता है। किसी भी संभावित कारणों के बारे में सोचें? –
यह पूरी तरह से आपके कोड पर निर्भर करेगा। अगर किसी कारण से आपका कोड किसी भी कारण से 'एमपीआई_एसईएनडी' से प्रगति के बिना 'एमपीआईजीसीवी' के मिलान कॉल तक नहीं पहुंचता है, जो डेडलॉक का कारण बन सकता है, लेकिन कोड को देखे बिना बताने का कोई तरीका नहीं है। –
http://stackoverflow.com/questions/ 17820445/ओपनएमपी-हैलो-वर्ल्ड-ऑन-क्लस्टर क्या आप इसका जवाब दे सकते हैं? एमपीआई मानक का जिक्र करने के लिए –