【发布时间】:2018-07-20 14:03:07
【问题描述】:
我正在使用 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
这是一个错误吗?
【问题讨论】:
-
我设法发现进程的亲和掩码是1:taskset -p 15299 pid 15299的当前亲和掩码:1
标签: multithreading tbb dlib parallel-for