Intel Threading Building Blocks

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

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

様々なプラットフォーム上で動作する。

1. 概要
-----

マルチCPU・マルチコアCPUを搭載したコンピュータ上でCPUリソースを効率よく利用することが目的であり、シングルCPU・シングルコアCPUでは性能向上は期待できない。

公式に動作サポートされているハードウェアはIntel製のx86系プロセッサファミリーおよび互換プロセッサである。また公式に動作サポートされているオペレーティングシステム  は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 C++ 14.0 
Microsoft Visual C++ 14.1 
Microsoft Windows SDK for Windows 8.1
Microsoft Windows SDK for Windows 10
サポートされるLinuxとともに提供・サポートされる標準のGCCバージョン
GNU Compilers  4.1 - 7.1
GNU C Library  2.4 - 2.19
Xcode 6.3 - 9.1
Android NDK r10e - r16
サポートされる解析ツール
Intel VTune Amplifier XE 2017, 2018.
Intel Inspector XE 2017, 2018.
Intel Advisor XE 2017, 2018.リリースノートで必要条件とされているシステムよりグレードの低いシステムでTBBを実行した結果については特に明示されていないが、範囲=Pentium III・[[Intel Celeron#Celeron M / Banias-512K。

ライブラリの構成は

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

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

2. 主なクラス
--------

タスクスケジューラ
task_sheduler_initクラス
並列処理アルゴリズム 
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クラス　時間取得

3. 脚注
-----

4. 関連項目
-------

Intel Math Kernel Library
Intel Integrated Performance Primitives

5. 外部リンク
--------

[1]