Como determinar programaticamente o número de núcleos da CPU em C++ (solução multiplataforma)?
Olá a todos! Estou escrevendo uma aplicação multithread em C++ para processamento de imagens. Quero que o programa determine automaticamente o número ideal de threads dependendo do hardware do usuário. O problema é que preciso funcionar tanto no Windows quanto no Linux.
Tentei usar macros e chamadas de API do sistema, mas acaba sendo uma bagunça:
```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
```
Isso funciona, mas o código parece horrível. Além disso, li que em alguns processadores com Hyper-Threading, `dwNumberOfProcessors` retorna núcleos lógicos, não físicos. E eu preciso exatamente do número de núcleos físicos para não criar threads desnecessárias e sobrecarregar o cache.
Existe uma maneira mais elegante de fazer isso em C++ moderno (C++11/14/17)? Talvez haja alguma função padrão ou biblioteca que abstraia isso?