跳转至

按应用匹配 MPI、OpenMP 与 GPU

读者:集群用户 · 核对日期:2026-10-04

版本与教学范围

以已安装版本和本地规范为准。先查看 sinfo --version;上游文档在核对时标注为 26.05。路径、分区、账户、模块、内存、MPI、GPU 和服务名称均依站点而定。以 ./ 开头的示例程序必须事先存在。这里只提供教学示例,不是已验证的部署配方,也不表示任何集群已被修改。

调度器负责预留资源,程序本身必须知道如何使用资源。以下模板要求实际程序已经存在,并有兼容的软件环境。分区和账户依站点而定,因此示例不硬编码它们。

OpenMP:单节点一个进程、八个线程

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=8
#SBATCH --mem=16G
#SBATCH --time=00:30:00
set -euo pipefail
export OMP_NUM_THREADS="$SLURM_CPUS_PER_TASK"
export OMP_PLACES=cores
export OMP_PROC_BIND=close
srun --cpu-bind=cores ./threaded_solver input.dat

程序必须支持 OpenMP;应用自己的线程选项及多线程 BLAS 库可能需要单独设置。绑定效果依赖 CPU 分配和运行库,应测试 close 与 spread,而不是假定某一种最快。申请八个 CPU 不保证在所有站点都得到八个物理核心。

MPI:两个节点、八个进程

#!/bin/bash
#SBATCH --nodes=2
#SBATCH --ntasks=8
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=1
#SBATCH --mem=8G
#SBATCH --time=00:30:00
set -euo pipefail
export OMP_NUM_THREADS=1
# Load the site's matching compiler/MPI/application environment first.
mpirun ./mpi_solver input.dat

每节点四个进程、每进程一个 CPU。这里采用已与 Slurm 集成的 Open MPI,其当前官方指南建议在分配资源内使用 mpirun。只有本站 Slurm PMIx 插件与应用 MPI 环境兼容时,才可改用 srun --mpi=pmix ./mpi_solver input.dat。可先查看 srun --mpi=list,但列出插件并不能证明应用整体兼容。不要默认嵌套 srun mpirun,也不要在编译和运行阶段混用不同 MPI 实现。Open MPI 5 及以后版本不支持 PMI-2 直接启动。

GPU:一个 GPU、四个主机 CPU

#!/bin/bash
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=4
#SBATCH --gres=gpu:1
#SBATCH --mem=16G
#SBATCH --time=00:20:00
set -euo pipefail
# NVIDIA-specific diagnostic, only on an appropriate GPU node:
srun nvidia-smi
srun ./gpu_solver input.dat

示例申请 16G 主机内存。GPU 的 GRES 类型、分区、绑定和驱动都由本站决定。--mem 表示主机 RAM,不是 GPU 显存。不要覆盖 Slurm 设置的设备可见性以访问未分配 GPU。能看到 GPU 或成功运行 nvidia-smi,并不证明应用正在有效利用 GPU。应检查数值结果,并用代表性输入测量性能。

软件专用的启动要求

对于量子化学软件,应遵守该软件版本的启动要求:有的程序自行启动工作进程,有的依赖特定 MPI,有的仅支持单节点线程并行。不能将这些通用模板当作某个商业软件的官方启动脚本。

官方资料

上一讲:提交、检查和停止作业 · 返回学习路线 · 下一讲:可复现的软件环境与 scratch 流程