【发布时间】:2015-09-17 19:45:00
【问题描述】:
我正在 linux 上运行一个 tbb 代码,我想使用我的一部分 CPU(8 个中有 2 个)运行我的代码。除了禁用核心还有其他方法吗?
【问题讨论】:
标签: linux parallel-processing cpu tbb
我正在 linux 上运行一个 tbb 代码,我想使用我的一部分 CPU(8 个中有 2 个)运行我的代码。除了禁用核心还有其他方法吗?
【问题讨论】:
标签: linux parallel-processing cpu tbb
taskset(1) 允许您在系统的特定核心子集上运行命令。
taskset -c 0,1 ./a.out
【讨论】:
TBB 尊重进程关联掩码(在 Linux 上:第一次初始化 TBB 的 [主] 线程的关联掩码)。因此,默认情况下,它将创建数量的工作线程,该数量考虑到关联掩码中设置为 1 的位数。例如,使用taskset 或numactl 设置关联掩码。例如:
numactl --physcpubind=1,2 path/application arg1 arg2
这就像禁用核心,但仅限于特定进程。
您还可以使用旧的tbb::task_scheduler_init 或新的tbb::global_control API 控制代码中的线程数。但它不会为 TBB 线程分配关联掩码,它只是更改线程数。
如果您想手动将关联掩码分配给 TBB 创建的工作线程,请从tbb::task_scheduler_observer 派生您自己的类,以便按照this blog 中的描述定义您的工作线程创建自定义操作。
【讨论】: