この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Recommended settings for calling Intel MKL routines from multi-threaded applications」(http://software.intel.com/en-us/articles/recommended-settings-for-calling-intelr-mkl-routines-from-multi-threaded-applications/) の日本語参考訳です。
マルチスレッド・アプリケーション1 からインテル® マス・カーネル・ライブラリー (インテル® MKL) のルーチンを呼び出す場合の推奨設定 | ||
リンクモデル | 追加パラメーター2 | 説明 |
MKL のシーケンシャル・スレッド化レイヤーとリンク | なし | MKL のスレッド化は不要です。 例: アプリケーションのスレッドがシステムで利用可能なすべてのコアを活用していると考えられる場合や MKL のスレッド化によりオーバーサブスクリプション3 が発生する場合です。 |
MKL の並列スレッド化レイヤーとリンク | MKL_NUM_THREADS = 1 | スレッド化が無効なシーケンシャル・バージョンの MKL とリンクするのと同じです。 |
以下のパラメーターを使用すると、アプリケーションのスレッド内で MKL のスレッド化を有効にできます。 | ||
MKL_NUM_THREADS=N | MKL のスレッド化を有効にします。アプリケーションで使用するスレッドとは別に、MKL のスレッド化に必要な十分なリソース (物理コア) がある場合のみ使用してください。N の選択には十分注意してください。 例 1: システムに 8 つのコアがあり、アプリケーションの 2 つのスレッドがそれぞれ MKL を呼び出す場合は、MKL_NUM_THREADS=4 にすると良いでしょう。 例 2: 並列領域のクリティカル・セクションで MKL を呼び出す場合は、MKL_NUM_THREADS=N にすると良いでしょう。ここで N はシステムの物理コア数です。 注: アプリケーションで OpenMP* スレッドを使用している場合は、追加オプションを設定してください。 | |
MKL_DYNAMIC=false OMP_NESTED=true | OpenMP* の並列領域から MKL を呼び出し、MKL のスレッド化を有効にする場合は、これらのオプションを使用します。 | |
MKL_NUM_THREADS=1 MKL_DOMAIN_NUM_THREADS = “DOMAIN=N“ | 特定の MKL ドメイン (BLAS、FFT、VML) でのみ MKL のスレッド化を有効にします。 例: アプリケーションの並列領域では異なるスレッドからいくつかの MKL ルーチンを呼び出し、そのシリアル領域では MKL FFT を呼び出す場合は、 MKL_NUM_THREADS=1、MKL_DOMAIN_NUM_THREADS=”MKL_FFT=N” に設定します。 ここで N はシステムの物理コア数です。 | |
OMP_DYNAMIC=true | MKL のスレッド化によりオーバーサブスクリプションが発生する可能性を軽減します。システム・ワークロードの分析に基づき OpenMP* スレッドの数が動的に調整されます。 このオプションは、インテルの OpenMP* 互換ライブラリー (libiomp5) で利用可能です。 |
2. 別の方法として、(この表にある環境変数の代わりに) 関数呼び出しを使用して追加パラメーターを設定することもできます。詳細は、インテル® MKL と OpenMP* のドキュメントを参照してください。
3. オーバーサブスクリプションとは、アプリケーションでアクティブなスレッド数が、利用可能な物理コア数を超えている状況のことを指します。これは、パフォーマンスの低下を引き起こす可能性があります。
インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。