我正在linux上运行tbb代码,我想使用我的一部分CPU(8个中的2个)运行我的代码。除了禁用核心之外还有其他方法。
答案 0 :(得分:1)
taskset(1)
允许您在系统的特定核心子集上运行命令。
taskset -c 0,1 ./a.out
答案 1 :(得分:1)
TBB尊重进程关联掩码(在Linux上:第一次初始化TBB的[主]线程的亲和掩码)。因此,默认情况下,它将创建工作线程,其数量考虑了在关联掩码中设置为1的位数。例如,使用taskset
或numactl
设置关联掩码。 E.g:
numactl --physcpubind=1,2 path/application arg1 arg2
这就像禁用核心,但仅限于特定进程。
您还可以使用旧的tbb::task_scheduler_init
或新的tbb::global_control
API控制代码中的线程数。但它不会为TBB线程分配关联掩码,它只会改变线程数。
如果要手动将关联掩码分配给TBB创建的工作线程,请从tbb::task_scheduler_observer
派生自己的类,以便为this blog中所述的工作线程创建定义自定义操作。< / p>