API ガイド > マルチスレッド化プラグイン >

# Intel Threading Building Block (TBB)

TBB の概要

TBB は、スレッド化用の比較的新しい高レベルの API で Intel が提供しています。TBB は、スレッドの概念をタスクの概念に置き換え、ユーザによって定義され、キューに入れられます。次に、TBB はこれらのタスクをスレッドに効率的にマップします。

TBB は Maya がサポートするすべてのプラットフォームで使用できます。for、while、reduce、sort などの操作に共通の機能のラッパ(wrapper)を提供します。また、アトミック要素であるスケーラブルなメモリ アロケータ(malloc などのアロケータはグローバル ヒープにアクセスし、操作をロックするため、多数のスレッドがメモリを使用すると競合が発生)も提供します。最後に、リスト、キュー、ハッシュ マップなどの STL に基づいたスレッドセーフなコンテナがあります。これらのスレッドセーフなコンテナは通常、内部ロックが必要なため、通常のコンテナよりもシングル スレッド化のパフォーマンスが低くなります。したがって、スレッドセーフが必要な場合にのみ使用することをお勧めします。

TBB の利点と欠点

TBB は OpenMP よりも高レベルのライブラリであり、複雑になった代わりに柔軟性が向上しています。並列コードは、OpenMP よりも侵入性の高い個別のクラスに抽出する必要があります。

タスクベースのアプローチにより、OpenMP で発生するオーバーサブスクリプションの問題は回避されます。Maya では複数の場所で TBB を利用しており、一部では OpenMP のオーバーサブスクリプションを回避し、別の一部では高レベルのアルゴリズムとコンテナを利用しています。スレッドセーフなクロスプラットフォーム要素とコンテナを作成することは非常に困難です。専用のサード パーティ製ライブラリを使用すると、開発者はスレッド化インフラストラクチャの構築に煩わされずに特定のアプリケーションの最適化に専念できます。

TBB は Maya には利用されていますが、プラグイン作成者に対して直接は公開されていません。したがって、独自のプラグインで TBB を使用する場合は、ライセンスを取得する必要があります。Maya プラグインをスレッド化する場合、TBB の使用に関する要件はありませんが、Maya API ではライセンスがなくても間接的にプラグインに TBB を利用できます。詳細については、スレッド化と Maya を参照してください。

TBB ではバージョンの互換性が重要です。Maya では、TBB バージョン 3.0u5 を使用する必要があります。