सबसे महंगे रेंडर पास की पहचान करना

AGI फ़्रेम प्रोफ़ाइलर की मदद से, रेंडर पास की अलग-अलग जांच की जा सकती है. इनका इस्तेमाल आपके ऐप्लिकेशन के एक फ़्रेम को कंपोज़ करने के लिए किया जाता है. इसके लिए, यह हर ग्राफ़िक्स एपीआई कॉल को इंटरसेप्ट करता है और उसे एक्ज़ीक्यूट करने के लिए ज़रूरी सभी स्थितियों को रिकॉर्ड करता है. Vulkan पर, यह काम Vulkan के लेयरिंग सिस्टम का इस्तेमाल करके किया जाता है. OpenGL पर, ANGLE का इस्तेमाल करके कमांड को इंटरसेप्ट किया जाता है. यह OpenGL कमांड को Vulkan कॉल में बदलता है, ताकि उन्हें हार्डवेयर पर एक्ज़ीक्यूट किया जा सके.

Adreno डिवाइस

ज़्यादा समय लेने वाले रेंडर पास की पहचान करने के लिए, सबसे पहले विंडो में सबसे ऊपर मौजूद एजीआई के टाइमलाइन व्यू को देखें. इससे किसी फ़्रेम की कंपोज़िशन में शामिल सभी रेंडर पास, क्रम से दिखते हैं. यह वही व्यू है जो आपको System Profiler में दिखता है. हालांकि, इसके लिए आपके पास जीपीयू क्यू की जानकारी होनी चाहिए. यह रेंडर पास के बारे में बुनियादी जानकारी भी दिखाता है. जैसे, रेंडर किए जा रहे फ़्रेमबफ़र का रिज़ॉल्यूशन. इससे यह पता चल सकता है कि रेंडर पास में क्या हो रहा है.

फ़्रेम टाइमलाइन व्यू
पहली इमेज. फ़्रेम टाइमलाइन व्यू

रेंडर पास की जांच करने के लिए, सबसे पहले यह देखा जा सकता है कि उन्हें पूरा होने में कितना समय लग रहा है. सबसे ज़्यादा समय लेने वाला रेंडर पास, वह रेंडर पास होगा जिसमें सुधार की सबसे ज़्यादा संभावना होगी. इसलिए, सबसे पहले उस पर एक नज़र डालें.

फ़्रेम टाइमलाइन व्यू में सबसे लंबे रेंडर पास की पहचान करना
दूसरी इमेज. फ़्रेम टाइमलाइन व्यू में, रेंडर करने में सबसे ज़्यादा समय लेने वाले पास की पहचान करना

काम के रेंडर पास से जुड़ा जीपीयू स्लाइस, रेंडर पास में हो रही गतिविधि के बारे में पहले से ही कुछ जानकारी दिखाएगा:

  1. बिनिंग: इसमें वर्टेक्स को स्क्रीन पर उनकी जगह के हिसाब से बिन में रखा जाता है
  2. रेंडरिंग: इसमें पिक्सल या फ़्रैगमेंट को शेड किया जाता है
  3. GMEM लोड/स्टोर: जब फ़्रेमबफ़र के कॉन्टेंट को इंटरनल जीपीयू मेमोरी से मुख्य मेमोरी में लोड या स्टोर किया जाता है

रेंडर पास में इनमें से हर एक को कितना समय लगता है, यह देखकर आपको यह पता चल सकता है कि संभावित अड़चनें कहां हो सकती हैं. उदाहरण के लिए:

  • अगर बिनिंग में ज़्यादा समय लगता है, तो इसका मतलब है कि वर्टेक्स डेटा में कोई समस्या है. जैसे, बहुत ज़्यादा वर्टेक्स, बड़े वर्टेक्स या वर्टेक्स से जुड़ी अन्य समस्याएं.
  • अगर रेंडरिंग में ज़्यादा समय लगता है, तो इसका मतलब है कि शेडिंग की वजह से परफ़ॉर्मेंस पर असर पड़ रहा है. इसकी वजहें ये हो सकती हैं: मुश्किल शेडर, बहुत ज़्यादा टेक्सचर फ़ेच करना, ज़रूरत न होने पर भी ज़्यादा रिज़ॉल्यूशन वाले फ़्रेमबफ़र में रेंडर करना या इससे जुड़ी अन्य समस्याएं.

