はじめに
Intel MIC(Xeon Phi)を使用する際のコマンドや使用方法に関して、TIPSをまとめます。このメモ時点での環境。
- OS:CentOS6.5
- MPSS: 3.4
Native実行用のコンパイル
ホスト上でコンパイルを行う(Phi上ではない)。 コンパイルオプションは次の通り(-Wl以下が重要)。icc -openmp -mmic -no-offload -O3 -ipo -no-prec-div -mkl -Wl,-rpath=$SINK_LD_LIBRARY_PATH hogehoge.c |
setenv SINK_LD_LIBRARY_PATH "/opt/intel/impi/4.1.3.048/mic/lib:/opt/intel/composer_xe_2013_sp1.1.106/mkl/lib/mic:/opt/intel/composer_xe_2013_sp1.1.106/compiler/lib/mic" |
Nativeモードでの実行
sshでMICにログインしてジョブを投入する方法と、ホスト上からmicnativeloadexコマンドでジョブを投入する方法がある。1)MICにログインしてジョブを投入する場合 MICへのユーザーの作成やファイル共有ができている物として
ssh mic0 cd hogehoge ./a.out |
/opt/intel/mic/bin/micnativeloadex 実行ファイル名 -a "arguments" -e "環境変数=設定値" 例) /opt/intel/mic/bin/micnativeloadex a.out -a "100" -e "OMP_NUM_THREADS=118" |
コンパイルオプション
以下のサイトにてMIC用のコンパイルオプションが設定可能。MKL併用時の細かい設定も分かるので便利。http://software.intel.com/en-us/articles/intel-mkl-link-line-advisor
Native実行用のバイナリを作りたい時は、これに加えて上述した"-Wl,-rpath=$SINK_LD_LIBRARY_PATH"を加えておきましょう。
MKLをオフロード実行(AO,CAO共に)する際には、MIC用のbinaryにおいてMKLをstaticリンクしないとオフロード開始時に異常に遅くなる。(というメモを過去の自分が残している。。。)
MKLの速度
BLASやLAPACKはMKLの物を利用することになります。 BLASのGEMMはそれなりに速い。LAPACK関数はCPUに劣るものが多い。 それで、自分の作ったコードでMKLの速度がちゃんと出ているか自身が無い場合。特にOffloadモードやAutomatic Offloadモードのコードを書いた場合は、通信時間や、自分のコードがうまくoffloadさせれていないのではないかと疑うことがあると思います。 そこで、MIC上での純粋なMKLの速度が知りたい。 そんなときは、OffloadモードやAutomatic OffloadモードのコードをそのままNativeモード様にコンパイルして、Native実行させて速度を測ります。そうすることで、KMLの実行に掛かる純粋な時間が分かります。 コンパイルオプションは上述のNativeモード用のコンパイルオプションで"-mic -no-offload"を指定すれば、Offload用のpragma記述は無視されます。あとは、上述のNative実行でopenmpスレッド数を最大にしてジョブ投入しましょう。さて、一応ベンチ結果を載せます。 固有値解法のDSYEVDとDSYEVXを試しました。 1000×1000の行列の固有値計算に掛かる時間は以下の通りでした。
マシン | DSYEVX | DSYEVD |
---|---|---|
CPU(Xeon E5-1650) 6 threads | 0.209320 s | 0.122166 s |
MIC(Xeon Phi 5110P) 6 threads | 3.942864 s | 2.234464 s |
MIC(Xeon Phi 5110P) 16 threads | 2.355370 s | 1.711156 s |
MIC(Xeon Phi 5110P) 59 threads | 2.404357 s | 1.877957 s |
MIC(Xeon Phi 5110P) 118 threads | 2.943226 s | 2.378416 s |
MIC(Xeon Phi 5110P) 236 threads | 3.942864 s | 3.028085 s |