सीपीयू और जीपीयू से फ़्रेम प्रोसेस होने में लगने वाले समय का अनुमान लगाना

सीपीयू और जीपीयू फ़्रेम प्रोसेसिंग के समय (फ़्रेम टाइम) का अनुमान लगाना, आपके ऐप्लिकेशन की परफ़ॉर्मेंस को समझने और समस्याओं का पता लगाने के लिए ज़रूरी है. AGI की मदद से किसी ऐप्लिकेशन की प्रोफ़ाइल बनाने पर, सिस्टम प्रोफ़ाइलर, ट्रैक डेटा उपलब्ध कराता है. इसका इस्तेमाल करके, फ़्रेम के समय का अनुमान लगाया जा सकता है.

सीपीयू का समय

AGI में, सिस्टम प्रोफ़ाइल के सीपीयू ट्रैक में, कुल और ऐक्टिव सीपीयू फ़्रेम टाइम देखे जा सकते हैं.

सीपीयू का कुल समय

सीपीयू पर बिताए गए कुल समय को मेज़र करने के लिए, समयसीमा चुनें जिसमें फ़्रेम सबमिट करने के एक के बाद एक होने वाले इवेंट के बीच का समय शामिल हो. फ़्रेम सबमिशन इवेंट, eglSwapBuffers (OpenGL के लिए) और vkQueuePresentKHR (Vulkan के लिए) हैं.

eglSwapBuffer इवेंट का स्क्रीनशॉट.
पहली इमेज. दो eglSwapBuffer इवेंट के बीच का समय.


vkQueuePresentKHR इवेंट का स्क्रीनशॉट.
दूसरी इमेज. दो vkQueuePresentKHR इवेंट के बीच का समय.

यह मेज़रमेंट, सीपीयू के कुल समय का अनुमान होता है. हालांकि, यह ज़रूरी नहीं है कि यह सक्रिय सीपीयू समय दिखाता हो. उदाहरण के लिए, जीपीयू पर काम करने वाले ऐप्लिकेशन में, सीपीयू को नया फ़्रेम सबमिट करने से पहले, जीपीयू के काम पूरा होने का इंतज़ार करना पड़ सकता है. ऐसा अक्सर तब होता है, जब dequeueBuffer, eglSwapBuffer (OpenGL के लिए) या vkQueuePresent (Vulkan के लिए) इवेंट, सीपीयू के ज़्यादातर समय का इस्तेमाल करता है. इंतज़ार का समय, सीपीयू के कुल समय में शामिल होता है, लेकिन सक्रिय सीपीयू समय में शामिल नहीं होता.

ऐसा स्क्रीनशॉट जिसमें dequeueBuffer और eglSwapBuffer इवेंट के दौरान, ज़्यादा समय तक इंतज़ार करने की जानकारी दिख रही है.
तीसरी इमेज. dequeueBuffer और eglSwapBuffer इवेंट के दौरान, सीपीयू का ज़्यादातर समय बिना काम के बीत रहा है.

सीपीयू का चालू रहने का समय

ऐक्टिव सीपीयू टाइम से यह पता चलता है कि सीपीयू, ऐप्लिकेशन कोड को कब इस्तेमाल में है और कब नहीं.

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

सीपीयू के इस्तेमाल की दो अवधियों का स्क्रीनशॉट. इसका इस्तेमाल, सीपीयू के ऐक्टिव समय को मेज़र करने के लिए किया जा सकता है.
पांचवीं इमेज. सीपीयू टाइम की दो अवधियां, जिनका इस्तेमाल ऐक्टिव सीपीयू टाइम को मेज़र करने के लिए किया जा सकता है.


मल्टी-थ्रेड वाले ऐप्लिकेशन का स्क्रीनशॉट, जिसमें मुख्य थ्रेड के बंद होने पर भी काम करने वाली अन्य थ्रेड मौजूद हैं.
छठी इमेज. मल्टी-थ्रेड वाला ऐप्लिकेशन, जिसमें मुख्य थ्रेड के कुछ समय से इस्तेमाल में न होने पर भी, काम करने वाली अन्य थ्रेड मौजूद हों.

