Relion3からCPUの拡張命令(AVX2/AVX512)を活用したCPU-acceleration版が作れる。

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


注意
GPUカードを使わないバイナリが用意されます。CPUのみで計算します。ですがGPUで計算できるジョブはGPUで計算したほうが早いです。

ならなんで用意するの?となりますが、もともとGPUを使わない計算ジョブが早くなるので。

使えるのはどのCPU?

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

表にするとこんな感じ

マイクロ
アーキテクチャ
HaswellSkylakeSunny Cove
世代Haswell
第4世代Core
Broadwell
第5世代Core
Skylake
第6世代Core
Kaby Lake
第7世代Core
Coffee Lake
第8世代Core
Coffee Lake Refresh
第9世代Core
Cascade LakeIce Lake
第10世代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 Ei9
i7
i5
i3
i9x(109xx)
Xeon W-2200
Xeon W-3200
i9
i7
i5
i3
AVX2
AVX512xxxxxxxxxxxx

準備

インテルコンパイラーの導入方法は省略
インストール項目は

    インテル(R) C++ コンパイラー 19.0 Update 4
        インテル(R) C++ コンパイラー
 
    インテル(R) Fortran コンパイラー 19.0 Update 4
        インテル(R) Fortran コンパイラー
 
    インテル(R) MKL 2019 Update 4 (C/C++)
        インテル(R) MKL コア・ライブラリー (C/C++)
        クラスターサポート (C/C++)
        インテル(R) TBB スレッド化サポート
        GNU* C/C++ コンパイラー・サポート
 
    インテル(R) TBB 2019 Update 6
        インテル(R) TBB
 
    インテル(R) MPI ライブラリー 2019 Update 4
        インテル(R) MPI ライブラリー、インテル(R) 64

コンパイル

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

[root@c ~]# cd /apps/src
 
[root@c src]# git clone https://github.com/3dem/relion
[root@c src]# cd relion
[root@c relion]# git checkout -b v3.1 remotes/origin/ver3.1
[root@c relion]# git branch
  master
* v3.1
 
(インテルコンパイル環境を準備)
[root@c relion]# source /opt/intel/compilers_and_libraries/linux/bin/compilervars.sh intel64
[root@c relion]#
 
[root@c relion]# mkdir b && cd b
 
[root@c b]# CC=mpiicc CXX=mpiicpc cmake -DCUDA=OFF -DCudaTexture=OFF -DALTCPU=ON -DMKLFFT=ON \
            -DGUI=ON -DCMAKE_C_FLAGS="-O3 -ip -xCORE-AVX2 -restrict "  \
            -DCMAKE_INSTALL_PREFIX=/apps/relion-3.1.0.icc ..
 
(Sandy Bridge,Ivy BridgeなCPUに対応するには)
「-xCORE-AVX2」を「-xAVX」とする
 
[root@c b]# make ; make install

AVXはSandy Bridgeから利用可能
AVX2はHaswellから利用可能

実行1

予めiccの実行環境を構築します。
単純には下記のようにintel cc側で提供されているスクリプトを実行します。

source /opt/intel/compilers_and_libraries/linux/bin/compilervars.sh intel64

その後に

relion

を実行します。そうしないとインテルさんのライブラリが読めないので起動しません。

実行2

あるいはEnvironmentModules/sampleに示したように icc 向けの Modulefile を用意します。
「relion/3.1.0.icc」とかのファイル名で

#%Module1.0
#%Module1.0
conflict eman2
module load icc    # ここら辺に組み込む
 
set RELION /apps/relion-3.1.0
prepend-path PATH            $RELION/bin
 
setenv RELION_QSUB_COMMAND   qsub
setenv RELION_MPIRUN         mpirun
setenv RELION_QSUB_TEMPLATE  $RELION/bin/qsub.sh
setenv RELION_QUEUE_NAME     s3
setenv RELION_QUEUE_USE      false
 
setenv RELION_CTFFIND_EXECUTABLE     /apps/ctffind-4.1.14/bin/ctffind
setenv RELION_MOTIONCOR2_EXECUTABLE  /apps/MotionCor2/MotionCor2_1.3.2-Cuda102
setenv RELION_GCTF_EXECUTABLE        /apps/Gctf/Gctf-v1.06_sm_30_cu8.0_x86_64
setenv RELION_RESMAP_EXECUTABLE      /apps/ResMap/ResMap-1.1.4-linux64
setenv RELION_PDFVIEWER_EXECUTABLE   evince
setenv RELION_UNBLUR_EXECUTABLE      /apps/unblur_1.0.2/bin/unblur_openmp_7_17_15.exe
setenv RELION_SUMMOVIE_EXECUTABLE    /apps/summovie_1.0.2/bin/sum_movie_openmp_7_17_15.exe

そうすると「module load relion/3.1.0.icc」の実行とともにicc環境も用意される

メモ

GPUによるAccelerationとCPU(AVX2,AVX512)によるそれを比べるとGPUを搭載したほうがパフォーマンスはでる。
ただGPUによるAccelerationは目下Class2D,Class3D,refineら限定される。

解析のほとんどはこれに時間を要しているためGPUの恩恵は高い。

Class2D,Class3D,refine以外の処理にこのicc版relionを使うと効率がいいのか若干上向く

iccでcudaを利用できるバイナリを作ってみる

大抵は GCC を使ってcudaを利用できるバイナリを作りますRelion/GPU
ここでは、GPU-accelerationを icc で作ってみます。 単にチャレンジ?

CC=mpiicc CXX=mpiicpc cmake -DCUDA=ON -DCudaTexture=ON -DALTCPU=OFF -DMKLFFT=ON \
 -DGUI=ON -DCMAKE_INSTALL_PREFIX=/Appl/relion-3.1.0.cuda.icc  ..
make
make install

これで一応は作れるけど、、、GPUを使用するジョブはGCCでコンパイルしたバイナリが早いね。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-08-24 (月) 17:06:04 (98d)