NAMD 3.0b2 (GPU)

ウェブページ

http://www.ks.uiuc.edu/Research/namd/

バージョン

3.0b2

ビルド環境

  • GCC 11.2.1 (gcc-toolset/11)
  • Intel MKL 2022.2.1
  • CUDA 12.0

ビルドに必要なファイル

ビルド手順

#!/bin/sh

VERSION=3.0b2
CHARM_VERSION=7.0.0
WORKDIR=/gwork/users/${USER}/namd-gnu-cuda
SOURCEDIR=/home/users/${USER}/Software/NAMD/${VERSION}
NAME=NAMD_${VERSION}_Source

TARBALL=${SOURCEDIR}/${NAME}.tar.gz
TARBALL_CHARM=${SOURCEDIR}/charm-${CHARM_VERSION}.tar.gz

LIBURL=http://www.ks.uiuc.edu/Research/namd/libraries
#FFTW=fftw-linux-x86_64
#FFTW_URL=${LIBURL}/${FFTW}.tar.gz
TCL=tcl8.5.9-linux-x86_64
TCL_URL=${LIBURL}/${TCL}.tar.gz
TCL_THREADED=tcl8.5.9-linux-x86_64-threaded
TCL_THREADED_URL=${LIBURL}/${TCL_THREADED}.tar.gz

#TARBALL_FFTW=${SOURCEDIR}/${FFTW}.tar.gz
TARBALL_TCL=${SOURCEDIR}/${TCL}.tar.gz
TARBALL_TCL_THREADED=${SOURCEDIR}/${TCL_THREADED}.tar.gz

PARALLEL=12

#------------------------------------------------------------------
umask 0022

export LANG=""
export LC_ALL=C

module -s purge
module -s load gcc-toolset/11
module -s load mkl/2022.2.1
module -s load cuda/12.0

cd ${WORKDIR}
if [ -d ${NAME} ]; then
  mv ${NAME} namd_erase
  rm -rf namd_erase &
fi

tar zxf ${TARBALL}
cd ${NAME}
tar zxf ${TARBALL_CHARM}
ln -s charm-${CHARM_VERSION} charm

cd charm-${CHARM_VERSION}

export CC=gcc
export CXX=g++
export F90=gfortran
export F77=gfortran

./build charm++ verbs-linux-x86_64 smp gcc \
        --no-build-shared --with-production -j${PARALLEL}
cd ../

tar zxf ${TARBALL_TCL}
mv ${TCL} tcl
tar zxf ${TARBALL_TCL_THREADED}
mv ${TCL_THREADED} tcl-threaded

./config Linux-x86_64-g++ \
         --charm-arch verbs-linux-x86_64-smp-gcc \
         --with-mkl \
         --with-python \
         --with-single-node-cuda
cd Linux-x86_64-g++

make -j${PARALLEL}
make release

(作成されたリリース用の tarball を /apl/namd/3.0b2 以下に展開)

メモ

  • https://www.ks.uiuc.edu/Research/namd/alpha/3.0alpha/ を参照
    • ベータ版では +pmePEs のかわりに +pmepes と書かなければならないように見える
  • 配布されているバイナリ版とほぼ同じ構成だと思われる。(nvcc のバージョンはこちらの方が新しいかもしれない)
  • GPU に全てを投げる場合には CUDASOAintegrate on の指定が必要。minimize 時には使えないので注意。
    • minimize と dynamics は別のインプットで行うよう推奨されている。
    • 一つのインプット中で minimize の後に CUDASOAintegrate on を指定するようなこともできない
    • (訂正: 少なくとも 3.0b1 以降では minimize でも GPU を使えるようです)
  • 実行時の CPU コア数は +p(数字) で指定するが、+p2 の時にはなぜか終了時に以下のようなエラーが出て、正常に終了しない
    • +p1 や +p4 では問題は起きていない(+p1, +p2, +p4 以外では未検証)

FATAL ERROR: CUDA error cudaMemcpyAsync(h_array, d_array, sizeofT*array_len, cudaMemcpyDeviceToHost, stream) in file src/CudaUtils.C, function copy_DtoH_async_T, line 235 on Pe 0 (ccg001 device 0 pci 0:7:0): invalid argument

  • 座標を出力しない場合(restartFreq と dcdFreq を指定していない場合)、最終ステップのエネルギーが表示されない
  • UCX 版は正常に動作しなかったため回避。
    • openpmix や ompipmix は指定していない。シングルノード版ではこれらは未検証。