最終更新:2011-09-14 (水) 03:06:36 (4623d)
Intel Threading Building Blocks
Top / Intel Threading Building Blocks
http://www.threadingbuildingblocks.org/
C++で並列アプリケーションを実装するためのテンプレートライブラリ
TBBが提供する機能
- データ群に対する反復処理を並列実装するためのテンプレートクラスやテンプレート関数
- ストリーム処理/パイプライン処理を並列実装するためのテンプレートクラスやテンプレート関数
- タスクベースの並列処理を実装するためのタスクスケジューラクラス
- スレッドセーフなqueue/vector/mapクラス
- スケーラブルなメモリアロケータ
- mutexなどの排他処理機構
メリット
- まずマルチスレッドによる実装との比較であるが、TBBでは「複数のスレッドを作成し、適切なデータに対して適切な処理を割り当てる」という処理が、テンプレート関数という形であらかじめ用意されている。そのため、データとロジックのみを用意するだけで、面倒なスレッドの生成やデータの分割といった部分を気にせずに並列処理を実装できる。
- OpenMPでは、for/whileループの並列処理やブロックごとの並列処理といった、スレッドの生成に関わる部分については面倒を見なくてもよいものの、データの分割については基本的には自前で処理しなければならない。また、OpenMPは並列処理すべき個所にプラグマを記述していく実装スタイルであるため、ソースコードの視認性や保守性が悪くなりやすいという問題もある。TBBはテンプレートクラスライブラリという形で実装されているため、並列処理をカプセル化しやすく、保守性/再利用性の高いコードを記述できる。
メモ
- TBB2.2以降(現在のバージョンは3.0)は,明示的なTBBの初期化が不要になったが、(必要ならば)以前と同様に初期化時に利用するスレッド数を指定することが可能
関数
- parallel_for
- parallel_do?
- parallel_reduce?
- parallel_scan?
- parallel_sort?
テンプレート型
- blocked_range?