सीपीयू के चालू रहने का कुल समय मेज़र करने का एक और तरीका है, सीपीयू ट्रैक में ऐप्लिकेशन के स्लाइस देखना. इन स्लाइस से पता चलता है कि सीपीयू कब चल रहा है. ये स्लाइस, चल रहे स्लाइस से मेल खाते हैं.

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

ऐप्लिकेशन स्लाइस की पहचान करने के लिए, अपने ऐप्लिकेशन में ATrace मार्कर जोड़े जा सकते हैं. इससे, System Profiler के सीपीयू ट्रैक में मार्कर दिखेंगे.

सीपीयू ट्रैक पर दिखाए गए ATrace स्लाइस का स्क्रीनशॉट.
आठवीं इमेज. सीपीयू ट्रैक पर दिखाए गए ATrace स्लाइस.

फ़्रेम रेंडर करने में GPU को लगने वाले समय का अनुमान लगाना

जीपीयू फ़्रेम के समय का अनुमान लगाने के लिए, System Profiler में जीपीयू स्लाइस या जीपीयू काउंटर का इस्तेमाल किया जा सकता है. जीपीयू स्लाइस का इस्तेमाल करने पर, अनुमान ज़्यादा सटीक होता है.

जीपीयू स्लाइस

अगर System Profiler में जीपीयू स्लाइस की जानकारी उपलब्ध है, तो जीपीयू फ़्रेम टाइम की सटीक जानकारी मिल सकती है. इसके लिए, आपको यह मेज़र करना होगा कि आपका ऐप्लिकेशन किसी एक फ़्रेम से जुड़े टास्क पर कितना समय बिताता है.

माली के डिवाइस

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

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

क्रम में चल रहे कई फ़्रेम का स्क्रीनशॉट.
नौवीं इमेज. कई फ़्रेम क्रम से चलाए जा रहे हैं.
एक स्क्रीनशॉट, जिसमें एजीआई किसी फ़्रेम पर ज़ूम इन कर रहा है.
10वीं इमेज. किसी फ़्रेम पर ज़ूम इन किया गया हो.

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

Vulkan पर आधारित ऐप्लिकेशन के लिए, फ़्रेम बनाने के लिए कई सबमिशन का इस्तेमाल किया जा सकता है. Vulkan इवेंट ट्रैक का इस्तेमाल करके, सबमिशन आईडी का ट्रैक रखें. इसमें हर सबमिशन के लिए एक स्लाइस होता है. सबमिशन स्लाइस चुनने पर, सबमिशन से जुड़ी जीपीयू गतिविधि की सभी स्लाइस हाइलाइट हो जाएंगी.

एक साथ काम करने वाले GPU वर्कलोड का स्क्रीनशॉट, जहां एक फ़्रेम पर किया गया काम, दूसरे फ़्रेम पर किया जा सकता है.
11वां डायग्राम. एक साथ काम करने वाला जीपीयू वर्कलोड, जहां एक फ़्रेम पर किया गया काम, दूसरे फ़्रेम पर किए जा रहे काम से ओवरलैप हो सकता है.


किसी फ़्रेम के लिए चुने गए कई Vulkan इवेंट का स्क्रीनशॉट.
12वीं इमेज. किसी फ़्रेम के लिए चुने गए कई Vulkan इवेंट.

Adreno डिवाइस

Adreno डिवाइसों पर, GPU स्लाइस GPU कतार 0 ट्रैक में दिखते हैं और हमेशा क्रम से दिखाए जाते हैं. इसलिए, किसी फ़्रेम के लिए रेंडर पास दिखाने वाले सभी स्लाइस देखे जा सकते हैं और उनका इस्तेमाल, GPU फ़्रेम टाइम को मेज़र करने के लिए किया जा सकता है.

क्रम में चल रहे कई फ़्रेम का स्क्रीनशॉट.
13वीं इमेज. कई फ़्रेम क्रम से चलाए जा रहे हैं.
एक स्क्रीनशॉट, जिसमें एजीआई को कई रेंडर पास वाले फ़्रेम पर ज़ूम इन किया गया है.
14वीं इमेज. एक से ज़्यादा रेंडर पास वाले फ़्रेम पर ज़ूम इन किया गया.

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

