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

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

सीपीयू के काम करने का समय

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

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

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

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


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

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

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

सीपीयू के काम करने का समय

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

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

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


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

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

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

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

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

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

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

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

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

Mali डिवाइस

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

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

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

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

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

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


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

Adreno डिवाइस

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

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

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

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

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

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

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

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

Mali डिवाइस

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

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

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

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

Adreno डिवाइस

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

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

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

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

ये अन्य ट्रैक भी इसी तरह की जानकारी दे सकते हैं:

  • Vertices Shaded / Second
  • Fragments Shaded / Second
  • % Time Shading Vertices
  • % Time Shading Fragments