运行 cpu 具体数量的 TBB 代码

Run TBB code on specific number of cpu

我正在 运行在 linux 上编写一个 tbb 代码,我想 运行 我的代码使用我的 CPU 的一部分(8 个中有 2 个) .除了禁用内核还有其他方法吗?

taskset(1) 允许您 运行 在系统的特定内核子集上执行命令。

taskset -c 0,1 ./a.out

TBB 遵守进程关联掩码(在 Linux 上:[主] 线程的关联掩码,其中 TBB 是第一次初始化)。因此,默认情况下,它会创建一定数量的工作线程,该数量考虑到关联掩码中设置为 1 的位数。例如,使用 taskset or numactl 来设置亲和掩码。例如:

numactl --physcpubind=1,2 path/application arg1 arg2

这就像禁用核心,但仅针对特定进程。

您还可以使用旧 tbb::task_scheduler_init or new tbb::global_control API 控制代码中的线程数。但它不会为 TBB 线程分配关联掩码,它只是更改线程数。

如果您想手动将关联掩码分配给 TBB 创建的工作线程,请从 tbb::task_scheduler_observer in order to define your custom actions for worker threads creation as described in this blog 派生您拥有 class。