Ich verwende std::for_eachmit std::execution::par, um komplexe Berechnungen für große Eingaben durchzuführen, die als Vektor von Strukturen dargestellt werden. Die Berechnung erfordert keine Verzögerungen in Bezug auf Hardware (z. B. Netzwerk- oder Festplatten-E / A), sondern ist "nur CPU" -Berechnung. Für mich sieht es logisch aus, dass es keinen Sinn macht, mehr Betriebssystem-Threads zu erstellen, als wir Hardware-Threads haben. Visual C ++ 2019 erstellt jedoch durchschnittlich 50 Threads, und manchmal bis zu 500, selbst wenn nur 12 Hardware-Threads vorhanden sind.
Gibt es eine Möglichkeit, die Anzahl paralleler Threads auf hardware_concurrencymit std::for_eachund zu beschränken std::execution::par, oder die einzige Möglichkeit, eine angemessene Anzahl von Threads zu erstellen, besteht darin, benutzerdefinierten Code mit zu verwenden std::thread?
std::for_eachandere Algorithmen aus dem <algorithm>Header. Die Hauptidee dahinter std::execution::parbesteht darin, parallelen Code so einfach wie sequentiellen Code zu machen und vorhandene Algorithmen mit minimalen Code- und Semantikänderungen zu parallelisieren.