コンテンツにスキップ

Intel Threading Building Blocks

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Flast (会話 | 投稿記録) による 2009年3月29日 (日) 12:58個人設定で未設定ならUTC)時点の版 (新しいページ: ''''スレッディング・ビルディング・ブロック'''('''Threading Building Blocks''','''TBB''')は、Intel社が公開しているC++[[テ…')であり、現在の版とは大きく異なる場合があります。

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

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

製品版とオープンソース版があり、オープンソース版は無償でダウンロードが可能である。

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

概要

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


動作するOSはWindows,MacOS,SunOS,Linux,FreeBSDであり、それぞれのOSで実行させるために必要な外部ライブラリが別途提供される。

Intelがリリースノートで明記しているTBB2.0がサポートするOSは


基本的にIntelと互換性のあるプロセッサを搭載したコンピュータで効果的に利用できる。TBB2.0がサポートするプロセッサは

ただし、リリースノートで必要条件とされているシステムよりグレードの低いシステムでTBBを実行した結果については特に明示されておらず、Pentium IIICeleron Mなどでも正常動作が確認されている例がある。


ライブラリの構成は

この内、タスクスケジューラおよびアロケータは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クラス 時間取得

外部リンク