تحسينات الذاكرة الرسومية في المحاكيات – وداعًا لمشاكل الأداء على كروت AMD

💡 تحسينات الذاكرة الرسومية في المحاكيات – وداعًا لمشاكل الأداء على كروت AMD!

في السابق، كانت النسخ الأساسية من المحاكيات تستخدم ما يُعرف بـ host memory stream buffer، وهو عبارة عن وسيلة لنقل البيانات إلى كرت الشاشة بسبب اختلاف متطلبات المحاذاة بين AMD و NVIDIA. هذا كان يسبب بطء كبير لأن البيانات تُنقل دائمًا عبر memcpy بدل ما يتم الوصول لها مباشرة من الـ VRAM.

المشكلة الأكبر؟ بعض أنواع البيانات، مثل storage buffers، كانت تفقد محتواها لأن الكتابات ما كانت محفوظة في الذاكرة المؤقتة. 👎

🎯 وش الحل الجديد؟

التحديث الجديد يحل هذي المشاكل بطريقة ذكية: يتم إنشاء نسخة مرآة في كرت الشاشة لذاكرة الجهاز (GPU-side mirror) يتم مزامنتها فقط عند الحاجة. يتم تتبع التغييرات باستخدام write protection ويعاد تحميل المناطق المعدلة فقط.

📦 التصميم الأساسي:

  • تتبع التغييرات يتم على مستوى الصفحات (كل 4KB) باستخدام نظام Bit Tracking.
  • كل 4MB من العنوان الظاهري يتم تتبعه عبر وحدة خاصة تُنشأ عند الحاجة.
  • نفس النظام يُستخدم أيضًا لتسريع الوصول للـ textures عن طريق جدول صفحات متعدد المستويات.

⚙️ كيف يتم التحقق من البيانات؟

قبل استخدام أي buffer، يتم التحقق مما إذا كانت الصفحة المعدلة من طرف المعالج، وإذا كانت كذلك يتم نسخها إلى staging buffer ليتم مزامنتها. هناك تحسين صغير خاص بالـ uniform buffers الصغيرة، يتم تجاوز المسار المؤقت ونسخها مباشرة للـ GPU لتجنب تقطيع الأداء.

🚨 مشكلة المحاذاة (Alignment) ترجع؟

نعم، التبديل إلى cached buffers يعيد مشكلة المحاذاة لبعض الحالات. لذلك، التحديث يحاول تصحيح الانحراف في كل عملية ربط buffer عن طريق إدراج offset في push constant block، مما يضيف حمل بسيط لكنه يحل المشكلة ببساطة بدون تأثير سلبي كبير.

🌐 هل الحل شامل؟

التصميم الحالي يدعم كل كروت الشاشة الحديثة، لكن يمكن تحسينه أكثر باستخدام تقنيات متقدمة مثل:

  • ReBar: تخصيص الذاكرة لتكون مرئية للمعالج وكرت الشاشة بنفس الوقت.
  • VK_EXT_map_memory_placed: (في لينكس فقط) يسمح بربط الذاكرة بعنوان محدد مباشرة.

⚠️ ملاحظة:

النظام الجديد لا يحمي الذاكرة المعدّلة من طرف كرت الشاشة إذا قام المعالج بالكتابة إلى صفحة قريبة. هذا قد يؤدي إلى تلف بيانات الـ buffer لاحقًا، والمشكلة حالياً مؤجلة لحين وجود طريقة ذكية للمزامنة.

🔗 هل هناك فائدة مباشرة؟

نعم! هذا التحديث ساعد في حل مشكلة "flickering" في لعبة Red Dead Redemption على كروت AMD. بينما لازالت المشكلة مستمرة مع NVIDIA، لكنها خطوة كبيرة نحو تحسين الأداء الرسومي 👏


إرسال تعليق

0 تعليقات