次のステップ#

oneTBB をインストールした後、ライブラリーの使用を開始するには次の手順を実行します。

環境変数の設定#

oneTBB をインストールした後、環境変数を設定します。

  1. oneTBB インストール・ディレクトリーに移動します。

  2. 次のコマンドを実行して、<install_dir> 内のスクリプトで環境変数を設定します。

    • Linux* : <install_dir>/tbb/latest/envvars.{sh|csh}

    • Windows* : <install_dir>/tbb/latest/envvars.bat

ヒント

oneTBB は、CPU リソースの使用に際してインテルの OpenMP* と協調し、プロセス内で両方のランタイムが使用される場合、過剰なオーバーサブスクリプションを回避できます。この機能を有効にするには、TCM_ENABLE 環境変数を 1 に設定します。詳細は、avoid_cpu_overutilization を参照してください。

サンプルのビルドと実行#

  1. IDE を使用して新しい C++ プロジェクトを作成します。この例では、Microsoft Visual Studio* Code が使用されています。

  2. プロジェクトに example.cpp ファイルを作成します。

  3. 以下のコードをコピーして貼り付けます。これは、oneTBB アルゴリズムの典型的な例です。サンプルは、1 から 100 までのすべての整数の合計を計算します。

    #include <oneapi/tbb.h> 
    
    int main (){ 
        int sum = oneapi::tbb::parallel_reduce( 
            oneapi::tbb::blocked_range<int>(1,101), 0, 
            [](oneapi::tbb::blocked_range<int> const& r, int init) -> int { 
                for (int v = r.begin(); v != r.end(); v++) { 
                    init += v; 
                } return init; 
            }, 
            [](int lhs, int rhs) -> int { 
                return lhs + rhs; 
            } ); 
    
        printf("Sum: %d\n", sum); 
        return 0; 
    }
  4. .vscode ディレクトリーの tasks.json ファイルを開き、次の行を args 配列に貼り付けます。

    • -Ipath/to/oneTBB/include で oneTBB インクルード・ディレクトリーを追加します。

    • oneTBB を追加するには、path/to/oneTBB/ を使用します。

    以下に例を示します。

    { 
      "tasks": [ 
          { "label": "build & run", 
          "type": "cppbuild", 
          "group": { 
          "args":  [ 
              "/IC:\\Program Files (x86)\\Intel\\oneAPI\\tbb\\2022.0.0\\include", 
              "C:\\Program Files (x86)\\Intel\\oneAPI\\tbb\\2022.0.0\\lib\\tbb12.lib"
  5. プロジェクトをビルドします。

  6. この例を実行します。

  7. oneTBB が正しく構成されている場合、出力には Sum: 5050 と表示されます。

  1. プロジェクトに example.cpp ファイルを作成します。

  2. 以下のコードをコピーして貼り付けます。これは、oneTBB アルゴリズムの典型的な例です。サンプルは、1 から 100 までのすべての整数の合計を計算します。

    #include <oneapi/tbb.h> 
    
    int main(){ 
        int sum = oneapi::tbb::parallel_reduce( 
            oneapi::tbb::blocked_range<int>(1,101), 0, 
            [](oneapi::tbb::blocked_range<int> const& r, int init) -> int { 
                for (int v = r.begin(); v != r.end(); v++) { 
                    init += v; 
                } 
                return init; 
            }, 
            [](int lhs, int rhs) -> int { 
                return lhs + rhs; 
            } 
        ); 
    
        printf("Sum: %d\n", sum); 
        return 0; 
    }
  3. oneTBB を使用してコードをコンパイルします。例:

    g++ -std=c++11 example.cpp -o example -ltbb
  4. 実行可能ファイルを実行します。

    ./example
  5. oneTBB が正しく構成されている場合、出力には Sum: 5050 と表示されます。

ハイブリッド CPU と NUMA サポートを有効にする#

ハイブリッド CPU および NUMA プラットフォームをサポートするため、oneTBB は HWLOC* ライブラリーに依存しています。

HWLOC の機能には、名前が tbbbind プレフィクスで始まる一連のプロキシー・ライブラリーを通じてアクセスします。oneTBB は必要に応じて実行時にそれらを自動的にロードします。これらのライブラリーを検出して読み込むには、それらを oneTBB ライブラリー自体と同じディレクトリー (たとえば、libtbb.so または tbb.dll と同じ) に配置します。

oneTBB 2022.2 以降、デフォルトの tbbbind ライブラリーは HWLOC 2.x と静的にリンクされます。システム提供の HWLOC が見つからない場合、このバージョンが使用されます。

システム提供またはカスタムビルドの HWLOC バージョンを使用する場合、ダイナミック・ローダーが使用する検索パスでそれが検索可能であることを確認してください。これらのパスの詳細については、プラットフォームのダイナミック・ローダーのドキュメントを参照してください (例: Linux* の場合は LD_LIBRARY_PATH、Windows* の場合は PATH)。

特定の HWLOC バージョンを使用するには、次の tbbbind バリアントのいずれかを oneTBB ライブラリーと同じディレクトリーに配置します。

  • tbbbind_2_5 — HWLOC バージョン 2.5 以上に依存します。ハイブリッド CPU のサポートが必要な場合は、このバージョンを使用します。

  • tbbbind_2_0 — HWLOC バージョン 2.1 から 2.4 に依存します。

ヒント

実行時に tbbbind が正常にロードされたことを確認するには、アプリケーションを起動する前に環境変数 TBB_VERSION=1 を設定します。