كيفية تحديد عدد أنوية المعالج برمجيًا في 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)؟ ربما هناك دالة قياسية أو مكتبة تجرد النظام الأساسي؟