आप "बहुस्तरीय कठिनाइयों" के बारे में बात करते हैं लेकिन आप वास्तव में किन कठिनाइयों की बात कर रहे हैं? एक तरह से आप एक प्रेत समस्या का हवाला दे रहे हैं जो शायद मौजूद भी नहीं है। असली चुनौती वह है जो आप अपने लिए बनाते हैं - यदि आप हार्डवेयर के एक टुकड़े से बिजली की हर आखिरी बूंद को पाने के लिए पूरी तरह से दृढ़ हैं, तो इसमें हार्डवेयर का उपयोग करना सबसे अच्छा प्रभाव डालता है, लेकिन यह सबसे शक्तिशाली मशीन के बीच की खाई को भी चौड़ा करता है। और सबसे कम शक्तिशाली। इसका निहितार्थ यह है कि यदि आपके पास एक गेम है जो वास्तव में PS3 (उदाहरण के लिए) का सबसे अधिक उपयोग करता है, तो आप वास्तव में इसे किसी सस्ते सेलफोन पर नहीं चला सकते हैं, इसलिए आपकी समस्या अब नहीं है "मैं 1 कार्यक्रम कैसे प्राप्त कर सकता हूं बहुत अलग हार्डवेयर में काम करने के लिए "लेकिन" मैं 1 गेम विचार को कई अलग-अलग तरीकों से कैसे लागू कर सकता हूं ताकि यह अलग-अलग संचालित हार्डवेयर पर काम करता है "।
जबकि SDL जैसी लाइब्रेरी थ्रेडिंग के लिए एक क्रॉस-प्लेटफ़ॉर्म रैपर एपीआई प्रदान करती है, मुझे लगता है कि यह मान लेना भोला होगा कि इससे विभिन्न प्लेटफ़ॉर्म (डेस्कटॉप / मोबाइल) में सीधे गेम का आसान विकास होता है।
खेल का आसान विकास - यकीन है। इष्टतम मल्टीथ्रेडिंग, नहीं। लेकिन आपको गेम बनाने के लिए मल्टीथ्रेडिंग की आवश्यकता नहीं है । उच्च प्रदर्शन वाले बनाने के लिए, यह निश्चित रूप से मदद करता है। लेकिन कई महान खेल एक ही धागे में चलते हैं।
इस तरह से विकास करने का सबसे अच्छा तरीका क्या है (किसी भी क्रॉस-प्लेटफॉर्म थ्रेडिंग एपीआई को देखते हुए) निम्नलिखित पर विचार कर रहा है:
- कोर की अलग संख्या
- कोर प्रति काफी अलग प्रसंस्करण क्षमताओं
- आम तौर पर विभिन्न प्रणालियों वास्तुकला जैसे। कैश, रैम और I / O एक्सेस के लिए अलग-अलग लेटेंसी
थ्रेड को सिस्टम असाइन करने की कोशिश करने के बजाय, थ्रेड को कार्य असाइन करें। प्रत्येक कार्य को उस डेटा को दें जिसे चलाने की आवश्यकता है और जो भी हार्डवेयर उपलब्ध है उसे बंद करें। आमतौर पर आपके पास विभिन्न प्रकार के कोर या प्रोसेसर को अलग करने के लिए थ्रेड पूल होगा, और एक कार्य प्रबंधक जिसके पास कार्यों की एक कतार होती है और विभिन्न थ्रेड्स तक उनकी पैदावार होती है जब धागा संकेत देता है कि यह पिछले कार्य को पूरा कर चुका है और है एक नए के लिए तैयार है। अधिक कोर वाले हार्डवेयर स्पष्ट रूप से कार्यों को अधिक तेज़ी से पूरा करेंगे और अधिक तेज़ी से प्रस्तुत करने में सक्षम होंगे। अलग-अलग विशेषताओं के साथ सिस्टम पर बेहतर तरीके से काम करने के लिए इस प्रणाली की विशेषज्ञता एक उन्नत अनुकूलन समस्या बन जाती है, लेकिन यह कुछ आंकड़ों पर आधारित हो सकती है (जैसे कि एक कार्य जो नहीं करता है।)
हालांकि, असतत कार्यों में खेल सुविधाओं का अपघटन काफी जटिल मामला है और अक्सर प्रयास के लायक नहीं होता है जब तक कि आप यह सुनिश्चित नहीं करते हैं कि आपको प्रदर्शन की आवश्यकता है, इसलिए अधिकांश यह प्रयास भी नहीं करेंगे।
कुछ और पढ़ने:
http://www.gamasutra.com/view/feature/1830/multithreaded_game_engine_.php - 'डेटा समानांतर' अनुभाग देखें। इस मॉडल के साथ डेटा को कई समान कार्यों में विभाजित किया गया है और अलग-अलग थ्रेड्स के लिए तैयार किया गया है।
http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/ - काफी घने, गेम स्तर के बजाय ओएस स्तर पर चीजों का वर्णन करता है।
http://drdobbs.com/high-performance-computing/216500409 - गेम विशिष्ट नहीं है, लेकिन आपको यह बताने के लिए पूरी तरह से प्रासंगिक है कि आपको कार्यों को कैसे विभाजित करने की आवश्यकता है।
http://www.itfgaming.com/news/tech-focus-crysis-2-and-the-future-of-cryengine-3 - इस साक्षात्कार के आधे-अधूरे तरीके के बारे में एक किस्सा है कि कैसे वे एक कार्य आधारित प्रणाली में चले गए। ।