मेरा प्रश्न शीर्षक के समान है। असल में, मैं असीमित रूप से डिवाइस मेमोरी को मुक्त करने का एक तरीका ढूंढ रहा हूं।क्या cudaFree() asynchronous है?
धन्यवाद!
मेरा प्रश्न शीर्षक के समान है। असल में, मैं असीमित रूप से डिवाइस मेमोरी को मुक्त करने का एक तरीका ढूंढ रहा हूं।क्या cudaFree() asynchronous है?
धन्यवाद!
cudaFree() असीमित नहीं है। एक सिंक्रनाइज़ेशन कॉल को आंतरिक रूप से कॉल किया जाता है जब होस्ट से CudaFree() को कॉल किया जाता है।
मुझे समझ में नहीं आया कि वास्तव में स्मृति को अतुल्यकालिक रूप से मुक्त करने की आपकी आवश्यकता क्या है।
cudaFree()
तुल्यकालिक है। यदि आप वास्तव में यह असीमित होना चाहते हैं, तो आप अपना स्वयं का सीपीयू थ्रेड बना सकते हैं, इसे एक कार्यकर्ता कतार दें, और अपने प्राथमिक थ्रेड से cudaFree
अनुरोध पंजीकृत करें।
उसने कहा, एसिंक्रोनस फ्री एक अजीब अनुरोध की तरह प्रतीत होता है। शायद आप समझा सकते हैं कि आप इसे अतुल्यकालिक क्यों करना चाहते हैं। क्या आप सीयूडीए कार्यक्रम शुरू होने के तुरंत बाद स्वतंत्र होना चाहते हैं?
सीयूडीए धाराओं और सीयूडीए कार्यक्रमों से मुक्त होने के बाद से उनके परिचय के बाद से असीमित बना दिया गया है, ठीक है क्योंकि कुछ अनुप्रयोगों में उन सबराउटिन हैं जो उनका उपयोग करते हैं, और उन सबराउटिनों की इच्छा है कि वे अपने कॉलर्स के कोड पथ को तुल्यकालिक बनें। असिंक्रोनस फ्री एक ही कारण से पूरी तरह से उचित अनुरोध है। CUDA असीमित रूप से स्मृति को मुफ्त में चिह्नित कर सकता है, और यदि इसे पृष्ठ तालिकाओं को संपादित करने के लिए GPU के साथ सिंक्रनाइज़ करना होगा, तो उन परिचालनों को आलसी ढंग से करें (अगले कर्नेल थंक तक प्रतीक्षा करें)। – ArchaeaSoftware
@ आर्किया: यह दिलचस्प है। मुझे लगता है कि पोस्टर स्मृति को मुक्त करने में भी रूचि रखता है, केवल cudaEvent_t ऑब्जेक्ट्स नहीं। एक घटना या धारा के साथ एक cudaFree कैसे जोड़ता है? –
श्री फूज़, आपका उत्तर सही है (यानी AFAIK cudaFree() तुल्यकालिक है), मैं केवल यह इंगित कर रहा हूं कि यह अतुल्यकालिक होना उचित है। – ArchaeaSoftware
आश्रित कर्नेल लॉन्च की एक पाइपलाइन की कल्पना करें, कुछ को अस्थायी आवंटन की आवश्यकता है। यह अच्छा होगा अगर होस्ट थ्रेड असीमित रूप से 'cudaMalloc' और 'cudaFree' को ऐसी पाइपलाइन में डालने में सक्षम हो। –
बड़ी समस्या के मामले में, आप अन्य धाराओं के लिए जगह बनाने के लिए एसिंक्रोनस फ्रीिंग मेमोरी का उपयोग कर सकते हैं। दूसरे शब्दों में, आप एक ही जीपीयू के भीतर कई धाराओं के साथ बड़ी समस्याओं को संभालने में सक्षम होंगे। –