Vulkan पर आधारित ऐप्लिकेशन का स्क्रीनशॉट, जिसमें फ़्रेम के Vulkan इवेंट चुने गए हैं.
15वीं इमेज. Vulkan पर आधारित ऐप्लिकेशन, जहां किसी फ़्रेम के लिए Vulkan इवेंट चुने गए हैं.

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

ज़्यादातर जीपीयू पर काम करने वाले ऐप्लिकेशन का स्क्रीनशॉट. इसमें रेंडर पास पैटर्न है, जो फ़्रेम की सीमाओं की पहचान करने में मदद करता है.
16वीं इमेज. ज़्यादातर GPU पर काम करने वाला ऐप्लिकेशन, जिसमें रेंडर पास वाला पैटर्न है. इससे फ़्रेम की सीमाओं की पहचान करने में मदद मिलती है.

जीपीयू काउंटर

अगर किसी ट्रेस में GPU स्लाइस की जानकारी उपलब्ध नहीं है, तो GPU काउंटर ट्रैक का इस्तेमाल करके, GPU फ़्रेम के समय का अनुमान लगाया जा सकता है.

माली के डिवाइस

Mali डिवाइसों पर, GPU के इस्तेमाल वाले ट्रैक का इस्तेमाल करके, ऐसे ऐप्लिकेशन के GPU फ़्रेम टाइम का अनुमान लगाया जा सकता है जो GPU का ज़्यादा इस्तेमाल नहीं करता. जब ऐप्लिकेशन में जीपीयू का इस्तेमाल कम होता है, तो उनमें लगातार ज़्यादा जीपीयू गतिविधि के बजाय, ज़्यादा और कम जीपीयू गतिविधि के नियमित पीरियड होते हैं. GPU इस्तेमाल ट्रैक का इस्तेमाल करके, GPU फ़्रेम के समय का अनुमान लगाने के लिए, ट्रैक में ज़्यादा गतिविधि वाली अवधियों की अवधि मेज़र करें.

Mali डिवाइस पर, जीपीयू के इस्तेमाल और जीपीयू कतार ट्रैक का स्क्रीनशॉट.
17वीं इमेज. Mali डिवाइस पर, जीपीयू के इस्तेमाल और जीपीयू कतार के ट्रैक.

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

फ़्रैगमेंट और नॉन-फ़्रैगमेंट ट्रैक का स्क्रीनशॉट.
18वीं इमेज. फ़्रैगमेंट और नॉन-फ़्रैगमेंट ट्रैक.

Adreno डिवाइस

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

Adreno डिवाइस पर, जीपीयू के इस्तेमाल का प्रतिशत और जीपीयू कतार ट्रैक का स्क्रीनशॉट.
19वीं इमेज. Adreno डिवाइस पर, GPU के इस्तेमाल का प्रतिशत और GPU लाइन में मौजूद टास्क.

अगर ऐप्लिकेशन में जीपीयू का ज़्यादा इस्तेमाल होता है और ऐप्लिकेशन में जीपीयू के इस्तेमाल का प्रतिशत लगातार ज़्यादा रहता है, तो जीपीयू फ़्रेम के समय का अनुमान लगाने के लिए, वर्टिक्स निर्देश / सेकंड और फ़्रैगमेंट निर्देश / सेकंड ट्रैक का इस्तेमाल किया जा सकता है. इन ट्रैक के गतिविधि लेवल में पैटर्न ढूंढकर, यह अनुमान लगाया जा सकता है कि किसी फ़्रेम की सीमाएं कहां हैं. साथ ही, जीपीयू फ़्रेम के समय को मेज़र करने के लिए, इसका इस्तेमाल किया जा सकता है.

Vertex के निर्देशों / दूसरे ट्रैक का स्क्रीनशॉट.
20वीं इमेज. Vertex के निर्देश / दूसरा ट्रैक.

इन अन्य ट्रैक से मिलती-जुलती जानकारी मिल सकती है:

  • शेड किए गए वर्टिसेस / दूसरा
  • शेड किए गए फ़्रैगमेंट / सेकंड
  • % टाइम शेडिंग वर्टिसेस
  • % समय के हिसाब से फ़्रैगमेंट को शेड करना