2012-04-21 7 views
12

"CUDA C Programming Guide" के मुताबिक, एक मल्टीप्रोसेसर निरंतर कैश हिट होने पर निरंतर मेमोरी एक्सेस लाभ (धारा 5.3.2.4) । अन्यथा कोलेस्ड ग्लोबल मेमोरी पढ़ने के मामले में आधा-वार के लिए और भी मेमोरी अनुरोध हो सकते हैं। तो क्यों निरंतर स्मृति आकार 64 केबी तक सीमित है?सीयूडीए में निरंतर स्मृति आकार क्यों सीमित है?

दो बार पूछने के क्रम में एक और सवाल नहीं। जहां तक ​​मैं समझता हूं, फर्मि आर्किटेक्चर में बनावट कैश को एल 2 कैश के साथ जोड़ा जाता है। क्या बनावट का उपयोग अभी भी समझ में आता है या वैश्विक मेमोरी पढ़ता है उसी तरह कैश किया जाता है?


लगातार मेमोरी (धारा 5.3.2.4)

निरंतर स्मृति स्थान डिवाइस स्मृति में रहता है और निरंतर धारा F.3.1 और एफ में उल्लेख किया कैश में कैश किया गया है 4.1।

गणना क्षमता 1.x के उपकरणों के लिए, एक वार्प के लिए निरंतर स्मृति अनुरोध पहले दो अनुरोधों में विभाजित होता है, प्रत्येक आधा-वार के लिए, जिसे स्वतंत्र रूप से जारी किया जाता है।

एक अनुरोध तब कई अलग-अलग अनुरोधों में विभाजित होता है क्योंकि प्रारंभिक अनुरोध में अलग-अलग मेमोरी पते होते हैं, अलग-अलग अनुरोधों की संख्या के बराबर कारक द्वारा थ्रूपुट कम करते हैं।

परिणामी अनुरोध तब कैश हिट के मामले में निरंतर कैश के थ्रूपुट पर या डिवाइस मेमोरी के थ्रूपुट पर अन्यथा सर्विस किए जाते हैं।

उत्तर

15

गणना क्षमता 1.0-3.0 उपकरणों के लिए निरंतर स्मृति आकार 64 KB है। कैश वर्किंग सेट केवल 8 केबी है (सीयूडीए प्रोग्रामिंग गाइड v4.2 टेबल एफ -2 देखें)।

लगातार स्मृति का उपयोग ड्राइवर, कंपाइलर और चर द्वारा __device__ __constant__ द्वारा घोषित किया जाता है। चालक पैरामीटर, बनावट बाइंडिंग इत्यादि संवाद करने के लिए निरंतर स्मृति का उपयोग करता है। कंपाइलर कई निर्देशों में स्थिरांक का उपयोग करता है (डिस्सेप्लर देखें)।

निरंतर स्मृति में रखे गए चर को मेजबान रनटाइम फ़ंक्शंस cudaMemcpyToSymbol() और cudaMemcpyFromSymbol() (CUDA प्रोग्रामिंग मार्गदर्शिका v4.2 अनुभाग B.2.2 देखें) का उपयोग करके पढ़ और लिखा जा सकता है। लगातार स्मृति डिवाइस मेमोरी में है लेकिन निरंतर कैश के माध्यम से पहुंचा जा सकता है।

फर्मि बनावट, स्थिर, एल 1 और आई-कैश पर प्रत्येक एसएम में या उसके आसपास सभी स्तर 1 कैश हैं। सभी स्तर 1 कैश एल 2 कैश के माध्यम से डिवाइस मेमोरी एक्सेस करते हैं।

64 केबी निरंतर सीमा प्रति CUmodule है जो एक CUDA संकलन इकाई है। CUDodule की अवधारणा CUDA रनटाइम के तहत छिपी हुई है लेकिन CUDA ड्राइवर API द्वारा सुलभ है।

+1

ग्रेग, शायद मुझे पर्याप्त स्पष्ट नहीं होने के लिए खेद है। मुझे पता है कि निरंतर स्मृति का उपयोग कैसे करें। प्रश्न में मुझे आश्चर्य है कि स्थिर स्मृति का आकार 64 केबी तक सीमित क्यों है यदि केवल 8 केबी कैश किए गए हैं तो वास्तव में वैश्विक स्मृति की तुलना में बेहतर प्रदर्शन प्रदान करते हैं। इसी तरह वैश्विक स्मृति को एल 1 कैश के माध्यम से एक्सेस किया जा सकता है। तो प्रोग्रामर बिंदु से वैश्विक स्मृति या निरंतर स्मृति का उपयोग करने के बीच क्या अंतर है क्योंकि दोनों एक ही तरीके से कैश किए जाते हैं? – AdelNick

+6

लगातार कैश ग्राफिक्स और गणना शेडर्स के लिए अनुकूलित आकार में है। CUDA API निरंतर कैश का खुलासा करता है ताकि डेवलपर अतिरिक्त कैश का लाभ उठा सकें। निरंतर कैश में इष्टतम प्रदर्शन होता है जब सभी थ्रेड एक ही पते तक पहुंचते हैं।हिट बहुत तेज हैं। मिस के पास एल 1 मिस का समान प्रदर्शन हो सकता है। एल 1 की थ्रैशिंग को कम करने के लिए निरंतर कैश का उपयोग किया जा सकता है। गणना क्षमता 1.x उपकरणों में L1 या L2 कैश नहीं है, इसलिए निरंतर कैश का उपयोग कुछ एक्सेस को अनुकूलित करने के लिए किया गया था। –

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