インテル スレッディング・ビルディング・ブロック (Intel® Threading Building Blocks, TBB) は、インテルが公開しているマルチスレッド対応のC++テンプレートライブラリである。マルチCPU・マルチコアCPUなどを搭載したコンピュータ上でアプリケーションを効率よく動作させることができる。

商用版とオープンソースソフトウェア版があり、オープンソース版は無償でダウンロードが可能である。バージョン4.4系列まではGPLv2oneapi-src/oneTBB at 4.4.6だったが、バージョン2017からはApache License 2.0となったoneapi-src/oneTBB at 2017。

様々なプラットフォーム上で動作する(クロスプラットフォーム)。

概要 マルチCPU・マルチコアCPUを搭載したコンピュータ上でCPUリソースを効率よく利用することが目的であり、シングルCPU・シングルコアCPUでは性能向上は期待できない(スレッド切り替えのオーバーヘッドで逆にパフォーマンスが低下する可能性もある)。

公式に動作サポートされているハードウェアはIntel製のx86系プロセッサファミリーおよび互換プロセッサである。また公式に動作サポートされているオペレーティングシステム (OS) はWindows、Linux、macOS、Androidであり、それぞれのOSで実行させるために必要な外部ライブラリが別途提供される。Intelによらないコミュニティサポートのプラットフォームとしては、ARMアーキテクチャやFreeBSDなども含まれる。

過去にはSolarisやXbox 360などへの対応も行われていたインテル® Parallel Studio XE 評価ガイド - インテル® TBB による効率良いスレッド化。

TBBバージョン2018 Update 4のリリースノートIntel(R) Threading Building Blocks - Release Notes Version 2018には、サポート環境に関して以下のように記載されている。

ハードウェア(推奨) Microsoft Windows Intel Coreプロセッサーファミリー Intel Xeonプロセッサーファミリー Intel Xeon Phiプロセッサーファミリー Linux Intel Coreプロセッサーファミリー Intel Xeonプロセッサーファミリー Intel Xeon Phiプロセッサーファミリー OS X Intel Coreプロセッサーファミリー Android Intel Atomプロセッサーファミリー

ハードウェア(サポート) Intel Pentium 4プロセッサーファミリー Intel Xeon Phiコプロセッサー Intel Atomプロセッサーファミリー 非インテルの上記互換プロセッサー

サポートされるOS Microsoft Windows Microsoft Windows 10 Microsoft Windows 8.1 Microsoft Windows 7 SP1 Microsoft Windows Server 2012 R2 Microsoft Windows Server 2008 R2 SP1 Windows Embedded 8.1, 10 Linux CentOS 7.1 Debian 8, 9 Fedora 24, 25, 26

Red Hat Enterprise Linux 6, 7 SUSE Linux Enterprise Server 11, 12 Ubuntu 14.04 LTS, 16.04 LTS, 17.04 WindRiver Linux 8, 9 Yocto 2.2, 2.3 OS X* , macOS* OS X 10.10, 10.11 macOS 10.12, 10.13 Android Android 5.x, 6.x, 7.x, 8.x

サポートされるコンパイラー Intel C++ Compiler 16, 17, 18 Microsoft Visual C++ 12.0 (Microsoft Visual Studio 2013、Windows専用) Microsoft Visual C++ 14.0 (Microsoft Visual Studio 2015、Windows専用) Microsoft Visual C++ 14.1 (Microsoft Visual Studio 2017、Windows専用) Microsoft Windows SDK for Windows 8.1 Microsoft Windows SDK for Windows 10 サポートされるLinuxとともに提供・サポートされる標準のGCCバージョン GNU Compilers (gcc) 4.1 - 7.1 GNU C Library (glibc) 2.4 - 2.19 Xcode 6.3 - 9.1 Android NDK r10e - r16

サポートされる解析ツール Intel(R) VTune(TM) Amplifier XE 2017, 2018. Intel(R) Inspector XE 2017, 2018. Intel(R) Advisor XE 2017, 2018.

リリースノートで必要条件とされているシステムよりグレードの低いシステムでTBBを実行した結果については特に明示されていないが、。

ライブラリの構成は タスクスケジューラ (Task Scheduler) 並列処理アルゴリズム スレッドセーフなコンテナ ミューテックスなどの同期プリミティブ スレッドセーフなアロケータ パフォーマンス測定用クラス この内、タスクスケジューラおよびアロケータはTBBをサポートするクラスなので一般に開発者が使うことは少ない。

並列処理アルゴリズムはタスクスケジューラによって処理を分割してリソースに割り当てる。その為、コンテナやミューテックスなどを利用するときはタスクスケジューラの初期化は不要である。 また細分化する際の目安となるグレインサイズをプログラマが指定することも、TBBのランタイムライブラリが自動的に設定するようにすることも可能である。

主なクラス タスクスケジューラ task_sheduler_initクラス 並列処理アルゴリズム (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のミューテックスと同様なミューテックス パフォーマンス測定 tick_countクラス 時間取得

脚注

関連項目 Intel Math Kernel Library Intel Integrated Performance Primitives

外部リンク oneAPI Threading Building Blocks (oneTBB) — oneTBB documentation(公式HP、英語)