Comment déterminer programmatiquement le nombre de cœurs de processeur en C++ (solution multiplateforme) ?
Bonjour à tous ! J'écris une application multithread en C++ pour le traitement d'images. Je veux que le programme détermine lui-même le nombre optimal de threads en fonction du matériel de l'utilisateur. Le problème est que je dois travailler à la fois sur Windows et Linux.
J'ai essayé d'utiliser des macros et des appels d'API système, mais cela donne un vrai zoo :
```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
```
Cela fonctionne, mais le code est horrible. De plus, j'ai lu que sur certains processeurs avec Hyper-Threading, `dwNumberOfProcessors` retourne les cœurs logiques, pas les cœurs physiques. Or j'ai besoin du nombre de cœurs physiques pour ne pas créer trop de threads et ne pas surcharger le cache.
Existe-t-il une manière plus élégante de faire cela en C++ moderne (C++11/14/17) ? Y a-t-il une fonction standard ou une bibliothèque qui abstrait cela ?