インテル スレッディング・ビルディング・ブロック (Intel® Threading Building Blocks, TBB) は、インテルが公開しているマルチスレッド対応のC++テンプレートライブラリである。マルチCPU・マルチコアCPUなどを搭載したコンピュータ上でアプリケーションを効率よく動作させることができる。
商用版とオープンソースソフトウェア版があり、オープンソース版は無償でダウンロードが可能である。バージョン4.4系列まではGPLv2[3]だったが、バージョン2017からはApache License 2.0となった[4]。
様々なプラットフォーム上で動作する(クロスプラットフォーム)。
概要
マルチCPU・マルチコアCPUを搭載したコンピュータ上でCPUリソースを効率よく利用することが目的であり、シングルCPU・シングルコアCPUでは性能向上は期待できない(スレッド切り替えのオーバーヘッドで逆にパフォーマンスが低下する可能性もある)。
公式に動作サポートされているハードウェアはIntel製のx86系プロセッサファミリーおよび互換プロセッサである。また公式に動作サポートされているオペレーティングシステム (OS) はWindows、Linux、macOS、Androidであり、それぞれのOSで実行させるために必要な外部ライブラリが別途提供される。Intelによらないコミュニティサポートのプラットフォームとしては、ARMアーキテクチャやFreeBSDなども含まれる[2]。
過去にはSolarisやXbox 360などへの対応も行われていた[5]。
TBBバージョン2018 Update 4のリリースノート[6]には、サポート環境に関して以下のように記載されている。
- ハードウェア(推奨)
- Microsoft Windows
- Linux
- OS X
- Android
- サポートされるOS
- Microsoft Windows
- Linux
- OS X* , macOS*
- Android
- Android 5.x, 6.x, 7.x, 8.x
- サポートされる解析ツール
- Intel(R) VTune(TM) Amplifier XE 2017, 2018.
- Intel(R) Inspector XE 2017, 2018.
- Intel(R) Advisor XE 2017, 2018.
リリースノートで必要条件とされているシステムよりグレードの低いシステムでTBBを実行した結果については特に明示されていないが、Pentium III・Celeron Mなどでも正常動作が確認されている例がある[要出典]。
ライブラリの構成は
この内、タスクスケジューラおよびアロケータはTBBをサポートするクラスなので一般に開発者が使うことは少ない。
並列処理アルゴリズムはタスクスケジューラによって処理を分割してリソースに割り当てる。その為、コンテナやミューテックスなどを利用するときはタスクスケジューラの初期化は不要である。
また細分化する際の目安となるグレインサイズをプログラマが指定することも、TBBのランタイムライブラリが自動的に設定するようにすることも可能である。
主なクラス
- タスクスケジューラ
- 並列処理アルゴリズム (Generic Parallel Algorithms)
- parallel_forクラス ループ間で依存性がない単純なループの並列処理
- parallel_reduceクラス 指定した範囲をより小さな範囲に再帰的に分割し並列処理
- parallel_scanクラス 並列プリフィックスを計算
- parallel_whileクラス 不明領域、動的領域変更を伴う独立したループ操作
- parallel_sortクラス 並列処理でソートを行う
- pipelineクラス パイプライン処理
- コンテナクラス
- concurrent_hash_mapクラス STLのmapクラスをスレッドセーフにしたもの
- concurrent_queueクラス STLのqueueクラスをスレッドセーフにしたもの
- concurrent_vectorクラス STLのvectorクラスをスレッドセーフにしたもの
- アシスタントクラス
- blocked_rangeクラス 線形範囲を示すクラス アルゴリズムやコンテナ走査に使用される
- blocked_range2dクラス 2次元範囲を示すクラス blocked_rangeクラスと同様にアルゴリズムやコンテナ走査に使用される
- simple_partitionerクラス 範囲を限界まで再帰的に細分化するようグレインサイズを設定する blocked_range/blocked_range2dクラスと共に使用される
- auto_partitionerクラス タスクスケジューラの挙動を元に最適なグレインサイズを設定する blocked_range/blocked_range2dクラスと共に使用される
- 同期プリミティブ
- atomicクラス アトミック操作を行う
- spin_mutexクラス スピンロックを使うミューテックス
- spin_rw_mutexクラス 複数のスレッドからアクセス可能なspin_mutex
- queuing_mutexクラス スケーラブルなミューテックス
- queuing_rw_mutexクラス 複数のスレッドからアクセス可能なqueuing_mutex
- mutexクラス OSのミューテックスと同様なミューテックス
- パフォーマンス測定
脚注
- ^ “Releases · oneapi-src/oneTBB”. GitHub. 2023年10月4日閲覧。
- ^ a b oneTBB/SYSTEM_REQUIREMENTS.md at master · oneapi-src/oneTBB
- ^ oneapi-src/oneTBB at 4.4.6
- ^ oneapi-src/oneTBB at 2017
- ^ インテル® Parallel Studio XE 評価ガイド - インテル® TBB による効率良いスレッド化
- ^ Intel(R) Threading Building Blocks - Release Notes Version 2018
関連項目
外部リンク