थ्रेड शेड्यूल करने की प्रोसेस का विश्लेषण करना

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

  • फ़्रेम पेसिंग
  • मल्टीथ्रेडिंग और थ्रेड पैरललाइज़ेशन
  • सीपीयू कोर अफ़िनिटी

मल्टीथ्रेडिंग

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

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

ऐसा गेम जिसमें मुख्य और रेंडर थ्रेड के साथ-साथ वर्कर थ्रेड और ऑडियो थ्रेड भी अच्छी तरह से पैरललाइज़ किए गए हों
पहली इमेज. ऐसा गेम जिसमें मुख्य और रेंडर थ्रेड के साथ-साथ वर्कर थ्रेड और ऑडियो थ्रेड भी अच्छी तरह से पैरललाइज़ किए गए हों

सीपीयू कोर अफ़िनिटी

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

  • आपके गेम के थ्रेड, वर्कलोड के हिसाब से सबसे सही कोर पर चल रहे हैं या नहीं.
  • आपके गेम थ्रेड, कोर के बीच अक्सर स्विच करते हैं या नहीं.

आजकल के डिवाइसों में अक्सर हेट्रोजेनियस कंप्यूटिंग नाम के आर्किटेक्चर का इस्तेमाल किया जाता है. इसमें कोर की परफ़ॉर्मेंस अलग-अलग लेवल की होती है:

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

ट्रेस लेते समय, प्रोफ़ाइल कॉन्फ़िगरेशन में सीपीयू को चालू करके, सीपीयू के इस्तेमाल में जाकर सीपीयू थ्रेड के व्यवहार की जांच की जा सकती है. अपने ट्रेस के <200 मि॰से॰ वाले सेक्शन में ज़ूम करके, अपने डिवाइस के सीपीयू कोर पर चल रही अलग-अलग प्रोसेस देखी जा सकती हैं. आम तौर पर, छोटे कोर छोटे इंडेक्स से जुड़े होते हैं. उदाहरण के लिए, सीपीयू '0'-'3'. वहीं, बड़े कोर ज़्यादा इंडेक्स से जुड़े होते हैं. उदाहरण के लिए, सीपीयू '6'-'7'. अगर बीच के कोर मौजूद हैं, तो वे बीच के इंडेक्स का इस्तेमाल करेंगे. उदाहरण के लिए, सीपीयू '5'-'6'. आम तौर पर ऐसा होता है, लेकिन इसकी कोई गारंटी नहीं है.

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

गेम की मुख्य और रेंडर थ्रेड, मुख्य तौर पर बड़े कोर (सीपीयू 6-7) पर चल रही हैं. इन्हें हल्के नीले रंग में दिखाया गया है
दूसरी इमेज. गेम का मुख्य और रेंडर थ्रेड, मुख्य तौर पर बड़े कोर (सीपीयू 6-7) पर चल रहा है. इसे हल्के नीले रंग में दिखाया गया है

यह भी देखा जा सकता है कि आपके थ्रेड, कोर के बीच स्विच करते हैं या नहीं. इस तरह के कोर स्विच में, कॉन्टेक्स्ट स्विच और कोर की कैश मेमोरी/रजिस्टर के साथ स्टेट के नुकसान की वजह से कुछ ओवरहेड होता है.

मुख्य थ्रेड (थ्रेड-7) और रेंडर थ्रेड (थ्रेड-8) वाला गेम, जो कोर के बीच स्विच करता है. इसे बैंगनी रंग में दिखाया गया है
तीसरी इमेज. मुख्य थ्रेड (थ्रेड-7) और रेंडर थ्रेड (थ्रेड-8) वाला गेम, जो कोर के बीच स्विच करता है. इसे बैंगनी रंग में दिखाया गया है

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

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

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

  • अफ़िनिटी को बड़े कोर पर सेट करने से, बैटरी की खपत और थर्मल लोड में बेवजह बढ़ोतरी हो सकती है.

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