मेमोरी की खपत का विश्लेषण करना

किसी ऐप्लिकेशन की परफ़ॉर्मेंस के लिए, मेमोरी इस्तेमाल करने की उसकी क्षमता एक अहम पहलू है. उपलब्ध GPU काउंटर की जानकारी देखकर, इन विशेषताओं का विश्लेषण करने के लिए System Profiler का इस्तेमाल किया जा सकता है.

Adreno डिवाइस

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

इस्तेमाल से जुड़ी जानकारी देने वाला ट्रैक, उसके नीचे मौजूद काउंटर के साथ लाइन अप हो रहा है
पहली इमेज. इस्तेमाल से जुड़ा ट्रैक, इसके नीचे मौजूद काम के काउंटर के साथ लाइन अप हो रहा है

कुल संख्या को पढ़ने/लिखने की अनुमति

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

कुल काउंटर को पढ़ने और लिखने की अनुमति
दूसरी इमेज. Read + Write Total Counters

वर्टेक्स और टेक्सचर डेटा के लिए इस्तेमाल किए गए बैंडविड्थ का पता लगाने के लिए, वर्टेक्स मेमोरी रीड (बाइट/सेकंड) और टेक्सचर मेमोरी रीड (बाइट/सेकंड) काउंटर की जांच भी की जा सकती है.

वर्टेक्स + टेक्सचर मेमोरी रीड काउंटर
तीसरी इमेज. वर्टेक्स और टेक्सचर मेमोरी रीड काउंटर

इन वैल्यू के लिए “अच्छा” क्या है, यह आपके ऐप्लिकेशन में दिखने वाले वर्कलोड के टाइप पर निर्भर करता है. उदाहरण के लिए, 2D ऐप्लिकेशन में टेक्सचर मेमोरी रीड बैंडविड्थ का इस्तेमाल ज़्यादा (~2+GB/s) हो सकता है. हालांकि, वर्टेक्स मेमोरी बैंडविड्थ का इस्तेमाल बहुत कम (~50MB/s) हो सकता है. ज़्यादा जानकारी के लिए, वर्टेक्स मेमोरी बैंडविड्थ का विश्लेषण करें और टेक्सचर मेमोरी बैंडविड्थ के इस्तेमाल का विश्लेषण करें के दस्तावेज़ देखें.

स्टॉल की जानकारी फ़ेच करें

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

मेमोरी स्टॉल काउंटर
चौथी इमेज. मेमोरी स्टॉल काउंटर

माली में उपलब्ध डिवाइस

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

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

बाहरी कुल आउटपुट

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

बाहरी काउंटर ट्रैक करने की सुविधा चालू करना
छठी इमेज. Output External counter tracks

इंटरनल कुल वैल्यू डालें

ऐसे काउंटर भी होते हैं जो आपको कैश मेमोरी के बारे में जानकारी देते हैं. आपको जिन काउंटर में दिलचस्पी है वे “Input internal [read|write] stall cycles” हैं. इनकी वैल्यू ज़्यादा होने का मतलब है कि आपको कैश मेमोरी का ऐक्सेस मिल रहा है, लेकिन पढ़ने के लिए बहुत ज़्यादा अनुरोध किए जा रहे हैं. इस वजह से, शेडर कोड को मेमोरी का ऐक्सेस मिलने में समय लग रहा है.

इनपुट इंटरनल काउंटर ट्रैक
सातवीं इमेज. Input Internal counter tracks

स्टॉल की जानकारी फ़ेच करें

इसके बाद, Vertex Prefetcher Stall Cycles और Texture Fetch Stall काउंटर देखे जा सकते हैं. इनसे आपको हमारे ऐप्लिकेशन की मेमोरी की परफ़ॉर्मेंस के बारे में कुछ जानकारी मिलेगी. अगर आपको ~5% से ज़्यादा वैल्यू दिख रही हैं, तो इसका मतलब है कि आप मेमोरी में हमारे डेटा को सही तरीके से नहीं रख रहे हैं. इसके अलावा, यह भी हो सकता है कि कैश मेमोरी का फ़ायदा पाने के लिए, हमारे डेटा को सही तरीके से ऐक्सेस नहीं किया जा रहा है. इन ऐसेट के लिए मेमोरी के इस्तेमाल को बेहतर बनाने के तरीके के बारे में जानने के लिए, [Vertex|Texture] मेमोरी बैंडविड्थ का विश्लेषण करना लेख पढ़ें

स्टॉल के काउंटर ट्रैक फ़ेच करता है
आठवीं इमेज. फ़ेच स्टॉल काउंटर ट्रैक करता है