المقالات العلمية

مقالات الشبكة العربية لمطوري الألعاب

محركات الألعاب متعددة المسارات

في هذا المقال سأتحدث عن محركات الألعاب متعددة المسارات والتي بدأت محاولات تطويرها تتزايد في الفترة الأخيرة. وسأتناول المحاولات المتعددة والتوجهات التي اتخذها الباحثون في هذا المجال وإلى أين وصلوا. في محاولة للفت انتباه المبرمج العربي إلى التوجه الجديد في برمجة محركات الألعاب لتلحق بالتطور التقني الذي طرأ على المعالجات في السنوات الأخيرة.

ما هو تعدد المسارات؟

تعدد المسارات أو Multithreading يقصد به وجود أكثر من مسار تنفيذي لنفس التطبيق الجاري تشغيله. هذه المسارات تعمل بشكل متزامن ومستقل عن بعضها البعض، باستثناء ما يعرف بالقطاعات الحرجة critical sections والتي تضمن تحديث بيانات مشتركة بين جميع المسارات. ففي هذه الحالة تستخدم تقنيات الطرد المتبادل mutual exclusion لضمان عمليات تحديث صحيحة على هذه البيانات.

هل يستخدم تعدد المسارات في محركات اللعاب؟ ولماذا؟

في محركات الألعاب الحالية، يستخدم تعدد المسارات في عملية الاتصال بالشبكة، تحديداً في الألعاب الجماعية multiplayer games حيث أن عملية الكتابة والقراءة من مقبس الشبكة طويلة نسبياً مقارنة مع سرعة أداء اللعبة. حيث يقوم مسار التطبيق الأساسي بكتابة المعلومات إلى منظم buffer لتتم قراءتها لحقا من مسار القراءة والكتابة إلى الشبكة، وبالتالي لا يؤثر على سرعة تشغيل اللعبة.

باستثناء هذه الحالة، لم يكن لتعدد المسارات أي وجود في محركات الألعاب، حيث كان تصميم هذه المحركات تسلسلياً حيث تبدأ حلقة اللعبة بقراءة مدخلات اللاعب ثم تشغيل الذكاء الصطناعي ومحاكاة الفيزياء وغيرها إلى أن تصل أخيراً إلى تصيير المشهد.

السبب في ذلك يرجع إلى أن معظم محركات الألعاب طورت للتوافق مع بيئة الحاسب الشخصي، والذي كان حتى وقت قريب لا يحتوي على أكثر من معالج واحد، مما يحعل تعدد المسارات غير ذي جدوى، لا سيما أنه يضيف تعقيداً برمجياً إلى محرك الألعاب الذي هو معقد أصلاً ولا يحتاج لمزيد مصادر الأخطاء المحتملة.

لماذا نهتم بإنشاء محركات ألعاب متعددة المسارات؟

تساؤل مشروع، خاصة أن محركات اللعاب الحالية وصلت درجة عالية من الواقعية سواء في الرسومات أو الذكاء الاصطناعي أو محاكاة الفيزياء. لكن هل سيدوم هذا الأمر طويلاً؟ المتتبع لتاريخ الألعاب يجدها دائماً في صدارة التطبيقات النهمة للموارد، وبشكل خاص موارد الحسابات كوحدة المعالجة المركزية ووحدة معالجة الرسومات. فإذا أردت لعب لعبة صدرت هذا العام، قد تضطر لتحديث بطاقة العرض أو المعالج الخاص بجهازك لتتمكن من تشغيلها بالسرعة الملائمة. وأعتقد أن معظمنا إن لم يكن كلنا عانى من مشكلة تشغيل اللألعاب عندما لم تسمح ميزانيته بتحديث جهازه أو شراء جهاز جديد (وأنا أكثر من يعرف هذا الشعور!)

إذن نصل هنا إلى حقيقة، وهي أن الألعاب هي في صدارة السباق لالتهام موارد الجهاز، ليس طمعاً فيها ولكن طمعاً في الوصول لأفضل مستوى من الواقعية والجودة في كل تفاصيل اللعبة دون التأثير على سرعة تشغيلها. وبما أن المعالجات في السنوات الأخيرة شهدت تطوراً نوعياً، يكمن في توقف سرعتها عن النمو المطرد الذي شهدته في أواخر التسعينات وأوائل هذا القرن، وبداية توجهها نحو تعدد الأنوية أو ما يعرف بـ multicore processor. فأصبحنا نرى معالجات ثنائية ورباعية الأنوية، وفي المستقبل القريب سنرى ثمانية النوية إلى أن يصل العدد إلى 32 أو 80 كما وعدت أنتل في المستقبل القريب، فعلى محركات اللعاب أن تتبع ذات النهج في ترك التشغيل المتسلسل والتوجه نحو تعدد المسارات.

