एकाधिक कोर का लाभ लेने के लिए सामान्य दृष्टिकोण, स्पष्ट रूप से, केवल सादे पथभ्रष्ट है। अपने सबसिस्टम को अलग-अलग थ्रेड में अलग करने से वास्तव में कई कोर में से कुछ काम अलग हो जाएंगे, लेकिन इसमें कुछ प्रमुख समस्याएं हैं। पहला, इसके साथ काम करना बहुत कठिन है। कौन ताले और तुल्यकालन और संचार और सामान के साथ चारों ओर घुन लगाना चाहता है, जब वे इसके बजाय सीधे रेंडरिंग या भौतिकी कोड लिख सकते हैं? दूसरा, दृष्टिकोण वास्तव में बड़े पैमाने पर नहीं है। सबसे अच्छा, यह आपको तीन या चार कोर का लाभ उठाने की अनुमति देगा, और यदि आप वास्तव में जानते हैं कि आप क्या कर रहे हैं। एक गेम में केवल इतने ही सबसिस्टम होते हैं, और उनमें से भी बहुत कम होते हैं जो सीपीयू समय के बड़े हिस्से को उठाते हैं। कुछ अच्छे विकल्प हैं जो मुझे पता हैं।
प्रत्येक अतिरिक्त सीपीयू के लिए एक श्रमिक सूत्र के साथ एक मुख्य धागा होना चाहिए। सबसिस्टम के बावजूद, मुख्य थ्रेड किसी न किसी तरह की कतार (ओं) के माध्यम से श्रमिक थ्रेड्स को अलग-थलग कार्य सौंपता है; ये कार्य स्वयं अन्य कार्य भी बना सकते हैं, साथ ही। वर्कर थ्रेड्स का एकमात्र उद्देश्य कतार से एक समय में प्रत्येक कार्य को पकड़ना और उन्हें निष्पादित करना है। हालांकि, सबसे महत्वपूर्ण बात यह है कि जैसे ही किसी थ्रेड को किसी कार्य के परिणाम की आवश्यकता होती है, यदि कार्य पूरा हो जाता है तो उसे परिणाम मिल सकता है, और यदि नहीं तो यह सुरक्षित रूप से कार्य को कतार से हटा सकता है और आगे बढ़ सकता है और प्रदर्शन कर सकता है कार्य ही। यही है, सभी कार्य एक दूसरे के साथ समानांतर में अनुसूचित नहीं होंगे। समानांतर में निष्पादित किए जा सकने वाले कार्यों की तुलना में अधिक अच्छा हैइस मामले में बात; इसका मतलब है कि जब आप अधिक कोर जोड़ते हैं तो यह बड़े पैमाने पर होने की संभावना है। इसका एक नकारात्मक पहलू यह है कि एक सभ्य कतार और वर्कर लूप को डिजाइन करने के लिए तब तक बहुत काम करने की आवश्यकता होती है जब तक कि आपके पास लाइब्रेरी या भाषा रनटाइम तक पहुंच न हो जो पहले से ही आपके लिए यह प्रदान करता है। सबसे कठिन हिस्सा यह सुनिश्चित कर रहा है कि आपके कार्य वास्तव में अलग-थलग हैं और धागे सुरक्षित हैं, और सुनिश्चित करें कि आपके कार्य मोटे दानेदार और महीन दाने के बीच एक खुशहाल मैदान में हैं।
सबसिस्टम थ्रेड्स का एक अन्य विकल्प अलगाव में प्रत्येक सबसिस्टम को समानांतर करना है। अर्थात्, अपने स्वयं के थ्रेड्स में रेंडरिंग और फिजिक्स चलाने के बजाय, एक बार में अपने सभी कोर का उपयोग करने के लिए भौतिकी सबसिस्टम लिखें, एक बार में अपने सभी कोर का उपयोग करने के लिए रेंडरिंग सबसिस्टम लिखें, फिर दोनों सिस्टम को क्रमिक रूप से चलाएं (या इंटरलेस्ड) आपके खेल वास्तुकला के अन्य पहलुओं पर निर्भर करता है)। उदाहरण के लिए, भौतिकी सबसिस्टम में आप खेल में सभी बिंदुओं को ले सकते हैं, उन्हें अपने कोर के बीच विभाजित कर सकते हैं, और फिर सभी कोर उन्हें एक बार में अपडेट कर सकते हैं। प्रत्येक कोर तब अच्छे इलाके के साथ तंग छोरों में आपके डेटा पर काम कर सकता है। समानांतरवाद की यह लॉक-स्टेप शैली एक जीपीयू के समान है। यहाँ सबसे कठिन हिस्सा यह सुनिश्चित करने में है कि आप अपने काम को बारीक-बारीक टुकड़ों में विभाजित कर रहे हैं जैसे कि इसे समान रूप से विभाजित करनावास्तव में सभी प्रोसेसरों में समान मात्रा में काम होता है।
हालांकि, कभी-कभी यह आसान होता है, राजनीति के कारण, मौजूदा कोड, या अन्य निराशाजनक परिस्थितियों के कारण, प्रत्येक उप-प्रणाली को एक धागा देने के लिए। उस स्थिति में, सीपीयू भारी कार्यभार के लिए कोर की तुलना में अधिक ओएस थ्रेड बनाने से बचना सबसे अच्छा है (यदि आपके पास हल्के धागे के साथ एक रनटाइम है जो आपके कोर के पार संतुलन के लिए होता है, तो यह उतना बड़ा नहीं है)। इसके अलावा, अत्यधिक संचार से बचें। एक अच्छा टोटका है पाइपलाइनिंग की कोशिश करना; प्रत्येक प्रमुख उपतंत्र एक समय में एक अलग गेम स्थिति पर काम कर सकता है। पाइपलाइनिंग आपके सबसिस्टम में आवश्यक संचार की मात्रा को कम कर देता है क्योंकि उन्हें एक ही समय में एक ही डेटा तक पहुंच की आवश्यकता नहीं होती है, और यह बाधाओं से होने वाले नुकसान को भी कम कर सकता है। उदाहरण के लिए, यदि आपका भौतिकी सबसिस्टम पूरा होने में लंबा समय लेता है और आपकी रेंडरिंग सबसिस्टम हमेशा इसके लिए इंतजार करती है, तो आपकी पूर्ण फ्रेम दर अधिक हो सकती है यदि आप अगले फ्रेम के लिए भौतिकी सबसिस्टम चलाते हैं, जबकि रेंडर सबसिस्टम अभी भी पिछले पर काम कर रहा है फ्रेम। वास्तव में, यदि आपके पास ऐसी अड़चनें हैं और उन्हें किसी अन्य तरीके से नहीं हटाया जा सकता है, तो सबसिस्टम थ्रेड्स से परेशान होने के लिए पाइपलाइनिंग सबसे वैध कारण हो सकता है।