Intel MIC (Xeon Phi) TIPS

はじめに

Intel MIC(Xeon Phi)を使用する際のコマンドや使用方法に関して、TIPSをまとめます。
このメモ時点での環境。
  1. OS:CentOS6.5
  2. 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
最後の"-Wl,-rpath=$SINK_LD_LIBRARY_PATH"がポイント。これを付加しておかないとネイティブ実行時にライブラリのパスが解決できずに実行できない。 ただし、SINK_LD_LIBRARY_PATHが設定されていない場合は、以下の様にしてホストOS上で環境変数を設定しておきます。
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"
コンパイラのバージョンに合わせて数字は適当に変えてください。 毎回設定するのが面倒なので、.cshrc, .bashrc, もしくは/etc/profile.d/の中にintel.cshやらintel.shやら作って上記の環境変数設定を書き込んでおきましょう。

Nativeモードでの実行

sshでMICにログインしてジョブを投入する方法と、ホスト上からmicnativeloadexコマンドでジョブを投入する方法がある。

1)MICにログインしてジョブを投入する場合 MICへのユーザーの作成やファイル共有ができている物として
ssh mic0
cd hogehoge
./a.out
2)ホスト上からmicnativeloadexコマンドでジョブを投入する場合 この場合は使用コア数を一つ少なくしておくのが望ましい(スレッドなら4つ少なく)。
/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の行列の固有値計算に掛かる時間は以下の通りでした。
マシンDSYEVXDSYEVD
CPU(Xeon E5-1650) 6 threads0.209320 s0.122166 s
MIC(Xeon Phi 5110P) 6 threads3.942864 s2.234464 s
MIC(Xeon Phi 5110P) 16 threads2.355370 s1.711156 s
MIC(Xeon Phi 5110P) 59 threads2.404357 s1.877957 s
MIC(Xeon Phi 5110P) 118 threads2.943226 s2.378416 s
MIC(Xeon Phi 5110P) 236 threads3.942864 s3.028085 s
うん。信じたくない。