如何在Cray XC30及XC30 MPP系统上编译CASTEP 18.1及并行运行版本?
在Cray XC30系统上编译CASTEP 18.1(含并行MPP版本)
我在Cray XC30上折腾过好几次CASTEP 18.1的编译,踩了不少坑,总结出一套稳定的步骤,不管是串行还是并行MPP版本都适用,分享给你:
一、前期准备工作
- 先拿到官方授权的CASTEP 18.1源码包,解压到你的工作目录:
tar zxvf castep-18.1.tar.gz && cd castep-18.1 - 确认Cray XC30的环境模块加载正确:先执行
module list查看已加载模块,确保PrgEnv-cray和libsci在列表里。如果没有,先清空冲突模块再加载基础环境:
Cray的module purge module load PrgEnv-cray libscilibsci已经包含了BLAS、LAPACK和FFTW这些CASTEP依赖的数学库,不用再单独安装。
二、配置编译架构文件
CASTEP的编译依赖arch目录下的架构配置文件,我们可以基于Cray模板修改,或者直接新建适配XC30的配置:
- 进入
arch目录:cd arch - 复制现有Cray配置作为基础(如果没有就直接新建):
cp cray_xc30.mk my_cray_xc30.mk - 编辑
my_cray_xc30.mk,核心配置如下(注释里写了关键说明):
如果要编译串行版本,只需要把# 通信架构:mpi对应并行MPP版本,serial对应串行版本 COMMS_ARCH := mpi # Cray的编译器包装器,自动链接MPI和系统库,省了手动配置路径的麻烦 CC := cc FC := ftn F90 := ftn LD := ftn # 编译优化选项,O3是最高级别优化,DNDEBUG关闭调试信息提升性能 COPTFLAGS := -O3 -DNDEBUG FOPTFLAGS := -O3 -DNDEBUG -ffree-line-length-none LDOPTS := -O3 # 链接Cray科学库,libsci_gnu是兼容GNU环境的版本 LIBBLAS := -lsci_gnu LIBLAPACK := -lsci_gnu LIBFFT := -lfftw3 # 指定模块和目标文件的存放目录 MODULE_DIR := modules OBJECT_DIR := objectsCOMMS_ARCH := mpi改成COMMS_ARCH := serial就行。
三、开始编译
回到CASTEP根目录,执行编译命令:
- 先清理之前的编译残留(如果有的话):
make clean - 并行编译主程序,
-j后面的数字是编译线程数,根据节点CPU核心数调整(XC30一般每个节点16/32核,用-j16效率很高):make -j16 ARCH=my_cray_xc30 - 编译完成后,可执行程序会生成在
bin目录下:并行版本是castep.mpi,串行版本是castep.serial。
四、验证并行运行
找一个CASTEP自带的测试用例(比如test目录下的Si2例子),用Cray的srun命令提交并行任务:
# 假设你已经把Si2的输入文件复制到当前目录 srun -n 16 ./bin/castep.mpi Si2
-n 16指定用16个MPI进程运行。运行结束后查看Si2.castep输出文件,如果最后出现Total time的统计信息,没有报错,就说明编译成功了。
五、常见坑点提醒
- 如果编译时出现链接错误,大概率是模块加载冲突,先执行
module purge再重新加载PrgEnv-cray和libsci试试。 - 确保源码包完整,不要遗漏
src和arch目录下的任何文件,否则会出现找不到模块的错误。 - 如果你的XC30配置了GPU,想要编译GPU加速版本,需要额外加载
cudatoolkit模块,并在架构配置文件中添加GPU相关编译选项,不过CASTEP 18.1对Cray GPU的支持有限,建议先把CPU版本跑通再尝试。
内容的提问来源于stack exchange,提问作者AndyT
相关产品推荐
相关产品推荐

