Eu uso std::for_each
com std::execution::par
para executar computação complexa em entradas enormes representadas como vetor de estruturas. O cálculo não precisa de atrasos relacionados ao hardware (E / S de rede ou disco, por exemplo), é "apenas CPU". Para mim, parece lógico que não faz sentido criar mais threads de SO do que as de hardware; no entanto, o Visual C ++ 2019 cria, em média, 50 threads e, às vezes, até 500, mesmo que existam apenas 12 threads de hardware.
Existe uma maneira de limitar a contagem de threads paralelos para hardware_concurrency
with std::for_each
e std::execution::par
, ou a única maneira de criar uma contagem razoável de threads é usar código personalizado std::thread
?
std::for_each
outros algoritmos do <algorithm>
cabeçalho. A principal idéia por trás disso std::execution::par
é tornar o código paralelo quase tão simples quanto o seqüencial e paralelizar os algoritmos existentes com alterações mínimas de código e semântica.