Barakat Soror
Barakat Soror

@barakatsoror

4 تغريدة 16 قراءة Feb 11, 2020
1. هناك أنظمة متعددة المعالجات تستخدم مايسمى بالـ non-uniform memory access وتختصر NUMA، في هذه الأنظمة كل node (CPU واحد أو مجموعة CPUs) متصلة بذاكرة RAM (أو مجموعة RAMs) منفصلة ولها وحدة إدارة ذاكرة MMU أو memory controller منفصلة، وهناك bus يربط الـ nodes لتتواصل مع بعض…
2. أحد أهداف استخدام الـ NUMA هو تجنب الزحام على الـ data bus بين الـ CPUs والـ RAMs في البرامج التي تجري عمليات كثيرة على البيانات data، فيستطيع CPU أن يتواصل مع الـ RAM المحلية للـ node بسرعة.
البرنامج لا يحتاج تعديل بحيث يعمل على هذا النظام، والعملية (شبه) transparent …
3. لكن هذا النظام أو المعمارية تجعل الوصول لـ RAM خاصة بـ node أخرى أبطأ، طبعاً يحاول الـ thread scheduler أن يجدول الـ thread على الـ node ويحجز من الذاكرة التي تحقق أعلى كفاءة.
لكن قد يفضل المبرمج أن يكتب برنامج "NUMA-aware" ويتحكم في الجدولة يدوياً لزيادة الكفاءة أكثر …
4. هنا يمكنه استخدام الـ affinity masks باستخدام SetProcessAffinityMask أو SetThreadAffinityMask لتحديد الـ node التي تعمل عليها الـ thread، وهنا يأتي دور دوال الذاكرة المنتهية بـ Numa في Windows مثل VirtualAllocExNuma والتي تسمح لك بتحديد ذاكرة أي node يتم حجز الذاكرة منها.

جاري تحميل الاقتراحات...