2012-09-05 10 views
7

जब हम xptxas का उपयोग करके रजिस्टर के उपयोग की जांच हम कुछ इस तरह देखें:CUDA निरंतर स्मृति बैंकों

ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16] 

मुझे आश्चर्य है कि वर्तमान में वहाँ किसी भी प्रलेखन कि स्पष्ट रूप से cmem बताते हैं [x] है यदि। निरंतर स्मृति को कई बैंकों में अलग करने का क्या मतलब है, कुल में कितने बैंक हैं, और 0, 2, 14, 16 के अलावा अन्य बैंक क्या हैं?

एक तरफ ध्यान दें, @njuffa (आप के लिए विशेष धन्यवाद) के रूप में पहले से NVIDIA के मंच पर समझाया बैंक 0,2,14,16 है क्या:

प्रयुक्त निरंतर स्मृति लगातार कार्यक्रम 'चर' में विभाजित है (बैंक 1), प्लस कंपाइलर उत्पन्न स्थिरांक (बैंक 14)।

cmem [0]: कर्नेल तर्क

cmem [2]: उपयोगकर्ता परिभाषित निरंतर वस्तुओं

cmem [16]: (जिनमें से कुछ संकलक उत्पन्न स्थिरांक शाब्दिक के अनुरूप हो सकती स्रोत कोड में स्थिरांक)

+5

आपका स्वागत है। मुझे लगता है कि मैंने एनवीआईडीआईए मंचों में अपनी पोस्ट में उल्लेख किया है कि बैंक बैंक असाइनमेंट के रूप में निरंतर बैंकों की संख्या जीपीयू आर्किटेक्चर के बीच भिन्न होती है।दूसरे शब्दों में, ये कार्यान्वयन विस्तार हैं कि प्रोग्रामर को चिंता नहीं करना चाहिए क्योंकि वे प्रोग्रामिंग मॉडल का हिस्सा नहीं हैं। एकाधिक बैंकों का उपयोग करने का एक कारण निरंतर स्मृति के विरोधाभासी उपयोगों की संभावना को कम करना है, विशेष रूप से प्रोग्रामर-दृश्यमान निरंतर बैंक उपयोगकर्ता कोड के लिए उपलब्ध है। – njuffa

+0

@njuffa मुझे लगता है कि (ऊपर दिए गए आपके मंचों के उद्धरण के साथ) को उत्तर में परिवर्तित किया जाना चाहिए। :) – harrism

+0

@njuffa मेरे पास एक फॉलो-अप प्रश्न है। प्रोग्रामिंग गाइड कहता है _ निष्पादन कॉन्फ़िगरेशन के तर्कों का मूल्यांकन वास्तविक फ़ंक्शन तर्कों और फ़ंक्शन तर्कों से पहले किया जाता है, वर्तमान में साझा स्मृति के माध्यम से डिवाइस पर पास किया जाता है ._ मेरी समझ संकलन-समय पर होती है, तर्कों को cmem [0 पर कॉपी किया जाता है ], लेकिन रन-टाइम पर वे एक नए ब्लॉक शुरू होने से पहले cmem से smem करने के लिए कॉपी कर रहे हैं। क्या वो सही है? –

उत्तर

4

सीयूडीए द्वारा जीपीयू निरंतर बैंकों का उपयोग आधिकारिक तौर पर मेरे ज्ञान के लिए दस्तावेज नहीं है। जीपीयू पीढ़ियों के बीच निरंतर बैंकों की संख्या और उपयोग भिन्न होता है। ये निम्न स्तर के कार्यान्वयन विवरण हैं जिन्हें प्रोग्रामर को चिंता करने की ज़रूरत नहीं है।

किसी दिए गए प्लेटफ़ॉर्म के लिए जेनरेट किए गए मशीन कोड (SASS) को देखकर स्थिरांक बैंकों का उपयोग इंजीनियर को उलट दिया जा सकता है। असल में, इस तरह मैं मूल प्रश्न में उद्धृत जानकारी के साथ आया था (यह जानकारी मेरे एनवीआईडीआईए डेवलपर मंच पोस्ट से आई थी)। जैसा कि मुझे याद है, मैंने जो जानकारी दी थी वह विशेष रूप से फर्मि-क्लास डिवाइस पर लागू एडहोक रिवर्स इंजीनियरिंग पर आधारित थी, लेकिन इस समय इस पर सत्यापन करने में असमर्थ हूं क्योंकि फ़ोरम इस समय पहुंच योग्य नहीं है।

एकाधिक निरंतर बैंक रखने का एक कारण सीयूडीए प्रोग्रामर के उपयोग के लिए उपयोगकर्ता को निरंतर स्थिर स्मृति को आरक्षित करना है, जबकि अतिरिक्त निरंतर बैंकों में हार्डवेयर या उपकरणों द्वारा प्रदान की गई अतिरिक्त पढ़ने-योग्य जानकारी संग्रहीत करना।

ध्यान दें कि CUDA गणित पुस्तकालय स्रोत फ़ाइलों के रूप में प्रदान किया जाता है और फ़ंक्शंस उपयोगकर्ता कोड में रेखांकित होते हैं, इसलिए उपयोगकर्ता-दृश्य निरंतर स्मृति के आंकड़ों में CUDA गणित लाइब्रेरी फ़ंक्शन का निरंतर स्मृति उपयोग शामिल होता है।

0

कृपया "Miscellaneous NVCC Usage" देखें। वे उल्लेख करते हैं कि निरंतर बैंक आवंटन प्रोफ़ाइल-विशिष्ट है।

PTX guide में, वे कहते हैं कि 64 केबी निरंतर स्मृति के अलावा, उनके पास निरंतर स्मृति के लिए 10 और बैंक थे। ड्राइवर इन क्षेत्रों में निरंतर बफर आवंटित और प्रारंभ कर सकता है और कर्नेल फ़ंक्शन पैरामीटर के रूप में बफर को पास पॉइंटर्स पास कर सकता है।

मुझे लगता है कि एनवीसीसी के लिए दी गई प्रोफ़ाइल इस बात का ख्याल रखेगी कि कौन सी स्थिरताएं स्मृति में जाती हैं। वैसे भी, हमें चिंता करने की आवश्यकता नहीं है अगर प्रत्येक निरंतर स्मृति cmem [n] 64 केबी से कम है, क्योंकि प्रत्येक बैंक आकार 64 केबी का है और ग्रिड में सभी धागे के लिए आम है।

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