2010-09-24 69 views

回答

18

由于TBB版本2.2的任务调度器会被自动初始化和运行时的照顾要使用的线程数量,如果想手动更改号码,就可以使用以下方法之一:

当您创建调度程序,你可以指定线程数为

tbb::task_scheduler_init init(nthread); 

;否则可以使用

tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic); 

在这种情况下, tbb调度程序创建与CPU核心一样多的线程

+1

你必须在此之后保持'tbb :: task_scheduler_init'对象的存活,否则它将恢复为自动。 – 2015-04-04 13:09:47

+2

此外,任务调度程序对象仅影响从当前线程启动的TBB作业。从另一个线程创建更多作业时,需要另一个'tbb :: task_scheduler_init'。 – 2015-05-24 18:29:23

0

Documetation表示“仅依赖于硬件配置”。可能它只是可用的CPU内核数量。

9

让TBB决定池中的线程数是推荐的选项 - 它通常会创建与计算机上的逻辑CPU一样多的工作线程 - 请参阅Class reference for tbb::task_scheduler_init

这并不容易找出许多工作线程是如何存在的或在任何给定时间执行任务 - 这是一个经过深思熟虑的设计选择。从Intel's TBB Parallel Programming Course

如何知道有多少个线程可用?

不要问!

  • 甚至没有调度知道有多少线程真的是 提供
  • 有可能是机器
  • 例程可以被嵌套在其他并行程序内运行的其他进程