このセクションでは、マルチスレッド・アプリケーションからインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数を呼び出す典型的な使用モデルと利用可能なオプションを要約します。ここで示す推奨事項は、あらゆるマルチスレッド環境に適用されます: OpenMP*、インテル® スレッディング・ビルディング・ブロック、POSIX* スレッドなど。
効果: インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の内部スレッド化は、アプリケーションによるスレッド化の妨げになったり、アプリケーションの速度を低下させることがあります。
例: アプリケーションが上位レベルでスレッド化されている場合や、ほかのアプリケーションと同時に実行する場合。
オプション:
シーケンシャル・ライブラリーと静的または動的にリンクします。
シングル動的ライブラリー mkl_rt.so とリンクして、環境変数または関数呼び出しを使用してシーケンシャル・ライブラリーを選択します。
MKL_THREADING_LAYER=sequential に設定します。
mkl_set_threading_layer(MKL_THREADING_SEQUENTIAL)‡ を呼び出します。
効果: アプリケーション・スレッドは特定の計算専用になります。
例: 1 つのスレッドが 1 つのコアを除くすべてのコア上で方程式を解き、シングルコア上で実行する別のスレッドがデータベースを更新する場合。
リンクオプション:
スレッド・ライブラリーと静的または動的にリンクします。
シングル動的ライブラリー mkl_rt.so とリンクして、環境変数または関数呼び出しを使用してスレッド・ライブラリーを選択します。
MKL_THREADING_LAYER=intel または MKL_THREADING_LAYER=tbb に設定します。
mkl_set_threading_layer(MKL_THREADING_INTEL) または mkl_set_threading_layer(MKL_THREADING_TBB) を呼び出します。
OpenMP* によるスレッド化のオプション:
MKL_NUM_THREADS 環境変数にインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の OpenMP* スレッド数を設定します。
MKL_DOMAIN_NUM_THREADS 環境変数にインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の特定の関数ドメインの OpenMP* スレッド数を設定します。
アプリケーション・スレッドが異なるインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数ドメインで動作する場合に使用します。
mkl_set_num_threads() を呼び出します。
実行時にインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の OpenMP* スレッド数をグローバルに設定する場合に使用します。
mkl_domain_set_num_threads() を呼び出します。
アプリケーション・スレッドが複数のインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) 関数ドメインで動作する場合に使用します。
mkl_set_num_threads_local() を呼び出します。
特定のスレッドから呼び出されるインテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) の OpenMP* スレッド数を設定するのに使用します。
アプリケーションで OpenMP* によるスレッド化を使用する場合、追加の設定が必要になることがあります。
環境変数 MKL_DYNAMIC=FALSE を設定するか、mkl_set_dynamic(0) を呼び出して、インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) が入れ子構造の並列領域で OpenMP* スレッド数を動的に減少させないようにします。
‡ 関数の詳細については、インテル® ソフトウェア・ドキュメント・ライブラリー (英語) にある『インテル® oneAPI マス・カーネル・ライブラリー (インテル® oneMKL) デベロッパー・リファレンス』の「Support Functions」セクションを参照してください。
製品および性能に関する情報 |
|---|
性能は、使用状況、構成、およびその他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) をご覧ください。 改訂 #20201201 |