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

GNU gcc(4.9以上)でも作れるようだが、市販品の インテルコンパイラーならもっと早く演算するバイナリーを作れるとの事。
ここでは intel コンパイラー の「インテル(R) Parallel Studio XE 2019 Update 4 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

準備

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

    インテル(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

以前Relion/icc/191110は openmpi をインテルコンパイラーでコンパイルして、そのmpiccでrelionをコンパイルしていました。
今回は intel謹製の mpi で整備します。

コンパイル

インストール先を「/apps/relion-3.0.8.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.0.8 refs/tags/3.0.8
[root@c relion]# git branch
  master
* v3.0.8
 
[root@c relion]# 
[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.0.8.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.0.8のicc版のModulefileにそのModulefile を入れます。

#%Module1.0
#%Module1.0
conflict eman2
module load icc    # ここら辺に組み込む
 
set RELION /apps/relion-3.0.8
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.13/bin/ctffind
setenv RELION_MOTIONCOR2_EXECUTABLE  /apps/MotionCor2/MotionCor2_1.3.0-Cuda101
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.0.8.icc」の実行とともにicc環境も用意される

メモ

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

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

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


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-03-21 (土) 05:13:21 (74d)