英特尔TBB如何选择用于并行部分的线程数?
是否有某种规格可用?
答案 0 :(得分:19)
从TBB 2.2版开始,任务调度程序将自动初始化,并在运行时处理要使用的线程数,如果您手动想要更改该数字,则可以使用以下方法之一:
创建调度程序时,可以将线程数指定为
tbb::task_scheduler_init init(nthread);
否则你可以使用
tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic);
在这种情况下,tbb调度程序会创建与CPU内核一样多的线程
答案 1 :(得分:11)
让TBB决定池中的线程数是建议的选项 - 它通常会创建与计算机上的逻辑CPU一样多的工作线程 - 请参阅Class reference for tbb::task_scheduler_init。
在任何给定时间找出存在多少工作线程或正在执行任务并不容易 - 这是一个深思熟虑的设计选择。来自Intel's TBB Parallel Programming Course:
我如何知道有多少线程可用?
不要问!
- 甚至调度程序也不知道确实有多少线程 可用
- 机器上可能正在运行其他进程
- 例程可以嵌套在其他并行例程中
答案 2 :(得分:0)
Documetation说“仅依赖于硬件配置”。可能只有可用的CPU内核数量。