J'utilise std::for_each
avec std::execution::par
pour effectuer des calculs complexes sur une énorme entrée représentée comme vecteur de structures. Le calcul ne nécessite aucun délai lié au matériel (réseau ou disque IO par exemple), il s'agit d'un calcul "juste CPU". Pour moi, il semble logique qu'il n'y ait aucun sens à créer plus de threads d'OS que nous en avons de matériels; cependant, Visual C ++ 2019 crée en moyenne 50 threads, et parfois jusqu'à 500, même s'il n'y a que 12 threads matériels.
Existe-t-il un moyen de limiter le nombre de threads parallèles à hardware_concurrency
avec std::for_each
et std::execution::par
, ou la seule façon de créer un nombre de threads raisonnable est d'utiliser du code personnalisé avec std::thread
?
std::for_each
autres algorithmes de l'en- <algorithm>
tête. L'idée principale std::execution::par
est de rendre le code parallèle presque aussi simple que séquentiel et de paralléliser les algorithmes existants avec un minimum de changements de code et de sémantique.