Avatar ·

Wie man programmatisch die Anzahl der CPU-Kerne in C++ ermittelt (plattformübergreifende Lösung)?

Hallo zusammen! Ich schreibe eine Multithreading-Anwendung in C++ zur Bildverarbeitung. Ich möchte, dass das Programm selbstständig die optimale Anzahl von Threads basierend auf der Hardware des Benutzers bestimmt. Das Problem ist, dass ich sowohl unter Windows als auch unter Linux arbeiten muss. Ich habe versucht, Macros und Aufrufe von System-APIs zu verwenden, aber es wird ein ziemlicher 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 ``` Das funktioniert, aber der Code sieht schrecklich aus. Außerdem habe ich gelesen, dass auf einigen Prozessoren mit Hyper-Threading `dwNumberOfProcessors` logische Kerne zurückgibt, nicht physische. Ich brauche aber genau die Anzahl der physischen Kerne, um keine überflüssigen Threads zu erstellen und den Cache nicht zu überlasten. Gibt es eine elegantere Methode, dies in modernem C++ (C++11/14/17) zu tun? Vielleicht gibt es eine Standardfunktion oder Bibliothek, die dies abstrahiert?