CUDA Academy · पाठ

रजिस्टर दबाव और स्पिल

पुनः उपयोग और ऑक्यूपेंसी के बीच संतुलन

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

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

रजिस्टर बहुत मूल्यवान हैं

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

एक साझा, निश्चित भंडार

हर सक्रिय थ्रेड प्रत्येक SM में मौजूद एक रजिस्टर फ़ाइल से रजिस्टर लेता है। हर थ्रेड को जितने अधिक रजिस्टर चाहिए, उतने ही कम थ्रेड एक साथ सक्रिय रह सकते हैं।

दबाव ऑक्यूपेंसी घटाता है

रजिस्टरों का अधिक उपयोग सीधे यह सीमित करता है कि किसी SM पर कितने वार्प समा सकते हैं। ऑक्यूपेंसी में यह कमी हार्डवेयर के पास विलंबता छिपाने के लिए पर्याप्त काम नहीं छोड़ सकती है।

स्पिल क्या होता है

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

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

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

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

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

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

स्पिल की संख्याएँ पढ़ें

रिपोर्ट स्पिल स्टोर और लोड सूचीबद्ध करती है। स्पिल की कोई भी गैर-शून्य संख्या इस बात का चेतावनी संकेत है कि आपका कर्नेल धीमी स्थानीय मेमोरी आवाजाही की कीमत चुका रहा है।

प्रति थ्रेड रजिस्टर सीमित करें

आप कंपाइल समय पर एक ऊपरी सीमा तय कर सकते हैं। --maxrregcount फ़्लैग प्रति थ्रेड रजिस्टरों को सीमित करता है और थोड़ी गति के बदले अधिक ऑक्यूपेंसी देता है।

nvcc --maxrregcount=32 kernel.cu

__launch_bounds__ से संकेत दें

प्रति-कर्नेल संकेत अक्सर बेहतर होता है। __launch_bounds__ कंपाइलर को आपका ब्लॉक आकार बताता है, ताकि वह आपकी इच्छित ऑक्यूपेंसी के अनुसार रजिस्टरों का बजट तय कर सके।

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

सक्रिय मानों का समूह छोटा करें

अक्सर आप एक बार में कम मान रख सकते हैं। किसी सस्ते परिणाम की दोबारा गणना करना या चर का दायरा छोटा करना सक्रिय रजिस्टरों की संख्या घटाता है।

पुनःउपयोग और ऑक्यूपेंसी में संतुलन रखें

ILP और अनरोलिंग दबाव बढ़ाते हैं, जबकि सीमाएँ ऑक्यूपेंसी बढ़ाती हैं। कौशल यह है कि सबसे तेज़ चलने वाला संतुलन खोजा जाए, और यह केवल प्रोफ़ाइलर ही बता सकता है।

त्वरित जाँच

जब किसी कर्नेल के रजिस्टर समाप्त हो जाते हैं, तो मान कहाँ जाते हैं?

पुनरावलोकन: दबाव को नियंत्रित रखें

आपने सीखा कि अधिक रजिस्टर दबाव ऑक्यूपेंसी घटाता है और धीमे DRAM में स्पिल करा सकता है। उपयोग मापें, रजिस्टर सीमित करें और प्रोफ़ाइलर को मार्गदर्शन करने दें। 🎯

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

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

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

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

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

क्या “रजिस्टर दबाव और स्पिल” पाठ निःशुल्क है?

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

“रजिस्टर दबाव और स्पिल” में मैं क्या सीखूँगा?

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

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

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

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

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

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

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

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

  1. निर्देश-स्तरीय समानांतरता
  2. #pragma unroll से लूप अनरोलिंग
  3. float4 से वेक्टरयुक्त लोड
  4. रजिस्टर दबाव और स्पिल
← CUDA Academy पर वापस जाएँ