2011-03-06 12 views
26

सीयूडीए में हम मेजबान पर malloc के माध्यम से आवंटित डिफ़ॉल्ट मेमोरी की तुलना में मेजबान से GPU तक डेटा को अधिक कुशलतापूर्वक कॉपी करने के लिए पिन की गई मेमोरी का उपयोग कर सकते हैं। हालांकि दो प्रकार की पिन की यादें डिफ़ॉल्ट पिन की गई मेमोरी और शून्य-कॉपी पिन की गई स्मृति हैं।डिफ़ॉल्ट पिन किए गए मेमोरी बनाम ज़ीरो-कॉपी मेमोरी

डिफ़ॉल्ट होस्ट से GPU के लिए डेटा पिन की गई स्मृति प्रतियां दोगुनी गति से सामान्य स्थानान्तरण के रूप में है, इसलिए निश्चित रूप से एक फायदा (बशर्ते हम पेज लॉक करने के लिए पर्याप्त मेजबान स्मृति)

पिन किए गए के विभिन्न संस्करण में है स्मृति, यानी शून्य प्रतिलिपि स्मृति, हमें मेजबान से डेटा को GPU के DRAM पर पूरी तरह कॉपी करने की आवश्यकता नहीं है। कर्नेल सीधे होस्ट मेमोरी से डेटा पढ़ते हैं।

मेरा प्रश्न है: इनमें से कौन सा पिन-मेमोरी प्रकार बेहतर प्रोग्रामिंग अभ्यास है।

उत्तर

29

मैं इसे आपके आवेदन पर निर्भर करता है लगता है (अन्यथा, क्यों वे दोनों तरीकों से प्रदान करेगा?)

मैप, पिन किए गए स्मृति (शून्य-प्रतिलिपि) उपयोगी होता है जब या तो:

  • जीपीयू की अपनी याददाश्त नहीं है और रैम का उपयोग

  • आप डेटा को एक बार लोड करते हैं, लेकिन आपके पास प्रदर्शन करने के लिए बहुत अधिक गणना है और आप इसके माध्यम से मेमोरी ट्रांसफर विलंबता को छिपाना चाहते हैं।

  • मेजबान पक्ष को बदलने के लिए/अधिक डेटा जोड़ सकते हैं या परिणामों को पढ़ने, जबकि गिरी अभी भी चल रहा है चाहता है (उदाहरण के लिए संचार)

  • डेटा GPU स्मृति में फ़िट नहीं होता

ध्यान दें, आप डेटा की प्रतिलिपि बनाने और समानांतर में कर्नल चलाने के लिए कई धाराओं का भी उपयोग कर सकते हैं।

पिन की गई, लेकिन नहीं मैप की स्मृति बेहतर है:

  • आप लोड या डेटा को कई बार की दुकान है। उदाहरण के लिए: आपके पास कई अनुवर्ती कर्नल हैं, जो चरणों में काम कर रहे हैं - हर बार मेजबान से डेटा लोड करने की आवश्यकता नहीं है।

  • वहाँ इतना गणना प्रदर्शन करने के लिए नहीं है और लोड हो रहा है सुप्तावस्था में अच्छी तरह से छिपा हुआ नहीं जा रहे हैं

+0

हां बिल्कुल। मुझे 'उदाहरण के द्वारा CUDA' पुस्तक में लगभग वही विवरण मिला। वे दावा करते हैं कि मैप किए गए मेमोरी सबसे अच्छे हैं जब ए) आपके कर्नल डेटा को एक बार पढ़ते और लिखते हैं b) जब आपके पास एक एकीकृत ग्राफिक्स होता है, जैसे आईओएन प्लेटफार्म जहां सीपीयू और जीपीयू एक ही मेमोरी साझा करते हैं। – jwdmsd

11

मैप पिन किए गए स्मृति, सभी मामलों में पिन किए गए स्मृति के अन्य प्रकार के समान है सिवाय इसके कि यह मैप किया गया है सीयूडीए पता स्थान में, इसलिए सीयूडीए कर्नेल द्वारा पढ़ा और लिखा जा सकता है साथ ही प्रतिलिपि इंजन द्वारा डीएमए स्थानान्तरण के लिए भी उपयोग किया जा सकता है।

पिन की गई मेमोरी मैपिंग का लाभ दो गुना था: यह आपको कुछ पता स्थान बचाता है, जो जीपीयू के साथ 32-बिट प्लेटफार्मों की दुनिया में एक बहुमूल्य वस्तु हो सकती है जो 3-4 जी रैम रख सकती है। साथ ही, मैप किए गए मेमोरी को दुष्ट कर्नेल द्वारा गलती से दूषित नहीं किया जा सकता है। लेकिन यह चिंता इतनी गूढ़ है कि CUDA 4 में एकीकृत पता स्थान सुविधा।0 सभी पिन किए गए आवंटन डिफ़ॉल्ट रूप से मैप किए जाने का कारण बनेंगे।

सैंडर्स/Kandrot पुस्तक द्वारा उठाए गए बिंदुओं इसके अलावा, अन्य बातों को ध्यान में रखना:

  • एक गिरी से स्मृति की मेजबानी के लिए लेखन (जैसे सीपीयू के लिए परिणाम पोस्ट करने के लिए) है कि में अच्छा है जीपीयू में उस मामले में कवर करने की कोई विलंबता नहीं है, और

  • यह बहुत महत्वपूर्ण है कि मेमोरी ऑपरेशंस को समेकित किया जाता है - अन्यथा, यहां तक ​​कि एसएम 2.x और बाद में जीपीयू एक बड़ी बैंडविड्थ हिट लेते हैं।

+0

क्या आप पिछले दो बिंदुओं का विस्तार कर सकते हैं? पहली बात के बारे में, जब आप कहते हैं कि "GPU उस मामले में कवर करने की कोई विलंबता नहीं है" तो आपका क्या मतलब है? दूसरे बिंदु के बारे में, शून्य प्रतिलिपि के ढांचे में संचालन को सहवास की आवश्यकता क्यों है? क्या वे वैश्विक स्मृति का उपयोग करते हैं? – JackOLantern

+1

यदि GPU मैप किए गए पिन की गई मेमोरी से पढ़ता है, तो स्मृति अनुरोध के आने तक इसे कुछ करना पड़ता है। यदि यह मैप किए गए पिन मेमोरी को लिखता है, तो यह बस को लिखता है और आगे बढ़ता है। मुझे नहीं पता कि उन्हें क्यों समेकित किया जाना है। कोलेसिंग एक वार्प-आधारित निर्माण है और हार्डवेयर कार्यान्वयन के साथ इसका कुछ संबंध होना चाहिए। – ArchaeaSoftware

+0

स्मृति संचालन की मात्रा को संकुचित करना, इसलिए धीमी पीसीआई-ई बस (जीपीयू की उच्च बैंडविड्थ वैश्विक मेमोरी की तुलना में) के माध्यम से शून्य-प्रतिलिपि स्मृति के लिए यह अधिक महत्वपूर्ण हो गया है – Bulat

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