GMEM लोड और स्टोर भी ध्यान रखने वाली बातें हैं. ग्राफ़िक्स मेमोरी से मुख्य मेमोरी में डेटा ट्रांसफ़र करने में ज़्यादा समय लगता है. इसलिए, लोड या स्टोर किए जाने वाले डेटा की मात्रा को कम करने से, परफ़ॉर्मेंस को बेहतर बनाने में मदद मिलेगी. इसका एक सामान्य उदाहरण यह है कि GMEM में स्टोर की गई डेप्थ/स्टेंसिल होती है, जो डेप्थ/स्टेंसिल बफ़र को मुख्य मेमोरी में लिखती है. अगर आने वाले समय में रेंडर पास में उस बफ़र का इस्तेमाल नहीं किया जा रहा है, तो इस स्टोर ऑपरेशन को हटाया जा सकता है. इससे आपको फ़्रेम टाइम और मेमोरी बैंडविड्थ को बचाने में मदद मिलेगी.

GMEM लोड और स्टोर की पहचान करना
तीसरी इमेज. GMEM के लोड और स्टोर की पहचान करना

बड़े रेंडर पास की जांच

रेंडर पास के दौरान जारी किए गए सभी ड्रॉ कमांड देखने के लिए:

  1. टाइमलाइन में रेंडर पास पर क्लिक करें. इससे फ़्रेम प्रोफ़ाइलर के कमांड पैनल में मौजूद, क्रम में लगे रेंडर पास खुलते हैं.

  2. रेंडर पास के मेन्यू पर क्लिक करें. इससे, रेंडर पास के दौरान जारी की गई सभी ड्रॉ कमांड दिखती हैं. अगर यह OpenGL ऐप्लिकेशन है, तो ज़्यादा जानकारी के लिए, ANGLE की ओर से जारी किए गए Vulkan कमांड देखें.

कमांड पैनल
चौथी इमेज. कमांड पैनल

ड्रॉ कॉल में से कोई एक चुनें. इससे Framebuffer पैनल खुलता है. इसमें, इस ड्रॉ के दौरान बाइंड किए गए सभी फ़्रेमबफ़र अटैचमेंट और अटैच किए गए फ़्रेमबफ़र पर ड्रॉ का आखिरी नतीजा दिखता है. यहां एजीआई का इस्तेमाल करके, पिछले और अगले ड्रॉ कॉल, दोनों को खोला जा सकता है. साथ ही, दोनों के बीच के अंतर की तुलना की जा सकती है. अगर ये दोनों इमेज देखने में एक जैसी हैं, तो इसका मतलब है कि ड्रॉ कॉल को हटाया जा सकता है. इससे फ़ाइनल इमेज पर कोई असर नहीं पड़ेगा.

कमांड पैनल में अलग-अलग ड्रॉ कॉल चुनना
पांचवीं इमेज. कमांड पैनल में अलग-अलग ड्रॉ कॉल चुनना

इस ड्रॉ के लिए पाइपलाइन पैनल खोलने पर, ग्राफ़िक्स पाइपलाइन की ओर से इस्तेमाल की गई स्थिति दिखती है. इससे यह पता चलता है कि ड्रॉ कॉल को कैसे लागू किया गया.

पाइपलाइन पैनल
छठी इमेज. पाइपलाइन पैन

इनपुट असेंबलर से यह जानकारी मिलती है कि वर्टेक्स डेटा को इस ड्रॉ से कैसे बाइंड किया गया था. अगर आपको लगता है कि बिनिंग में रेंडर पास का ज़्यादा समय लगता है, तो इस सेक्शन में जाकर इसकी जांच करें. यहां आपको वर्टेक्स फ़ॉर्मैट, ड्रॉ किए गए वर्टिकल की संख्या, और मेमोरी में वर्टिकल को कैसे लेआउट किया जाता है, इसके बारे में जानकारी मिल सकती है. इस बारे में ज़्यादा जानने के लिए, वर्टेक्स फ़ॉर्मैट का विश्लेषण करना लेख पढ़ें.

