Relion/icc

Relion3からCPUの拡張命令を活用したCPU-acceleration版が作れるみたい。
拡張命令を活用できるのは relion_refine のみですが、他のプログラム(relion_run_ctffind, relion_run_motioncorrら)も使えます。

GNU gcc(4.9以上)でも作れるようだが、市販品の インテルコンパイラーならもっと早く演算するバイナリーを作れるとの事。
ここでは intel コンパイラー の「インテル Parallel Studio XE 2018 Cluster Edition for Linux」で作ってみた

relionのドキュメントにはintel CPUの拡張命令AVX2とAVX512向けのコンパイル例が掲載されている。
AVX2は、Haswell世代、第4世代Intel Coreプロセッサに装備されている(Pentium, Celeronを除く)
AVX512は、Skylake世代、第6世代Intel CoreプロセッサのCore i9(7900Xとか)から装備されている。

表にするとこんな感じ

世代Haswell
第4世代Core
Broadwell
第5世代Core
Skylake
第6世代Core
Kaby Lake
第7世代Core
Coffee Lake
第8世代Core
Core i7 Extreme
Core i7
Core i5
Core i3
Xeon E3(v3)
E5(v3)
i7
i5
i3
Xeon D
E3(v4)
E5(v4)
i7
i5
i3
i9X(99xx)
i7X(98xx)
i9X(79xx)
i7X(78xx)
Xeon E3(v5)Xeon Bronze
Silver
Gold
Platinum
i7
i5
i3
Xeon E3(v6)i9
i7
i5
i3
Xeon E
AVX2
AVX512xxxxxxxxxx

準備

インテルコンパイラーの導入方法は省略
コンパイル前に環境整備を行う

intel謹製mpiでもいいのだが、他のrelionでopenmpi-1.10.7を使用しているので、インテルコンパイラーベースなopenmpi-1.10.7を用意した

[root@c ~]# bzip2 -cd openmpi-1.10.7.tar.bz2 | tar xf -
[root@c ~]# cd openmpi-1.10.7
[root@c openmpi-1.10.7]# export PATH=/sbin:/bin:/usr/sbin:/usr/bin
[root@c openmpi-1.10.7]# source /opt/intel/bin/compilervars.sh intel64
[root@c openmpi-1.10.7]# CC=icc CXX=icpc F77=ifort FC=ifort ./configure --prefix=/Appl/local/openmpi-1.10.7_intel-18.0.2
[root@c openmpi-1.10.7]# make; make install

コンパイル

インストール先を「/Appl/relion-3.0.icc」とします。

[root@c ~]# cd /Appl/src/
[root@c src]# cp -r relion relion.icc && cd relion.icc
[root@c src]# mkdir b-190227 && cd $_
 
[root@c b-190227]# source /opt/intel/bin/compilervars.sh intel64
[root@c b-190227]# export PATH=/Appl/local/openmpi-1.10.7_intel-18.0.2/bin:$PATH
[root@c b-190227]# export LD_LIBRARY_PATH=/Appl/local/openmpi-1.10.7_intel-18.0.2/lib:$LD_LIBRARY_PATH
 
[root@c b-190227]# CC=mpicc CXX=mpicc cmake -DCUDA=OFF -DCudaTexture=OFF -DALTCPU=ON -DMKLFFT=ON \
-DGUI=ON -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/Appl/relion-3.0.icc ..
 
 :
-- The C compiler identification is Intel 18.0.0.20180210
-- The CXX compiler identification is Intel 18.0.0.20180210
 :
-- ALTCPU enabled - Building CPU-accelerated version of RELION
-- Setting cpu precision to double
-- Setting accelerated code precision to single
-- Using non-cuda compilation....
-- Found TBB: /opt/intel/compilers_and_libraries_2018.2.199/linux/tbb/include (found version "2018.0")
-- TBB_FOUND :        TRUE
-- TBB_INCLUDE_DIRS : /opt/intel/compilers_and_libraries_2018.2.199/linux/tbb/include
-- TBB_VERSION :      2018.0
-- TBB_LIBRARIES :    /opt/intel/compilers_and_libraries_2018.2.199/linux/tbb/lib/intel64/gcc4.7/libtbb.so
 :
[root@c b-190227]# make ; make install

実行

source /opt/intel/bin/compilervars.sh intel64
export PATH=/Appl/relion-3.0.icc/bin:/Appl/local/openmpi-1.10.7_intel-18.0.2/bin:$PATH
export LD_LIBRARY_PATH=/Appl/local/openmpi-1.10.7_intel-18.0.2/lib:$LD_LIBRARY_PATH

と環境を整えて

relion

と実行する。

確かに早くなるが、、GPU版でいいかなあ.
だが、relion謹製MotionCorrはicc版がgcc版より早い。

っで、gpuを使ったrelion_refine(_mpi)の計算はgcc版を使うけど、それ以外はicc版を使うようなqsub.shを作ってみた。

Relion/icc/qsub.sh

メモ

cuda10は、icc2018にも対応している
っで、GPUを使える形でiccでコンパイルしてみた。
結果は確かにgpuを使ってrefineを行ってくれるのだが、、、cuda.gccほど早くは無く、遅い。。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2019-11-10 (日) 04:40:15 (36d)