运行 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。
我正在 运行在 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。