سؤال

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

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

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

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

هل كانت مفيدة؟

المحلول

إخلاء المسئولية: لقد حصلت على درجة الدكتوراه ، لكنني لم أشرف على طالب خاص بي ، لذا خذ كل ما أقوله مع حبة من الملح!

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

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

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

ولكن كن حذرا مع اختيارك للمشرف. إذا لم يكن لدى مشرفك أي تجربة ذات صلة ، فيجب عليك اختيار شخص آخر يفعل ذلك.

نصائح أخرى

ما زلت في انتظار محاكي Gameboy الذي يعمل بالكامل على وحدة معالجة الرسومات ، وهو ما يتم تغذيته فقط لعبة ROM نفسها وإدخال المستخدم الحالي وتؤدي إلى ملمس يعرض اللعبة - ربما نسيجًا ثانيًا لإخراج الصوت :)

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

منذ بعض الوقت ، يمكنك فقط إعداد نسيج مع بيانات المصدر ، وهدف عرض لبيانات النتائج ، وتظليل البكسل الذي من شأنه أن يقوم بالتحول. ثم قمت بتقديم رباعي مع تظليل إلى هدف العرض ، والذي من شأنه إجراء العمليات الحسابية ، ثم قراءة الملمس مرة أخرى (أو استخدمه لمزيد من التقديم). اليوم ، أصبحت الأمور أكثر بساطة من خلال الجيل الرابع والخامس من التظليل (Shader Model 4.0 وأي شيء موجود في DirectX 11) ، حتى تتمكن من الحصول على تظليل أكبر والوصول إلى الذاكرة بسهولة أكبر. ولكن لا يزال يتعين عليهم الإعداد من الخارج ، ولا أعرف كيف تكون الأمور اليوم فيما يتعلق بالحفاظ على البيانات بين الإطارات. في أسوأ الحالات ، يتعين على وحدة المعالجة المركزية أن تقرأ من وحدة معالجة الرسومات والدفع مرة أخرى للاحتفاظ ببيانات اللعبة ، وهو أمر بطيء دائمًا. ولكن إذا تمكنت حقًا من الوصول إلى نقطة حيث دورة إعداد/إعداد عام واحد سيكون كافياً لارتداء لعبتك ، يمكنك القول أن اللعبة تعمل على وحدة معالجة الرسومات. سيكون الرمز مختلفًا تمامًا عن رمز اللعبة العادي. يأتي معظم أداء وحدات معالجة الرسومات من حقيقة أنها تنفذ نفس البرنامج في مئات أو حتى آلاف وحدات التظليل المتوازية ، ولا يمكنك فقط كتابة تظليل يمكنه رسم صورة إلى موضع معين. يعمل تظليل البكسل دائمًا ، بحكم التعريف ، على بكسل واحد ، ويمكن للتظليلات الأخرى القيام بالأشياء على إحداثيات تعسفية ، لكنهم لا يتعاملون مع وحدات البكسل. لن يكون الأمر سهلاً ، كما أعتقد.

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

أولاً ، أنا لست مهندسًا كمبيوترًا ، لذا لا يمكن أن تكون افتراضاتي حبة من الملح ، وربما مقياس النانو.

  • الذكاء الاصطناعي؟ لا توجد مشكلة. هناك عدد لا يحصى من أمثلة الشبكة العصبية التي تعمل بالتوازي في Google. مثال: http://www.heatonresearch.com/encog
  • الساحر؟ يمكنك فقط تجربة بعض الخوارزميات المتوازية التي توجد بالفعل على الإنترنت. واحد منهم فقط: https://graphics.tudelft.nl/publications-new/2012/bb12a/bb12a.pdf
  • رسم؟ استخدم قابلية التشغيل البيني لـ DX أو GL مع CUDA أو CL ، لذا فإن الرسم لا يعبر حارة PCI-E. يمكن حتى القيام بتشويش في الزوايا ، لذا لا توجد مكافحة Z بعد الآن ، حتى أن شاشة Raytrace النقية قابلة للتنفيذ مع وحدة معالجة الرسومات السائدة باستخدام حد العمق المنخفض.
  • الفيزياء؟ الجزء الأسهل ، فقط تكرار تكامل Euler أو Verlet بسيط وغالبًا ما يتحقق الاستقرار إذا كان ترتيب الخطأ كبيرًا.
  • خريطة/جيل التضاريس؟ تحتاج فقط إلى ميرسن تويستر ومثلث.
  • حفظ اللعبة؟ بالتأكيد ، يمكنك ضغط البيانات البارالية قبل الكتابة إلى المخزن المؤقت. ثم يكتب جدولة أن قطعة البيانات تلو الأخرى إلى HDD من خلال DMA حتى لا تتأخر.
  • العودية؟ اكتب خوارزمية المكدس الخاصة بك باستخدام VRAM الرئيسي ، وليس الذاكرة المحلية حتى يمكن تشغيل النواة الأخرى في واجهات الموجة والاحتلال GPU أفضل.
  • هناك الكثير من عدد صحيح مطلوب؟ يمكنك التلقي إلى تعويم ثم قم بعمل 50-100 Calcs باستخدام جميع النوى ثم يلقي النتيجة مرة أخرى إلى عدد صحيح.
  • الكثير من المتفرعة؟ حساب كلتا الحالتين إذا كانت بسيطة ، لذلك كل قلب في خط وينتهي متزامن. إذا لم يكن الأمر كذلك ، فيمكنك فقط وضع مؤشر فرع لنفسك ، في المرة القادمة ، يتنبأ بشكل أفضل من الجهاز (هل يمكن أن يكون؟) مع خوارزمية حقيقية خاصة بك.
  • الكثير من الذاكرة اللازمة؟ يمكنك إضافة GPU آخر إلى النظام وفتح قناة DMA أو CF/SLI للاتصال بشكل أسرع.
  • الجزء الأصعب في رأيي هو التصميم الموجود نحو الكائن لأنه غريب للغاية ويعتمد على الأجهزة لبناء كائنات زائفة في وحدة معالجة الرسومات. يجب تمثيل الكائنات في ذاكرة المضيف (CPU) ولكن يجب فصلها على العديد من المصفوفات في وحدة معالجة الرسومات لتكون فعالة. مثال على الكائنات في ذاكرة المضيف: orc1xy_orc2xy_orc3xy. مثال على الكائنات في ذاكرة GPU: orc1_x__orc2_x__ ... orc1_y__orc2_y__ ...

