インテル® Xeon Phi™ コプロセッサー向けにインテル® MKL のワーク分割を制御する方法

同カテゴリーの次の記事

インテル® Xeon Phi™ コプロセッサー向けにインテル® MKL の利用モデルを選択する方法

この記事は、インテル® デベロッパー・ゾーンに掲載されている「How to control the work division in Intel MKL on Intel Xeon Phi」の日本語参考訳です。


自動オフロードされるインテル® MKL レベル 3 BLAS 関数 (?GEMM、?TRMM、?TRSM) では、環境変数を設定するか関数を呼び出すことにより、インテル® MKL ルーチンによって決定されたデフォルトのワーク分割を無視して、計算をホスト・プロセッサーとインテル® Xeon Phi™ コプロセッサー間で分割することができます。

次の表は、ホストとコプロセッサー間のワーク分割を設定および管理する方法の例です。

使用例
MKL_MIC_Set_Workdivision(
MKL_TARGET_MIC, -1, 0.5)
計算の 50% をすべてのカードにオフロードします。ランタイムシステムが、使用するカードを決定します。
MKL_MIC_Set_Workdivision(  MKL_TARGET_MIC, 0, 0.5) 計算の 50% を最初のカードにオフロードします。 
MKL_MIC_Set_Workdivision(
MKL_TARGET_MIC, 1,
MKL_MIC_AUTO_WORKDIVISION)
ランタイムシステムが、2 つ目のカードにオフロードするワーク量を決定します。
MKL_MIC_Set_Workdivision(  MKL_TARGET_HOST, 0, 0.5) 計算の 50% をホストで行い、残りをすべてのカードにオフロードします。  (この場合、2 つ目の引数は無視されます)
MKL_MIC_Get_Workdivision(
MKL_TARGET_MIC, 0, &wd)
最初のカードに指定されたワーク量を調べます。
MKL_MIC_Get_Device_Count( ) システムで利用可能なカードの数を調べます。

ワーク分割は環境変数を設定して制御することもできます。次の表の例を参照してください。

サポート関数は環境変数よりも常に優先されることに注意してください。

使用例
MKL_MIC_WORKDIVISION=0.5 計算の 50% をすべてのカードにオフロードします。ランタイムシステムが、使用するカードを決定します。
MKL_MIC0_WORKDIVISION=0.5 計算の 50% を最初のカードにオフロードします。 
MKL_MIC1_WORKDIVISION=
MIC_AUTO_WORKDIVISION
ランタイムシステムが、2 つ目のカードにオフロードするワーク量を決定します。
MKL_HOST_WORKDIVISION=0.5 計算の 50% をホストで行い、残りをすべてのカードにオフロードします。

注: これらのワーク分割の制御は、LAPACK 関数では動作が異なります。LAPACK 関数では、ゼロ以外のワーク分割はすべて 100% として解釈されます。

インテル® Xeon Phi™ コプロセッサーにおけるインテル® MKL に関連する記事については、インテル® メニー・インテグレーテッド・コア・アーキテクチャー (インテル® MIC アーキテクチャー) 上のインテル® マス・カーネル・ライブラリー (インテル® MKL) を参照してください。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事