Amber20
ウェブページ
http://ambermd.org/

バージョン
Amber20 + AmberTools20-up3

ビルド環境Intel Parallel Studio 2017 Update8 (MPI only)
GCC 7.3.1 (devtoolset-7)
CUDA 10.1.243

ビルドに必要なファイル
Amber20.tar.bz2
AmberTools20.tar.bz2(AmberTools20 update.1-3; スクリプト内で取得)

ビルド手順#!/bin/sh
VERSION=20
TOOLSVERSION=20
INSTALL_DIR="/local/apl/lx/amber20-up0"
TARBALL_DIR="/home/users/${USER}/Software/AMBER/20"
PARALLEL=12#---------------------------------------------------------------------module purge
module load intel_parallelstudio/2017update8
module load scl/devtoolset-7
module load cuda/10.1
export AMBERHOME=${INSTALL_DIR}
export CUDA_HOME="/local/apl/lx/cuda-10.1"
export LANG=C
export LC_ALL=C# install directory has to be prepared before running this script
if [ ! -d $AMBERHOME ]; thenecho "Create $AMBERHOME before running this script."
exit 1fi# the install directory must be empty
if [ "$(ls -A $AMBERHOME)" ]; thenecho "Target directory $AMBERHOME not empty"
exit 2
fiulimit -s unlimited# prep files
cd $AMBERHOME
bunzip2 -c ${TARBALL_DIR}/Amber${VERSION}.tar.bz2 | tar xf bunzip2 -c ${TARBALL_DIR}/AmberTools${TOOLSVERSION}.tar.bz2 | tar xf -mv amber${VERSION}_src/* .
rmdir amber${VERSION}_src# install python first. otherwise, update_amber failed to connect ambermd.org./AmberTools/src/configure_python
AMBER_PYTHON=$AMBERHOME/bin/amber.python# apply patches and update AmberTools
echo y | $AMBER_PYTHON ./update_amber --upgrade$AMBER_PYTHON ./update_amber --update
echo "[GPU serial edition (two versions)]"
LANG=C ./configure --no-updates -cuda gnu
make -j${PARALLEL} install && make cleanecho "[GPU parallel edition (two versions)]"
LANG=C ./configure --no-updates -mpi -cuda gnu
make -j${PARALLEL} install && make clean# GPU tests will be done elsewhere# ccgpup cannot access external network, ccfep doesn't have GPGPUs
echo "[CPU serial edition]"
LANG=C ./configure --no-updates gnu
make -j${PARALLEL} install. ${AMBERHOME}/amber.shmake test.serial
make cleanecho "[CPU openmp edition]"
LANG=C ./configure --no-updates -openmp gnu
make -j${PARALLEL} install
make test.openmp
make cleanecho "[CPU parallel edition]"
LANG=C ./configure --no-updates -mpi gnu
make -j${PARALLEL} install
export DO_PARALLEL="mpirun -np 2"
make test.parallelexport DO_PARALLEL="mpirun -np 4"
cd test && make test.parallel.4proc
cd $AMBERHOME
make clean && chmod 700 src

パフォーマンスに関するメモ
GPUP100(jobtype=gpup) では AMBER20-up0(gcc7 + CUDA-10.1) よりも AMBER18-bf16 (gcc4.8 + CUDA-9.1) の方がわずかに速いようです。(2-3 % 程度)
AMBER20-up0 を CUDA-9.1 でビルドすると CUDA-10.1 のバージョンよりも明確に遅くなります
GPU 版については gcc のバージョンの違いで大きく速度が変わるケースはこれまでのところはありません。
公式メーリングリストの情報でも同様の事象が確認されています
対照的に、V100 (jobtype=gpuv) では現時点でも AMBER20-up0 の方が少し速そうです。(5 % 程度)
センターでは確認できていませんが、Turing 世代の GPU では以前のバージョンに比べて 15% 程度の速度低下が報告されています。(公式メーリングリストの情報)

明示的に V100 を使う場合、Amber20 の新機能を使いたい場合だけは、Amber20-up0 を選択するべきかもしれません。
しかし、そうでないのなら、現状(2020/6 時点, Amber20-up0)では Amber18-bf16 を選択すべきかもしれません。
(なお、Amber20 については今後のパッチリリースによってパフォーマンスが大きく向上する可能性があります。)

CPUDHFR 系でテスト
CPU 版の pmemd.MPI については intel の方が明確に速い。intel17 と intel19 の間に明確な差は見出せなかった。
gcc 系ではバージョン 6-8 では大きな違いは見られず。一方で 4.8 は 6-8 より明らかに少し遅い。(5 は未検証)

メモ
MPI+OpenMP バージョンの CPU 版 pmemd についてはスキップ
update_amber の際に system 標準の python を使うとエラーとなる(何かのパッケージが足りない or 古い?)ため、amber のminiconda のものを拝借システム標準の python3 ならば動作
anaconda2-2019Jul の python でも動作する
gcc8 を使うと CUDA 版の GB 計算のテストが失敗する。1 ステップ目の EGB の時点でおかしい。
gcc6, gcc7 では発生せず。2 ステップ目以降のダイナミクスに影響がありそうな気配。
GPU 版の GAMD 計算のテストでエラーが発生するケースがある。(シリアル、並列の両方)
ログに GAMD = ************** のような行が出力されたり、値が不審に 0.0 だったりする
これまでに把握できた限りでは、gcc のバージョンには依存しない模様
確実に発生するわけでは無い。起こらない場合もありそう。また、ダイナミクスには影響無いようで、他のエネルギー等は正常に見える
cpu 側と gpu 側の出力用バッファの同期が甘い？もしくは reduction の処理に問題がある？良くわからない。
インテルコンパイラー(17u8, 19u5 で検証)では test/dhfr の bussi のテスト(ntt=11; Bussi thermostat)で数値エラーが出る。
2 ステップでの運動エネルギーの値が明確にずれる。
熱浴の挙動が純粋におかしい可能性があるため、intel コンパイラは回避することにした。
gcc7+mkl17 と intel17(+mkl)+gcc7 では追加で nab のテストで失敗する。数値エラー。(intel17 の mkl の影響? gcc +intel19 の mkl では未検証)
intel19(+mkl)+gcc8 では nab のテストは成功するが、他で一部 Program error 等が見られたため、今回は回避した。
gcc7 で mkl 使わない場合は問題無し。ひとまず mkl は外す。