我使用
std::for_each
和std::execution::par
对表示为结构向量的大型输入执行复杂计算。该计算不需要与硬件相关的任何延迟(例如网络或磁盘IO),它是“仅CPU”计算。对我来说,逻辑上讲,没有更多的操作系统线程比我们拥有的硬件线程更有意义;然而,Visual C++ 2019 平均创建50个线程,有时甚至会创建高达500个线程,即使只有12个硬件线程。
是否有办法通过std::for_each
和std::execution::par
限制并行线程数到hardware_concurrency
,或者唯一的方法是使用自定义代码和std::thread
来创建合理的线程数?
<algorithm>
头文件中的std::for_each
和其他算法低级得多。std::execution::par
背后的主要思想是使并行代码与顺序代码一样简单,并通过最小的代码和语义更改并行化现有算法。 - Vitalii