Intel 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のクラスリファレンスを参照してください。
ある時点で存在する、またはタスクを実行しているワーカースレッドの数を確認するのは簡単ではありません。これは、意図的な設計上の選択です。IntelのTBB並列プログラミングコースから:
使用可能なスレッドの数を知るにはどうすればよいですか?
聞かないで!
- スケジューラーでさえ、実際に使用可能なスレッドの数を知りません。
- マシン上で実行されている他のプロセスがある可能性があります
- ルーチンは、他の並列ルーチン内にネストできます
ドキュメントには、「ハードウェア構成に依存する」とだけ書かれています。おそらく、使用可能なCPUコアの数だけです。