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
?
c++
multithreading
Vitalii
fonte
fonte
std::for_each
outros algoritmos do<algorithm>
cabeçalho. A principal idéia por trás dissostd::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.Respostas:
Não, pelo menos não em C ++ 17. No entanto, existe uma proposta
executors
em um padrão por vir, que basicamente oferece a capacidade de influenciar o contexto de execução (em termos de local e horário) para a interface do algoritmo STL de alto nível:Até então, você tem que quer confiança com o fornecedor compilador que ele sabe o que é melhor para o desempenho geral, como por exemplo, os desenvolvedores do Visual Studio estado :
A outra opção seria desistir de confiar apenas na biblioteca padrão e usar implementações STL que já apresentam a nova proposta.
fonte