oneTBB の利点

oneTBB の利点#

oneAPI スレッディング・ビルディング・ブロック (oneTBB) は、スレッド化の熟練者に手を借りることなく、マルチコアのパフォーマンスを最大限に活用することを支援するライブラリーです。通常、デベロッパー・ガイドの前半で説明されている要点を実装することで、マルチコア・プロセッサーのパフォーマンスを向上させることができます。専門知識が深まるにつれて、上級セクションで説明されている複雑な主題に取り組みたいと思うようになるかもしれません。

並列プログラミングには、オペレーティング・システムで提供されるプラットフォーム依存のスレッド・プリミティブから、特殊な新しい言語の使用まで、さまざまな手法があります。oneTBB の利点は、ネイティブスレッドの上位レベルで動作し、特殊な言語やコンパイラーを必要としない点にあります。oneTBB は、ISO C++ をサポートしている任意のコンパイラーで使用できます。このライブラリーは、次の点で標準的なスレッド化パッケージとは異なります。

  • oneTBB を使用すると、スレッドに代わって論理並列処理を指定できます。ほとんどのスレッド化パッケージでは、スレッドを指定する必要があります。スレッドは、ハードウェアに近い低レベルの構造であるため、スレッドを直接プログラミングすることは骨の折れる作業であり、非効率なプログラムが作成される可能性も高くなります。スレッドを直接プログラミングする場合、論理タスクをスレッドに効率良く割り当てる必要があります。しかし、oneTBB のランタイム・ライブラリーを使用すれば、プロセッサー・リソースを効率良く活用できるように、自動的にタスクがスレッドにスケジュールされます。

  • oneTBB は、スレッド化によるパフォーマンス向上を目的としています。汎用目的のスレッド化パッケージの多くは、グラフィカル・ユーザー・インターフェイスにおける非同期イベントのスレッド化など、さまざまなスレッド処理をサポートしています。結果として、汎用パッケージはソリューションではなく基盤を提供する低レベルのツールとなる傾向があります。一方、oneTBB は、計算負荷の高い処理の並列化を目的としており、よりハイレベルで、より簡単なソリューションを提供します。

  • oneTBB は他のスレッド化パッケージと互換性があります。このライブラリーはすべてのスレッドの問題に対処するようには設計されていないため、他のスレッド化パッケージとシームレスに共存できます。

  • oneTBB は、スケーラブルなデータ並列プログラミングを重視しています。プログラムをそれぞれ機能別のブロックに分け、各ブロックに個別のスレッドを割り当てる方法では、機能別のブロック数が固定されてしまうため、パフォーマンスの向上はあまり見込めません。一方、oneTBB の柔軟性の高いデータ並列処理プログラミング手法では、コードブロックのあらゆる部分をマルチスレッドで動作させることができます。データ並列プログラミングは、コレクションをより小さな部分に分割することで、多くのプロセッサー数にも適切にスケールできます。データ並列プログラミングでは、プロセッサーを追加することでプログラムのパフォーマンスを向上させることできます。

  • oneTBB はジェネリック・プログラミングに依存します。従来のライブラリーでは、特定のタイプや基本クラスでインターフェイスを指定します。代わりに、oneAPI スレッド・ビルディング・ブロックはジェネリック・プログラミングを使用します。ジェネリック・プログラミングの本質は、最小限の制約で最良のアルゴリズムを作成する点にあります。C++ 標準テンプレート・ライブラリー (STL) は、インターフェイスがタイプの要件によって指定されるジェネリック・プログラミングの良い例です。例えば、C++ STL には、シーケンス上のイテレーターで任意に定義されるシーケンスをソートするテンプレート関数 sort があります。イテレーターの要件は次のとおりです。

    • ランダムアクセスを提供します

    • *i<*j は、イテレーター i が指す項目がイテレーター j が指す項目の前に位置する場合には true となり、そうでない場合は false となります。

    • swap(*i,*j) は 2 つの要素を交換します。

タイプの要件に関する仕様により、テンプレートはベクトルやデックなどのさまざまなシーケンスの表現をソートできるようになります。同様に、oneTBB テンプレートは特定のタイプではなくタイプに関する要件を指定するため、さまざまなデータ表現に適応します。ジェネリック・プログラミングにより、oneTBB は幅広い適用性を持つ高性能アルゴリズムを提供できます。