英特尔 TBB 如何选择用于并行部分的线程数?
是否有某种规格可用?
从 TBB 版本 2.2 开始,任务调度程序将自动初始化,并在运行时处理要使用的线程数,如果您要手动更改该数,可以使用以下方法之一:
创建调度程序时,可以将线程数指定为
tbb::task_scheduler_init init(nthread);
否则你可以使用
tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic);
在这种情况下,tbb 调度程序会创建与 CPU 内核一样多的线程
让 TBB 决定池中的线程数是推荐的选项 - 它通常会创建与机器上的逻辑 CPU 一样多的工作线程 - 请参阅tbb::task_scheduler_init 的类参考。
要找出在任何给定时间存在或正在执行任务的工作线程数量并不容易——这是一个经过深思熟虑的设计选择。来自英特尔的 TBB 并行编程课程:
我怎么知道有多少线程可用?
不要问!
- 甚至调度程序也不知道有多少线程真正可用
- 机器上可能有其他进程正在运行
- 例程可以嵌套在其他并行例程中
文档说只是“取决于硬件配置”。可能只是可用的 CPU 内核数。