Intel Threading Building Blocks

Intel Threading Building Blocks (TBB) について



Intel Threading Building Blocks(TBB)は、インテルが開発・提供しているC++向けの並列処理ライブラリです。マルチコアプロセッサ環境でのアプリケーションのパフォーマンスを最大限に引き出すことを目的としており、効率的なマルチスレッドプログラミングを支援します。

TBBの概要



TBBは、マルチCPUマルチコアCPUを搭載したコンピュータにおいて、CPUリソースを最大限に活用するためのライブラリです。シングルCPUやシングルコアCPU環境では、スレッド切り替えのオーバーヘッドにより、逆にパフォーマンスが低下する可能性があります。そのため、TBBは、複数のCPUコアを効率的に利用できる環境での利用が推奨されます。

公式にサポートされているハードウェアは、インテル製のx86系プロセッサファミリーおよび互換プロセッサです。オペレーティングシステム(OS)については、Windows、Linux、macOS、Androidが公式にサポートされており、各OSに対応するための外部ライブラリも提供されています。コミュニティサポートでは、ARMアーキテクチャやFreeBSDなども含まれています。

過去には、SolarisXbox 360などのプラットフォームにも対応していました。

対応環境



TBBは、様々なハードウェア、OS、コンパイラに対応しています。以下に、TBBのリリースノートに記載されている主なサポート環境をまとめました。

推奨ハードウェア


Windows
Intel Core プロセッサーファミリー
Intel Xeon プロセッサーファミリー
Intel Xeon Phi プロセッサーファミリー
Linux
Intel Core プロセッサーファミリー
Intel Xeon プロセッサーファミリー
Intel Xeon Phi プロセッサーファミリー
macOS
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
Intel Cluster Ready
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
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
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): スレッドの生成、管理、処理分散を自動的に行う機能。開発者が直接利用することは少ない。
並列処理アルゴリズム (Parallel Algorithms): データの並列処理を行うためのアルゴリズム群。タスクスケジューラと連携し、効率的な並列処理を実現。
スレッドセーフなコンテナ (Thread-Safe Containers): 複数スレッドから安全にアクセスできるコンテナ
同期プリミティブ (Synchronization Primitives): ミューテックスなど、スレッド間の同期を行うための機能。
スレッドセーフなアロケータ (Thread-Safe Allocators): メモリ割り当てを安全に行うための機能。タスクスケジューラによって利用されるため、開発者が直接使うことは少ない。
パフォーマンス測定用クラス (Performance Measurement Classes): 処理時間を計測するための機能。

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

主なクラス



TBBには、様々なクラスが提供されています。以下に主なクラスをまとめます。

並列処理アルゴリズム


`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 Threading Building Blocks (TBB) は、マルチコアプロセッサ環境での並列処理を効率化するための強力なライブラリです。多様なプラットフォームやコンパイラに対応し、柔軟な並列プログラミングを可能にします。TBBを活用することで、アプリケーションのパフォーマンス向上を期待できます。

関連項目



Intel Math Kernel Library
Intel Integrated Performance Primitives

外部リンク



oneAPI Threading Building Blocks (oneTBB) — oneTBB documentation (公式HP、英語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。