Avatar ·

كيفية تحديد عدد أنوية المعالج برمجيًا في C++ (حل عبر المنصات)؟

مرحبًا بالجميع! أكتب تطبيقًا متعدد الخيوط بلغة C++ لمعالجة الصور. أريد أن يحدد البرنامج تلقائيًا العدد الأمثل من الخيوط بناءً على أجهزة المستخدم. المشكلة هي أنني بحاجة للعمل على كل من Windows و Linux. حاولت استخدام الماكرو واستدعاءات واجهات برمجة التطبيقات النظامية، لكن النتيجة كانت فوضى: ```cpp #ifdef _WIN32 SYSTEM_INFO sysinfo; GetSystemInfo(&sysinfo); int cores = sysinfo.dwNumberOfProcessors; #elif __linux__ int cores = sysconf(_SC_NPROCESSORS_ONLN); #else int cores = 1; // fallback #endif ``` هذا يعمل، لكن الكود يبدو سيئًا. بالإضافة إلى ذلك، قرأت أنه في بعض المعالجات التي تحتوي على Hyper-Threading، يُرجع `dwNumberOfProcessors` الأنوية المنطقية وليس الفيزيائية. وأنا بحاجة تحديدًا إلى عدد الأنوية الفيزيائية لتجنب إنشاء خيوط زائدة وعدم إثقال ذاكرة التخزين المؤقت. هل هناك طريقة أكثر أناقة للقيام بذلك في C++ الحديث (C++11/14/17)؟ ربما هناك دالة قياسية أو مكتبة تجرد النظام الأساسي؟