بالتالي، وبما أن قانون مور الخاص بتضاعف سرعة المعالجات قد عفا عليه الزمن، فعلينا العودة إلى قانون أمدل الخاص بحساب فعالية البرامج المتوازية، لنحصل على أفضل أداء باستخدام المعالجات المتعددة (أو لدقة أكبر أنوية متعددة) في المعالجات الحديثة. ومن الجدير بالذكر أن تعدد المعالجات لا يقتصر على الحاسبات الشخصية الحديثة، بل منصات الألعاب مثل Playstation 3 و Xbox 360 تحتوي أيضاً على أكثر من معالج، حيث أن PS3 يحتوي على 7 معالجات فعالة (9 في الأصل لكن تم ألغاء أحدها، والآخر مخصص لنظام التشغيل) يمكن للعبة استخدامها، Xbox 360 يحتوي على 3 معالجات يحتوي كل منها على مسارين تنفيذيين على مستوى المعالج (أو ما يعرف بـ hyberthreading وبالتالي يصبح المجموع 6 معالجات.

إلى أين وصلت الأبحاث في مجال محركات الألعاب متعددة المسارات؟

لا أعلم إن كان هذا مفاجئاً أم لا، لكن عدد الأبحاث العلمية التي نشرت منذ عام 2004 في مجال محركات اللعاب متعددة الأنوية بالكاد يتجاوز عدد أصابع اليد! فمحركات الألعاب أصلاً تشكوا من الإهمال في مجال البحث العلمي - ربما لكلفتها العالية - ، فما بالك بمحركات متعددة المسارات (تعقيد على تعقيد)؟

بالتالي لم نشهد إلى الن محركاً كامل – سواء تجارياً أو مفتوحاً - يعتمد بشكل فعال على تعدد المسارات، رغم أن بعض المحركات مثل Source Engine من شركة Valve استخدم تعدد المسارات بشكل محدود في مجال مخرجات الصوت وأنظمة الجزيئات Particle Systems. إلا أن هذا الستخدام لا يعتبر حلاً فاعلاً، ولعل هذه الصورة من اللعبة الشهيرة Half Life 2 والمبنية بالمحرك سالف الذكر توضح المقصود بعدم الفعالية بشكل أوضح.



لحظ أن اللعبة تعمل بكامل كفاءتها، مع ذلك لا يتعدى استخدامها للمعالج ربع قدرته، أي أنها تعمل على نواة واحدة من أصل أربع متوفرة في معالج Intel Core2 Quad.

مع ذلك لم يخل الأمر من بعض المحاولت التي وصلت إلى نتائج لا بأس بها. ودون التطرق للتفاصيل، يمكن أن نجمل أن الفكرة التي تمحورت حولها هذه المحاولات تكمن في تقسيم أجزاء المحرك إلى مسارات وتوزيعها على الأنوية. على سبيل المثال: المحاكي الفيزيائي على النواة الولى، والذكاء الصطناعي على الثانية، وهكذا. وبما أن هذه المكونات تحتاج للوصول إلى بيانات مشتركة مثل مواقع الكائنات في فضاء اللعبة، يجب النتباه جيداً إلى تنظيم الوصول إليها، فمثلاً لا يمكن لمحاكي الفيزيائي تحريك كائن من مكانه أثناء قيام الذكاء الصطناعي بقراءة مواقع الكائنات لحساب الخطوة القادمة. والكثير الكثير من الأمور التي تجعل عملية تصميم محرك متعدد المسارات أمراً غير بسيط. هذا النوع من التقسيم بعرف بأسم التقسيم الوظيفي أو functional decomposition، أي أننا نقسم المحرك إلى أجزاء بناءً على وظائف هذه الأجزاء.

مشكلة التقسيم الوظيفي تكمن في محدودية عدد المكونات والتي قد لا تتجاوز 3 أو 4 مكونات ذات الوزن الحسابي الكبير، بالتالي لا يمكنها الإستفادة من المنصات ذات العدد الكبير من المعالجات مثل PS3 على سبيل المثال. جدير بالذكر أن أحد الأبحاث وصل إلى تسريع قدره 50 % (أي ضعف السرعة) باستخدام معالج ذو ثمانية أنوية، على الرغم من أن قانون أمدل يقضي بإمكانية الوصول في أحسن الحوال إلى تسريع قدره 8 مرات عند استخدام هذا العدد من المعالجات.

المشكلة الأخرى التي تواجه التقسيم الوظيفي هي توازن الحمل بين لمعالجات، فمثلاً المعالج الذي يشغل المحاكي الفيزيائي قد يتحمل عبئاً زائداً عن ذلك الذي يتحمله المعالج الذي يشغل نظام الجزيئات أو المعالج الذي يشغل الذكاء الاصطناعي وهكذا.

للمهتمين بالطلع على هذه البحاث ونتائجها الرجوع إلى قائمة المراجع في آخر المقال لمعرفة المزيد.

أين يمكننا الوصول في المستقبل؟

مع التزايد الكبير في عدد المعالجات وأنوية المعالجة، علينا أن نبدأ التفكير في عدد أكبر من المسارات وإيجاد فرص أكثر للتشغيل المتزامن لمكونات محرك الألعاب. فالطريقة المستخدمة حالياً قد تكون مناسبة للعدد المحدود من المعالجات التي لا تتجاوز 4 أو 8 في أحسن الأحوال. أما في المستقبل فيجب علينا أن ننظر أبعد من ذلك لنصل إلى محركات ألعاب قادرة على تشغيل 32 أو حتى 64 معالج بكفاءة، وبالتالي نفتح آفاقاً واسعة جداً لتطوير وتحسين جودة الألعاب وربما نشهد رسومات أو ذكاءاً اصطناعياً لم نتخيله يوماً ما. لكن هذا ليس بالتحدي البسيط، فعملية إيجاد فرص التشغيل المتوازي وتطبيقها بالشكل الصحيح عملية برمجية شاقة، قد تساعدنا فيها في المستقبل أدوات بدأت تظهر لتسهل كتابة البرامج المتوازية ومتعددة المسارات مثل (Intel Threading Building Blocks TBB).

أما من ناحية التصميم، فالبحاث تتجه باتجاه تقسيم البيانات إضافة إلى التقسيم الوظيفي، أي أن بيانات اللعبة الموجودة في الذاكرة تقسم إلى مجموعات بأحجام متساوية لتتم معالجتها بشكل متواز على أكثر من معالج. مثال على ذلك محرك Havok الفيزيائي، والذي ذكر منتجوه أنهم يستخدمون تقنية تعدد المسارات ولكن دون ذكر تفاصيل. لكن الفكرة بحد ذاتها هي كالتالي: بدل من تشغيل أجزاء المحرك بشكل متواز، لم لا تكون هذه الأجزاء نفسها متعددة المسارات داخلياً؟ بالتالي يمكن الوصول إلى أقصى عدد ممكن من المعالجات المستخدمة، بالإضافة إلى تحسين توزيع الحمل على هذه المعالجات. في هذه الحالة يمكن لتقسيم البيانات أن يقدم حلول تسرع من عملية تشغيل الجزاء الثقيلة من المحرك مثل محاكاة الفيزياء والذكاء الصطناعي، بالتالي يمكن إضافة تحسينات عليها، ربما لم تكن متوفرة سابقاً في المحركات أحادية المسار. تخيل مثل لو أمكننا الاستغناء عن أشكال التصادم المحيطة بالكائنات الفيزيائية، وجعل كل شكل يتصادم مع غيره حسب شكله الأصلي. قد لا تكون هذه الأمور ممكنة حالياً بسبب كلفتها الحسابية العالية، والتي لا يمكن لمعالج واحد تحملها مهما بلغت سرعته، لكنها قد تكون ممكنة عند استخدام عدد من المعالجات بشكل فعال.

المراجع

  • J. Tulip, J. Bekkema, and K. Nesbitt. Multi-threaded game engine design, Proceedings of the3rd Australasian conference on Interactive entertainment, p.9-14, December 04-06, 2006, Perth, Australia
  • A. El Rhalibi, D. England, and S. Costa. Game Engineering for a Multiprocessor Architecture, Paper presented at the DIGRA 2005, Vancouver
  • M. J. Best, A. Fedorova, R. Dickie, A. Tagliasacchi, A. Couture-Beil, C. Mustard, S. Mottishaw, A. Brown, Z. F. Huang, X. Xu, N. Ghazali, and A. Brownsword. Searching for Concurrent Design Patterns in Video Games, Springer-Verlag Berlin Heidelberg, Euro-Par, LNCS 5704, 2009, pp. 912–923
  • A. Marochko, B. Werth, A. Pegushin, M. D'Mello, Parallelization of SMOKE Gaming Demo via Intel® Threading Building Blocks, November 1, 2010.
  • J. Andrews, Designing the Framework of a Parallel Game Engine., February 25, 2009

التعليقات (1) -

  • عبد الرحمن خلوف

    02/07/2016 09:31:50 م | الرد

    سعيد أن المحتوى العربي في مجال الألعاب يحوي مقال كهذا. أتمنى أن نرى المزيد من إبداعك

أضف تعليقاً

Loading