تم اختيار الإجابة بالفعل منذ 6 سنوات ، ولكن بالنسبة لأولئك المهتمين بالسؤال الفعلي ، أضافت Shadertoy ، وهي منصة WebGL الحية ، مؤخرًا ميزة "متعددة" التي تتيح الحفاظ على الحالة.

ها هو عرض مباشر للعبة الطوب تشغيل على وحدة معالجة الرسومات.

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

ثم فكرتك عن الأطروحة خاطئة تمامًا. يجب أن تكون الأطروحة بحثًا أصليًا. -> تحرير: كنت أفكر في أطروحة الدكتوراه ، وليس أطروحة رئيسية ^_ ^

حول سؤالك ، تعتبر مجموعات تعليمات GPU وقدراتها محددة للغاية لعمليات النقطة العائمة المتجهات. عادةً ما لا يقوم منطق اللعبة بنقطة عائمة قليلة ، والكثير من المنطق (الفروع وأشجار القرار).

إذا ألقيت نظرة على صفحة كودا ويكيبيديا سوف ترى:

ويستخدم مجموعة فرعية خالية من العودية ، خالية من الدالة من لغة C.

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

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

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

من القابل للتطبيق القيام بأطروحة الماجستير حول موضوع وأدوات تكون ، عندما تبدأ ، غير مألوفة. ومع ذلك ، إنها فرصة كبيرة لأخذها!

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

بنفس القدر من الأهمية هو المشرف الخاص بك. من الضروري أن تعالج بعض المشكلات التي يظهرون اهتمامًا بها - أنهم على دراية بهم - حتى يتمكنوا من الاهتمام بالمساعدة أنت احصل على درجة رائعة.

كان لديك الكثير من وقت الهواية لخدش الحكة ، سيكون لديك الكثير من وقت الهواية في المستقبل بلا شك. لكن وقت أطروحة الماجستير ليس الوقت المناسب للهوايات للأسف.

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

سيكون من المستحيل تطوير لعبة لتشغيلها بالكامل في وحدة معالجة الرسومات - ستحتاج إلى وحدة المعالجة المركزية في مرحلة ما للتنفيذ شيئا ما, ، ومع ذلك ، فإن صنع وحدة معالجة الرسومات أداءً أكثر من مجرد الرسومات (والفيزياء حتى) للعبة سيكون من المؤكد أنهما مثيرون للاهتمام ، حيث يتمتع مطورو اللعبة بجهاز الكمبيوتر الشخصي إلى أكبر مشكلة في مواجهة مجموعة متنوعة من مواصفات الماكينة ، وبالتالي لديهم لتقييد أنفسهم على دمج التوافق للخلف ، مما يعقد الأشياء. إن بنية النظام ستكون مشكلة حاسمة - على سبيل المثال ، تتمتع PlayStation 3 بالقدرة على القيام بأعلى جيجابت في الثانية من الإنتاجية بين وحدة المعالجة المركزية وذاكرة الوصول العشوائي و GPU وذاكرة الوصول العشوائي للفيديو ، ومع ذلك ، فإن وحدة المعالجة المركزية التي تصل إلى GPU Memory تصل إلى ما بعد 12MIB/ س.

يسمى النهج الذي قد تبحث عنه "GPGPU" لـ "GPU GUIRD GUISE". قد تكون نقاط البداية الجيدة:

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

المفتاح هنا هو التوازي: إذا كان لديك مشكلة حيث تحتاج إلى عدد كبير من وحدات المعالجة المتوازية. وبالتالي ، قد تكون الشبكات العصبية أو الخوارزميات الوراثية مجموعة جيدة من المشاكل للهجوم بقوة معالجة الرسومات. ربما تبحث أيضًا عن نقاط الضعف في تجزئة التشفير (تكسير DES على وحدة معالجة الرسومات من شأنه أن يجعل أطروحة لطيفة ، أتصور :)). لكن المشكلات التي تتطلب معالجة تسلسل عالية السرعة لا تبدو مناسبة ل GPU. لذا فإن محاكاة لعبة Gameboy قد تكون خارج نطاقها. (ولكن يمكن النظر في محاكاة مجموعة من آلات الطاقة المنخفضة.)

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top