インテル® MKL 2017 デベロッパー・ガイド
インテル® MKL は、インテル® MIC アーキテクチャー・ベースのコプロセッサー用にスタティック・ライブラリーとダイナミック・ライブラリーの両方を提供していますが、シングル・ダイナミック・ライブラリーはコプロセッサーでは利用できません。
単純なケースでリンク行にリストするライブラリーについては、「リンクするライブラリーの選択」を参照してください。
<mkl ディレクトリー>/lib/intel64_lin_mic ディレクトリーに含まれるライブラリーの完全なリストは、「lib/mic ディレクトリーの詳細な構造」を参照してください。
ホスト側のスタティックまたはダイナミック・ライブラリーのいずれか、およびコプロセッサー側のスタティックまたはダイナミック・ライブラリーのいずれかを別々にリンクすることができます。
ホスト側のライブラリーおよびコプロセッサー側のライブラリーと動的にリンクされているアプリケーションを実行するには、環境変数を設定するスクリプト/環境変数の設定を実行します。次の環境変数も設定されます。
LD_LIBRARY_PATH に <mkl ディレクトリー>/lib/intel64_lin を追加します。
インテル® MKL 関数がコプロセッサー側でも利用できるように、リンク行で -offload-attribute-target=mic オプションを指定します。
インテル® MKL は、LP64 インターフェイスと ILP64 インターフェイスの両方を提供しているため、アプリケーションのコプロセッサー側の関数を呼び出す前に、ホスト側とコプロセッサー側の実行ファイルが同じインターフェイスを使用して、すべての 64 ビット整数から 32 ビット整数 (またはその逆) をキャストしていることを確認してください。
次の例は、コンパイラーによるオフロード支援をインテル® Xeon Phi™ コプロセッサーにリンクします。
例では、.f (Fortran) ソースファイルとインテル® Fortran コンパイラーを使用しています。C/C++ ユーザーは、ソースファイルを .cpp (C++) または .c (C) ファイルに、ifort を icc に変更してください。
環境変数を設定するスクリプト/環境変数の設定の実行が完了している場合、これらの例で -I$MKLROOT/include パラメーターを省略できます。
myprog.f、LP64 インターフェイスを使用するインテル® MKL の並列バージョン用のホスト側ライブラリーおよびコプロセッサー側ライブラリーのスタティック・リンク:
ifort myprog.f
-I$MKLROOT/include -offload-attribute-target=mic
-Wl,--start-group
$MKLROOT/lib/intel64_lin/libmkl_intel_lp64.a
$MKLROOT/lib/intel64_lin/libmkl_intel_thread.a
$MKLROOT/lib/intel64_lin/libmkl_core.a
-Wl,--end-group
-openmp -lpthread -lm
-offload-option,mic,compiler,"-Wl,--start-group
$MKLROOT/lib/intel64_lin_mic/libmkl_intel_lp64.a
$MKLROOT/lib/intel64_lin_mic/libmkl_intel_thread.a
$MKLROOT/lib/intel64_lin_mic/libmkl_core.a
-Wl,--end-group"
または
ifort myprog.f -offload-attribute-target=mic -static-intel -mkl
myprog.f、LP64 インターフェイスを使用するインテル® MKL の並列バージョン用のホスト側ライブラリーおよびコプロセッサー側ライブラリーのダイナミック・リンク:
ifort myprog.f
-I$MKLROOT/include -offload-attribute-target=mic
-L$MKLROOT/lib/intel64_lin
-lmkl_intel_lp64
-lmkl_intel_thread
-lmkl_core -openmp -lpthread
-lm
-offload-option,mic,compiler,"-L$MKLROOT/lib/intel64_lin_mic
-lmkl_intel_lp64 -lmkl_intel_thread
-lmkl_core"
または
ifort myprog.f -offload-attribute-target=mic -mkl
myprog.f、ILP64 インターフェイスを使用するインテル® MKL の並列バージョン用のホスト側ライブラリーおよびコプロセッサー側ライブラリーのスタティック・リンク:
ifort myprog.f
-I$MKLROOT/include -offload-attribute-target=mic
-Wl,--start-group
$MKLROOT/lib/intel64_lin/libmkl_intel_ilp64.a
$MKLROOT/lib/intel64_lin/libmkl_intel_thread.a
$MKLROOT/lib/intel64_lin/libmkl_core.a
-Wl,--end-group
-openmp -lpthread
-lm
-offload-option,mic,compiler,"-Wl,--start-group
$MKLROOT/lib/intel64_lin_mic/libmkl_intel_ilp64.a
$MKLROOT/lib/intel64_lin_mic/libmkl_intel_thread.a
$MKLROOT/lib/intel64_lin_mic/libmkl_core.a
-Wl,--end-group"
myprog.f、ILP64 インターフェイスを使用するインテル® MKL の並列バージョン用のホスト側ライブラリーおよびコプロセッサー側ライブラリーのダイナミック・リンク:
ifort myprog.f
-I$MKLROOT/include -offload-attribute-target=mic
-L$MKLROOT/lib/intel64_lin
-lmkl_intel_ilp64
-lmkl_intel_thread
-lmkl_core -openmp
-lpthread -lm
-offload-option,mic,compiler,"-L$MKLROOT/lib/intel64_lin_mic
-lmkl_intel_ilp64
-lmkl_intel_thread
-lmkl_core"
myprog.f、LP64 インターフェイスを使用するインテル® MKL のシーケンシャル・バージョン用のホスト側ライブラリーおよびコプロセッサー側ライブラリーのスタティック・リンク:
ifort myprog.f
-I$MKLROOT/include -offload-attribute-target=mic
-Wl,--start-group
$MKLROOT/lib/intel64_lin/libmkl_intel_lp64.a
$MKLROOT/lib/intel64_lin/libmkl_sequential.a
$MKLROOT/lib/intel64_lin/libmkl_core.a
-Wl,--end-group -lm
-offload-option,mic,compiler,"-Wl,--start-group
$MKLROOT/lib/intel64_lin_mic/libmkl_intel_lp64.a
$MKLROOT/lib/intel64_lin_mic/libmkl_sequential.a
$MKLROOT/lib/intel64_lin_mic/libmkl_core.a
-Wl,--end-group"
myprog.f、LP64 インターフェイスを使用するインテル® MKL のシーケンシャル・バージョン用のホスト側ライブラリーおよびコプロセッサー側ライブラリーのダイナミック・リンク:
ifort myprog.f
-I$MKLROOT/include -offload-attribute-target=mic
-L$MKLROOT/lib/intel64_lin
-lmkl_intel_lp64
-lmkl_sequential -lmkl_core -lm
-offload-option,mic,compiler,"-L$MKLROOT/lib/intel64_lin_mic
-lmkl_intel_lp64 -lmkl_sequential
-lmkl_core"