Avatar ·

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?