我使用std::for_each
with std::execution::par
对表示为结构向量的巨大输入执行复杂的计算。该计算不需要任何与硬件有关的延迟(例如,网络或磁盘IO),它是“仅CPU”计算。对我来说,逻辑上讲,没有必要创建我们拥有硬件的更多OS线程;但是,Visual C ++ 2019平均创建50个线程,有时甚至只有12个硬件线程,最多可以创建500个线程。
有没有办法来限制并行线程计数至hardware_concurrency
与std::for_each
和std::execution::par
,或创建合理的线程数是使用自定义代码的唯一途径std::thread
?
open-std.org/jtc1/sc22/wg21/docs/papers/2016/…-但我认为这仍是一项建议?
—
卡拉米里尔
即使有一天它将成为标准,线程池的主要问题是它的级别比标头中的
—
Vitalii
std::for_each
其他算法低得多<algorithm>
。背后的主要思想std::execution::par
是使并行代码几乎与顺序代码一样简单,并以最少的代码和语义变化并行化现有算法。
这回答了你的问题了吗?C ++ STL(ExecutionPolicy)算法如何确定要使用多少个并行线程?
—
Jodocus