版本:v5.4_code_ds_bar
研发单位:国家海洋环境预报中心(NMEFC)
用途:台风路径/强度预报、风暴潮预警、海浪预测、海洋温度/盐度/流场模拟
技术栈:WRF 扩展 + MPI 并行 + CUDA 加速 + NetCDF I/O
“妈祖”是中国自主研发的高性能海洋数值预报系统,基于 WRF 模型扩展,支持:
- ✅ 多尺度海洋模拟(全球 → 区域 → 近岸)
- ✅ 台风路径与强度精准预报
- ✅ 风暴潮与海浪联合预警
- ✅ GPU 加速(NVIDIA Hopper 架构)
- ✅ MPI 并行计算(支持数千核)
#!/bin/bash
set -e
PREFIX=/data/run01/dev260307/install
export PATH=${PREFIX}/bin:$PATH
export LIBRARY_PATH=${PREFIX}/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
export CPATH=${PREFIX}/include:$CPATH
# zlib
cd /data/run01/soft/zlib-1.2.11
rm -f ${PREFIX}/lib/libz.a ${PREFIX}/lib/libz.so* ${PREFIX}/lib/pkgconfig/zlib.pc
rm -f ${PREFIX}/include/zlib.h ${PREFIX}/include/zconf.h
rm -f ${PREFIX}/share/man/man3/zlib.3
module purge
CFLAGS="-fPIC -O2" ./configure --prefix=${PREFIX}
make clean && make -j8 && make install
echo "INFO: zlib built"
# HDF5
module load nvhpc/25.11-hpcx-cuda12
cd /data/run01/soft/hdf5-1.14.3
./configure --enable-parallel --with-zlib=${PREFIX} --prefix=${PREFIX} CC=mpicc
make clean && make -j8 && make install
echo "INFO: hdf5 built"
# NetCDF-C
cd /data/run01/soft/netcdf-c-4.9.3-rc2
export CPPFLAGS="-I${PREFIX}/include"
export LDFLAGS="-L${PREFIX}/lib"
if [ -f Makefile ]; then
make distclean
autoreconf -i --force
fi
./configure --prefix=${PREFIX} --disable-libxml2 --disable-dap --enable-static CC=mpicc
make clean && make -j8 && make install
echo "INFO: NETCDF-C built"
# NetCDF-Fortran
cd /data/run01/soft/netcdf-fortran-4.6.2
export CPPFLAGS="-I${PREFIX}/include"
export LDFLAGS="-L${PREFIX}/lib -Wl,-rpath,${PREFIX}/lib"
export LIBS="$(${PREFIX}/bin/nc-config --libs)"
export FCFLAGS="-fPIC"
export FFLAGS="-fPIC"
if [ -f Makefile ]; then
make distclean
autoreconf -i --force
fi
./configure --prefix=${PREFIX} --disable-libxml2 --disable-dap --enable-static CC=mpicc FC=mpif90
make clean && make -j8 && make install
nc-config --features- 确保已安装
nvhpc编译器 - 设置
PREFIX路径 - 依次编译
zlib→HDF5→NetCDF-C→NetCDF-Fortran - 所有库安装在
${PREFIX}目录下
#!/bin/bash
module load nvhpc/25.11-hpcx-cuda12
PREFIX=/data/run01/dev260307/install
export PATH=${PREFIX}/bin:$PATH
export LIBRARY_PATH=${PREFIX}/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
export CPATH=${PREFIX}/include:$CPATH
export NVCOMPILER_ACC_DEVICE=tesla:cc90
export NVCOMPILER_ACC_ARCH=sm_90
cd /data/run01/v5.4_code_ds_bar
make clean
make- 加载
nvhpc模块 - 设置环境变量(
PREFIX,NVCOMPILER_*) - 进入源码目录
- 执行
make clean && make
⚠️ 注意:
NVCOMPILER_ACC_DEVICE=tesla:cc90表示使用 Tesla 架构,计算能力 9.0(Hopper)NVCOMPILER_ACC_ARCH=sm_90表示生成代码的目标架构为 SM_90
#!/bin/bash
#SBATCH -J whw
#SBATCH --gpus=6
#SBATCH -p gpu_a800
export HDF5_USE_FILE_LOCKING=FALSE
export NC_ENABLE_NETCDF4=1
export OMPI_MCA_io=ompio
export MPI_UNBUFFERED_STDIO=1
work_dir=`pwd`
cd ../MaCOM
module purge
module load nvhpc/25.11-hpcx-cuda12
PREFIX=/data/run01/dev260307/install
export PATH=${PREFIX}/bin:$PATH
export LIBRARY_PATH=${PREFIX}/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
export CPATH=${PREFIX}/include:$CPATH
cp /data/run01/v5.4_code_ds_bar/macom.exe .
mpirun --bind-to none -np 6 ./macom.exe 2- 提交 SLURM 作业
sbatch run_mazu.slurm
- 请求资源:
- 6 个 GPU(
--gpus=6) - 使用
gpu_a800分区
- 6 个 GPU(
- 设置环境变量:
HDF5_USE_FILE_LOCKING=FALSE:禁用 HDF5 文件锁,提高并行 I/O 性能NC_ENABLE_NETCDF4=1:启用 NetCDF-4 支持OMPI_MCA_io=ompio:使用 OMPIO 作为 MPI I/O 后端MPI_UNBUFFERED_STDIO=1:禁用 MPI 标准输出缓冲
- 复制可执行文件:
cp /data/run01/v5.4_code_ds_bar/macom.exe . - 启动 MPI 任务:
mpirun --bind-to none -np 6 ./macom.exe 2
⚠️ 注意:
--bind-to none:不绑定到特定 CPU,避免资源争抢-np 6:启动 6 个 MPI 进程2:可能是“妈祖”的输入参数(如模式编号、时间步长等)
| 变量 | 作用 |
|---|---|
PREFIX |
依赖库安装路径 |
NVCOMPILER_ACC_DEVICE=tesla:cc90 |
指定 GPU 架构为 Tesla,计算能力 9.0 |
NVCOMPILER_ACC_ARCH=sm_90 |
指定生成代码的目标架构为 SM_90 |
HDF5_USE_FILE_LOCKING=FALSE |
禁用 HDF5 文件锁,提高并行 I/O 性能 |
NC_ENABLE_NETCDF4=1 |
启用 NetCDF-4 支持 |
OMPI_MCA_io=ompio |
使用 OMPIO 作为 MPI I/O 后端 |
MPI_UNBUFFERED_STDIO=1 |
禁用 MPI 标准输出缓冲,避免日志延迟 |
- 检查依赖库是否已正确安装
- 确保加载了正确的
nvhpc模块 - 检查环境变量是否设置正确
- 检查 GPU 资源是否充足
- 确保
macom.exe已正确编译 - 检查输入文件是否存在
- 设置
MPI_UNBUFFERED_STDIO=1 - 使用
sacct查看作业状态
| 操作 | 命令 |
|---|---|
| 编译依赖库 | ./build_dependencies.sh |
| 编译“妈祖” | ./build_mazu.sh |
| 提交作业 | sbatch run_mazu.slurm |
| 查看作业状态 | squeue -u $USER |
| 查看日志 | cat slurm-*.out |
“妈祖”是一个功能强大的海洋数值预报系统,适用于台风、风暴潮、海浪等海洋灾害预警。通过正确编译依赖库、配置环境变量、提交 SLURM 作业,你可以在 GPU 集群上高效