我正在使用 tbb 进行并行化,但遇到了一个烦人的问题。
我使用 tbb::parallel_for 并且算法在单个线程上运行。
如果我打印
std::cout << tbb::task_scheduler_init::default_num_threads() << std::endl;
它报告1
。
如果我通过以下方式手动覆盖并发:
tbb::task_scheduler_init guard(std::thread::hardware_concurrency());
tbb 创建适当数量的线程,但 parallel_for仍将所有工作安排在单个线程上(甚至不在内核之间切换)。所有这一切都发生在 16+ 线程机器上。
此外top
报告100%
cpu 使用情况(而不是正确的1600%
)和 16
平均负载。在图片上可以看到蓝色的核心已经饱和,而其余的核心有时会闲置(快照是我的桌面不是16+核心服务器,但效果相似)。
我正在使用tbb-2018_U5
opensuse 15 和dlib
这是一个错误吗?