CUDA Academy · पाठ

रजिस्टर और स्थानीय मेमोरी

प्रति थ्रेड सबसे तेज़ भंडारण और उसका स्पिल।

पाठ 1, कुल 4 में से13 चरण

रजिस्टर और स्थानीय मेमोरी, CoddyKit पर CUDA Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह CUDA Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। CUDA Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

आपके पास उपलब्ध सबसे तेज़ मेमोरी

हर थ्रेड को अपने निजी रजिस्टर मिलते हैं, जो चिप पर सबसे तेज़ संग्रहण होते हैं। वे गणना इकाइयों के ठीक पास रहते हैं, इसलिए उन्हें पढ़ने की लागत लगभग शून्य होती है।

साधारण चर रजिस्टर बन जाते हैं

जब आप कर्नेल में कोई सामान्य स्थानीय चर लिखते हैं, तो कंपाइलर आमतौर पर उसे रजिस्टर में रखता है। इसके लिए किसी विशेष सिंटैक्स की बिल्कुल आवश्यकता नहीं होती। 🙂

__global__ void k() {
    int x = 5;   // x lives in a register
    float y = x * 2.0f;
}

एक ही थ्रेड तक निजी

रजिस्टर का मान ठीक एक थ्रेड से संबंधित होता है। थ्रेड 7, थ्रेड 8 का रजिस्टर नहीं देख सकता, इसलिए हर थ्रेड का काम स्पष्ट रूप से अलग रहता है।

रजिस्टर एक साझा भंडार हैं

हर स्ट्रीमिंग मल्टीप्रोसेसर में एक निश्चित रजिस्टर फ़ाइल होती है। सभी सक्रिय थ्रेड इसे बाँटते हैं, इसलिए हर थ्रेड में कम रजिस्टर उपयोग करने पर एक साथ अधिक थ्रेड चल सकते हैं।

जब रजिस्टर समाप्त हो जाएँ

यदि किसी कर्नेल को उपलब्ध रजिस्टरों से अधिक रजिस्टर चाहिए, तो अतिरिक्त मानों को कहीं और भेज दिया जाता है। इस घटना को रजिस्टर स्पिल कहा जाता है।

स्पिल कहाँ जाते हैं: स्थानीय मेमोरी

स्पिल किए गए मान स्थानीय मेमोरी में पहुँचते हैं, जो नाम के बावजूद चिप पर नहीं होती। वास्तव में, यह धीमी ऑफ-चिप DRAM में रहती है।

स्थानीय मेमोरी भी हर थ्रेड के लिए निजी है

स्थानीय मेमोरी भी रजिस्टरों की तरह हर थ्रेड के लिए निजी होती है। अंतर केवल गति का है, क्योंकि स्थानीय मेमोरी तक पहुँचना बहुत धीमा होता है।

बड़े स्थानीय ऐरे स्पिल हो जाते हैं

हर थ्रेड के लिए बड़ा ऐरे घोषित करने पर वह अक्सर स्थानीय मेमोरी में चला जाता है, क्योंकि हर तत्व को रखने के लिए पर्याप्त रजिस्टर नहीं होते।

__global__ void k() {
    float buf[64]; // likely lives in local memory
}

स्पिल प्रदर्शन को नुकसान पहुँचाते हैं

हर स्पिल एक निःशुल्क रजिस्टर अभिगम को धीमी DRAM यात्रा में बदल देता है। रजिस्टरों पर दबाव कम करना आपके लिए किए जा सकने वाले सबसे आसान अनुकूलन उपायों में से एक है।

अपने रजिस्टरों की संख्या देखें

आप कंपाइलर से प्रति थ्रेड रजिस्टरों की संख्या बताने के लिए कह सकते हैं। nvcc को --ptxas-options=-v दें और यह हर कर्नेल के उपयोग को प्रिंट करेगा।

nvcc --ptxas-options=-v kernel.cu

जानबूझकर रजिस्टरों की सीमा तय करना

__launch_bounds__ क्वालिफ़ायर कंपाइलर को रजिस्टरों की संख्या सीमित करने का संकेत देता है। इसके बदले प्रति थ्रेड थोड़ी गति कम होती है, लेकिन एक साथ अधिक थ्रेड चल सकते हैं।

__global__ void __launch_bounds__(256)
myKernel() { /* ... */ }

त्वरित जाँच

आपने हर थ्रेड के लिए बड़ा ऐरे घोषित किया और प्रदर्शन घट गया। संभवतः क्या हुआ?

पुनरावलोकन: तेज़ और निजी

आपने सीखा कि रजिस्टर प्रति थ्रेड सबसे तेज़ संग्रहण हैं, उनका भंडार सीमित है और अतिरिक्त मान धीमी स्थानीय मेमोरी में चले जाते हैं। रजिस्टरों पर दबाव कम रखें। 🎯

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “रजिस्टर और स्थानीय मेमोरी” पाठ निःशुल्क है?

हाँ—“रजिस्टर और स्थानीय मेमोरी” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और CUDA Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। CUDA Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“रजिस्टर और स्थानीय मेमोरी” में मैं क्या सीखूँगा?

प्रति थ्रेड सबसे तेज़ भंडारण और उसका स्पिल। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ CUDA Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या CUDA Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर CUDA Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“रजिस्टर और स्थानीय मेमोरी” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस CUDA Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर CUDA Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. रजिस्टर और स्थानीय मेमोरी
  2. ग्लोबल मेमोरी के समझौते
  3. कॉन्स्टेंट मेमोरी और उसका कैश
  4. पदानुक्रम का मानसिक मॉडल
← CUDA Academy पर वापस जाएँ