2010-11-30 10 views
5

सब कुछ शीर्षक है। मेरी टीम और मैं वर्तमान में एक परियोजना पर काम कर रहे हैं और हम एमपीआई का उपयोग कर रहे हैं। एक ही स्थान पर, हम एक टाइमआउट के साथ संसाधन के लिए MPI_send Resquesting कर रहे हैं। यदि संसाधन उपलब्ध है, तो हम 1 लौटते हैं और यदि नहीं और टाइमआउट समाप्त हो गया है, तो हमलौटते हैं। हमने सिग्नलआरएम जैसे संकेतों का उपयोग करने की कोशिश की, लेकिन यह काम नहीं करता है क्योंकि हर नया अनुरोध पुराने अलार्म को सेट करके पुराने लोगों को रद्द कर देता है।क्या एमपीआई में समय-समय पर मस्तिष्कवाद है?

आपके उत्तर के लिए धन्यवाद !!

उत्तर

7

आपको MPI_Isend, MPI_Irecv और MPI_Iprobe जैसे गैर-अवरुद्ध बिंदु-से-बिंदु संचार प्राइमेटिव की जांच करनी चाहिए। फिर आप स्वयं को टाइमआउट लागू कर सकते हैं, और यदि आप चाहें तो MPI_Cancel का उपयोग करें।

+0

हाय एड्रिक और आपके उत्तर के लिए धन्यवाद। लेकिन मैं टाइमआउट का उपयोग कैसे कर सकता हूं? – Dimitri

+0

आपको अपना खुद का टाइमआउट लागू करने, भेजने के लिए 'एमपीआईटीएस्ट' का उपयोग करके जांच करनी चाहिए, यह देखने के लिए कि संचार पूरा हो गया है या फिर या तो भेजें/प्राप्त करें, या इसे रद्द करें। – Edric

2

इसे पूरा करने का कोई मानक तरीका नहीं है।

गैर-अवरुद्ध कॉल (उदा। MPI_Isend, MPI_Irecv) के साथ भेजें/recv जोड़ी को कार्यान्वित करना और MPI_Test और MPI_Cancel का उपयोग करना एक संभावित समाधान है।

संसाधन की प्रकृति की प्रकृति के आधार पर, और कार्यक्रम में कई बार इस कार्यक्षमता की आवश्यकता है, तो आप MPI_ISend को "निरंतर अनुरोध" ऑब्जेक्ट के रूप में लागू करने पर भी विचार कर सकते हैं। यहां अधिक जानकारी है: Persistent Communications

एक निरंतर अनुरोध का लाभ यह है कि अनुरोध गठित किया जा सकता है, और फिर संसाधन वास्तव में उपलब्ध होने पर ही निष्पादित किया जाता है .... यह मानते हुए कि संसाधन वास्तविक एमपीआई_ * कॉल से स्वतंत्र रूप से चेक किया जा सकता है। संपूर्ण MPI_Send/MPI_Recv कॉल को सुधारने की आवश्यकता के बिना, निरंतर संचार अनुरोध को पूरे कार्यक्रम में कई बार फिर से उपयोग किया जा सकता है।