Intel Threading Building Blocks

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

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

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

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

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

過去にはSolarisやXbox 360などへの対応も行われていた。

TBBバージョン2018 Update 4のリリースノートには、サポート環境に関して以下のように記載されている。

 ハードウェア（推奨）
 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、英語）

並列コンピューティング
API
C++