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、英語）