¿Cómo determinar programáticamente el número de núcleos de CPU en C++ (solución multiplataforma)?
¡Hola a todos! Estoy escribiendo una aplicación multithreading en C++ para procesamiento de imágenes. Quiero que el programa determine automáticamente el número óptimo de hilos según el hardware del usuario. El problema es que necesito que funcione tanto en Windows como en Linux.
Intenté usar macros y llamadas a la API del sistema, pero resulta un zoológico:
```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
```
Esto funciona, pero el código se ve horrible. Además, leí que en algunos procesadores con Hyper-Threading `dwNumberOfProcessors` devuelve núcleos lógicos, no físicos. Y necesito la cantidad de núcleos físicos para no crear hilos innecesarios y no sobrecargar el caché.
¿Hay una forma más elegante de hacer esto en C++ moderno (C++11/14/17)? ¿Quizás existe alguna función estándar o biblioteca que abstraiga...