说明:
- 文章采用源码编译方法,主要是为了在大规模HPC集群上能够实现跨节点使用,以大幅提升计算效率。
- NAMD官方提供了各种预编译的二进制版本,如果你的系统不涉及跨节点的多核并行,那可以直接下载相应二进制版本使用,该文章对你的帮助或许不大。
参考:https://nscc.mrzhenggang.com/how-to-compile-namd-on-arm-platform/
一、编译环境
module purge
module load GCC/11.1.0
module load mpich/4.1.2-ch4-gcc11.1.0
二、源码包下载
下载地址:http://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=NAMD
wget https://www.ks.uiuc.edu/Research/namd/2.14/download/946183/NAMD_2.14_Source.tar.gz
tar zxf NAMD_2.14_Source.tar.gz
cd NAMD_2.14_Source/
三、charm安装
说明:在安装namd-2.14
时使用charm-6.10.2
能够编译,但是在测试算例时报错段错误,经过测试,可使用namd-2.12
中的charm-6.7.1
进行编译,后续算例运行成功。
1. charm-6.10.2(报段错误,弃用)
新建mpi-linux-aarch64
架构配置文件:
CHARMARCH=mpi-linux-aarch64
tar xf charm-6.10.2.tar
cd charm-6.10.2/src/arch
mkdir $CHARMARCH
cp mpi-linux/conv-mach.* $CHARMARCH
sed -i "s/i386-gcc/generic64-light/" $CHARMARCH/conv-mach.sh
sed -i "/#endif/i #define CMK_64BIT 1" $CHARMARCH/conv-mach.h
cd ../..
# 指定arrch64的汇编文件
sed -i 's/arm8/arm8\\|aarch64/g' build
./build charm++ $CHARMARCH --with-production -j16
cd mpi-linux-aarch64/tests/charm++/megatest/
make pgm -j16
# 测试报段错误
srun -p vp -n 16 ./pgm
cd ../../../../..
2. charm-6.7.1
# 使用namd-2.12的charm
## 将namd-2.12中的charm-6.7.1.tar拷到namd-2.14中编译
cp ../NAMD_2.12_Source/charm-6.7.1.tar ./
CHARMARCH=mpi-linux-aarch64
tar xf charm-6.7.1.tar
cd charm-6.7.1/src/arch
mkdir $CHARMARCH
cp mpi-linux/conv-mach.* $CHARMARCH
sed -i "s/i386-gcc/generic64-light/" $CHARMARCH/conv-mach.sh
sed -i "/#endif/i #define CMK_64BIT 1" $CHARMARCH/conv-mach.h
cd ../..
./build charm++ $CHARMARCH --with-production -j16
cd mpi-linux-aarch64/tests/charm++/megatest/
make pgm -j16
# 测试通过
srun -p vp -n 16 ./pgm
cd ../../../../..
四、配置fftw和tcl
在下载地址下载架构对应版本的fftw
和tcl
,arm64
架构可点击下面链接直接下载。
# fftw和tcl-pthreads源码包下载到NAMD_2.14_Source目录
#tar xzf fftw-linux-arm64.tar.gz
#mv fftw-linux-arm64 fftw
tar xzf tcl8.5.9-linux-arm64-threaded.tar.gz
mv tcl8.5.9-linux-arm64-threaded tcl
# 修改ARCH变量
sed -i "s/multicore-arm7/mpi-linux-aarch64/" arch/Linux-ARM64-g++.arch
# 使用系统上的fftw
sed -i '2s|.*|FFTDIR=/thfs4/software/fftw/3.3.7-gcc11.1.0-sve|' arch/Linux-ARM64.fftw
sed -i '4s/-lsrfftw -lsfftw/-lfftw3f/' arch/Linux-ARM64.fftw
sed -i '5s/$/ -DNAMD_FFTW_3/' arch/Linux-ARM64.fftw
-
(可选)指定
fftw
和tcl
路径charm-6.10.2
当fftw
和tcl
在namd
主目录下时非必须,否则指定绝对路径。charm-6.7.1
必须修改。sed -i '5s|.*|CHARMBASE = .rootdir/charm-6.7.1|' Make.charm sed -i '2s|.*|FFTDIR=.rootdir/fftw|' arch/Linux-ARM64.fftw sed -i '3s|.*|TCLDIR=.rootdir/tcl|' arch/Linux-ARM64.tcl
五、编译NAMD
./config Linux-ARM64-g++ --charm-arch mpi-linux-aarch64 --with-fftw --with-tcl
time make -j16 -C Linux-ARM64-g++ >& log
六、测试
module purge
module load GCC/11.1.0
module load mpich/4.1.2-ch4-gcc11.1.0
export PATH=$HOME/software/NAMD_2.14_Source/Linux-ARM64-g++:$PATH
srun -p vp -N 1 -n 56 namd2