インテル® スレッディング・ビルディング・ブロック (インテル® TBB) は、スレッド化の熟練者に手を借りることなく、マルチコア・プロセッサーのパフォーマンスを最大限に活用できるよう支援するライブラリーです。ユーザーガイドの初めに説明されている重要なポイントを実装することで、マルチコア・プロセッサーのパフォーマンスを向上させることができます。徐々に知識が深まると、詳細セクションで記述されているような、より複雑な内容に関心を持たれることでしょう。
並列プログラミングには、プラットフォーム依存のスレッド・プリミティブから、特殊な新しい言語の使用まで、さまざまな手法があります。インテル® TBB の利点は、ロースレッドよりも高いレベルで動作し、非標準言語やコンパイラーを必要としない点にあります。インテル® TBB は、ISO C++をサポートしている任意のコンパイラーで使用できます。このライブラリーは、次の点で典型的なスレッドパッケージとは異なります。
インテル® TBB では、スレッドの指定ではなく、論理的な並列処理 の指定が可能です。ほとんどのスレッドパッケージでは、スレッドを指定する必要があります。スレッドは、ハードウェアに非常に近い重要な構造であるため、スレッドを直接プログラミングすることは骨の折れる作業であり、また非効率的なプログラムが作成される可能性も高くなります。スレッドを直接プログラミングする場合は、論理タスクをスレッドに効率的にマッピングする必要があります。しかし、インテル® TBB のランタイム・ライブラリーを使用すれば、プロセッサー・リソースを効率良く活用できるように、自動的に論理的な並列処理がスレッドにマッピングされます。
インテル® TBB は、パフォーマンスに特化したスレッド処理 が対象です。汎用を目的としたスレッドパッケージの多くは、グラフィカル・ユーザー・インターフェイスにおける非同期イベントのスレッド化など、さまざまなスレッド化をサポートしています。その結果、ソリューションではなくファウンデーションを提供するローレベルのツールとなる傾向があります。一方、インテル® TBB は、計算負荷の高い処理の並列化を目的としており、よりハイレベルで簡単なソリューションを提供します。
インテル® TBB は、その他のスレッドパッケージと互換性 があります。 ライブラリーは、すべてのスレッド問題に対応するために設計されているわけではないため、その他のスレッドパッケージともシームレスに共存できるようになっています。
インテル® TBB は、スケーラブルなデータ並列プログラミング を重視しています。プログラムをそれぞれ機能別のブロックに分け、各ブロックに個別のスレッドを割り当てる方法では、機能別のブロック数が固定されてしまうため、パフォーマンスの向上はあまり見込めません。一方、インテル® TBB の場合、データ並列 プログラミングに重点が置かれているため、コレクションのあらゆる部分をマルチスレッドで動作させることができます。データ並列プログラミングは、コレクションを小さなまとまりに分割することにより、より多くのプロセッサー数にも対応します。このデータ並列プログラミングによって、プロセッサーを追加することでプログラムのパフォーマンスを向上させることができます。
インテル® TBB は、汎用プログラミング を使用します。従来のライブラリーでは、特定の型や基本クラスでインターフェイスを指定します。しかし、インテル® TBB では、汎用プログラミングを使用します。汎用プログラミングの本質は、最小限の制約で最良のアルゴリズムを作成する点にあります。C++ 標準テンプレート・ライブラリー (STL) は、インターフェイスが型の要件 によって指定される汎用プログラミングの良い例です。例えば、C++ STL には、シーケンス上のイテレーターで任意に定義されるシーケンスをソートするテンプレート関数 sort があります。イテレーターの要件は次のとおりです。
ランダムアクセスを提供すること。
式 *i<*j は、イテレーター j によってポイントされた項目の前に配置されたイテレーター i により、項目がポイントされた場合は true で、そうでない場合は false であること。
式 swap(*i,*j) は、2 つの要素を交換すること。
型の要件に関する仕様では、テンプレートを使用して、ベクトルやデックといった、あらゆるシーケンス表現をソートすることができます。同様に、インテル® TBB のテンプレートは、特定の型ではなく、型の要件を指定するため、さまざまなデータ表現に応用することが可能です。汎用プログラミングにより、インテル® TBB では、幅広く応用できるハイパフォーマンス・アルゴリズムを提供します。