पाइपलाइन पैनल में इनपुट असेंबलर सेक्शन
सातवीं इमेज. पाइपलाइन पैन में इनपुट असेंबलर सेक्शन

वर्टेक्स शेडर सेक्शन में, इस ड्रॉ के दौरान इस्तेमाल किए गए वर्टेक्स शेडर के बारे में जानकारी मिलती है. अगर बिनिंग को समस्या के तौर पर पहचाना गया है, तो इस सेक्शन में इसकी जांच की जा सकती है. इस्तेमाल किए गए शेडर का SPIR-V और डीकंपाइल किया गया GLSL देखा जा सकता है. साथ ही, इस कॉल के लिए बाउंड यूनिफ़ॉर्म बफ़र की जांच की जा सकती है. ज़्यादा जानकारी के लिए, शेडर की परफ़ॉर्मेंस का विश्लेषण करना लेख पढ़ें.

पाइपलाइन पैन में Vertex Shader सेक्शन
आठवीं इमेज. पाइपलाइन पैन में वर्टेक्स शेडर सेक्शन

रैस्टराइज़र सेक्शन में, पाइपलाइन के ज़्यादा फ़िक्स्ड-फ़ंक्शन सेटअप के बारे में जानकारी दिखती है. इसका इस्तेमाल, फ़िक्स्ड-फ़ंक्शन की स्थिति को डीबग करने के लिए किया जा सकता है. जैसे, व्यूपोर्ट, सिज़र, डेप्थ स्टेट, और पॉलीगॉन मोड.

पाइपलाइन पैन में रास्टराइज़र सेक्शन
नौवीं इमेज. पाइपलाइन पैन में रास्टराइज़र सेक्शन

फ़्रैगमेंट शेडर सेक्शन में, वर्टेक्स शेडर सेक्शन में मौजूद ज़्यादातर जानकारी मिलती है. हालांकि, यह जानकारी सिर्फ़ फ़्रैगमेंट शेडर के लिए होती है. इस मामले में, यह देखा जा सकता है कि कौनसी बनावटें बाइंड की जा रही हैं. साथ ही, हैंडल पर क्लिक करके उनकी जांच की जा सकती है.

पाइपलाइन पैन में फ़्रैगमेंट शेडर सेक्शन
दसवीं इमेज. पाइपलाइन पैन में फ़्रैगमेंट शेडर सेक्शन

छोटे रेंडर पास की जांच

जीपीयू की परफ़ॉर्मेंस को बेहतर बनाने के लिए, रेंडर पास के छोटे ग्रुप का इस्तेमाल किया जा सकता है. आम तौर पर, रेंडर पास की संख्या को जितना हो सके उतना कम रखना चाहिए. ऐसा इसलिए, क्योंकि जीपीयू को एक रेंडर पास से दूसरे रेंडर पास में स्थिति को अपडेट करने में समय लगता है. आम तौर पर, इन छोटे रेंडर पास का इस्तेमाल शैडो मैप जनरेट करने, गॉसियन ब्लर लागू करने, ल्यूमिनेंस का अनुमान लगाने, पोस्ट प्रोसेसिंग इफ़ेक्ट लागू करने या यूज़र इंटरफ़ेस (यूआई) रेंडर करने जैसे कामों के लिए किया जाता है. इनमें से कुछ को एक ही रेंडर पास में शामिल किया जा सकता है. अगर ये इमेज पर इतना असर नहीं डालते कि इनकी लागत को सही ठहराया जा सके, तो इन्हें पूरी तरह से हटाया भी जा सकता है.

नेटिव रिज़ॉल्यूशन बफ़र को डाउनसैंपल करने के लिए इस्तेमाल किए जाने वाले छोटे रेंडर पास
ग्यारहवीं इमेज. नेटिव रिज़ॉल्यूशन बफ़र को डाउनसैंपल करने के लिए इस्तेमाल किए गए छोटे रेंडर पास