计算节点 cn-long、cn-short 任务提交
快速命令见章节 快速作业命令
案例在 ~/example
cn-long 与 cn-short 分区说明
cn-long 分区
- 适合 大量单核或少核任务(如参数扫描、批量分子对接、轻量计算任务)
- 特点:任务时间较长,资源按单核分配,强调 多任务并行提交
- 常见用法:同时提交多个小作业,每个作业占用 1–4 核心
cn-short 分区
- 适合 多节点并行计算任务(如大规模分子动力学模拟、并行数值计算)
- 特点:作业时长限制较短,但支持跨节点并行,适合快速跑大规模任务
- 常见用法:通过
-N
或--ntasks-per-node
跨节点提交,运行数十到上百核并行作业
cn-long 串行任务
基础脚本
以下示例展示如何在 cn-long
分区 提交一个 单节点、单核串行任务。假设用户登录账号为 skl_lcy
基础脚本为~/example/job-cnlong-c.srp
bash
#!/bin/bash
#SBATCH -J sle135926 # 作业名称
#SBATCH -p cn-long # 分区
#SBATCH -N 1 # 节点数
#SBATCH -o sle135926_%j.out # 标准输出文件(%j为JobID)
#SBATCH -e sle135926_%j.err # 标准错误文件
#SBATCH --no-requeue # 中断后不自动重排
#SBATCH -A skl_g1 # 账号(组名_g1)
#SBATCH --qos=sklcnl # QOS(组名+分区缩写)
#SBATCH -c 1 # CPU核心数(单核串行任务)
srun sleep 11 # 运行命令(示例)
参数说明
账号与QOS规则:
- 登录名若为
skl_lcy
→ 账号:skl_g1
,QOS:sklcnl
- 登录名若为
pku_hsc
→ 账号:pku_g1
,QOS:pkucnl
只需根据用户名替换 -A
和 --qos
即可
修改脚本:串行任务附加信息
bash
#!/bin/bash
#SBATCH -J sle135926
#SBATCH -p cn-long
#SBATCH -N 1
#SBATCH -o sle135926_%j.out
#SBATCH -e sle135926_%j.err
#SBATCH --no-requeue
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH -c 1
# 运行命令(示例)
srun sleep 11
# 运行环境信息
pwd
date
hostname
cn-long 并行任务:Intel 编译与单节点提交
1. 进入测试目录
bash
cd ~/lustre1/test
2. 创建源码文件 mpi_test.c
c
#include "mpi.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int rank, size;
char filename[256], hostname[128];
FILE *fp;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
gethostname(hostname, sizeof(hostname));
// 每个 rank 输出单独文件 rank-XX.txt
sprintf(filename, "rank-%d.txt", rank);
fp = fopen(filename, "w");
if (fp != NULL) {
fprintf(fp, "Hostname: %s\n", hostname);
fprintf(fp, "Rank: %d out of %d processes\n", rank, size);
fclose(fp);
}
// rank=0 输出汇总说明
if (rank == 0) {
fp = fopen("summary.txt", "w");
if (fp != NULL) {
fprintf(fp, "MPI test run with %d processes.\n", size);
fprintf(fp, "Each process writes rank-XX.txt in this directory.\n");
fclose(fp);
}
}
MPI_Finalize();
return 0;
}
3. 编译程序
加载 Intel 环境并编译:
bash
source /appsnew/source/intel2025.sh
mpicxx -o mpi_test mpi_test.c
4. 提交脚本示例
在 ~/lustre1/test/
下创建 job-cnlong-n.srp
:
bash
#!/bin/bash
#SBATCH -J sle135926 # 作业名称
#SBATCH -p cn-long # 分区
#SBATCH -N 1 # 节点数
#SBATCH -o sle135926_%j.out # 标准输出
#SBATCH -e sle135926_%j.err # 标准错误
#SBATCH --no-requeue # 不自动重排
#SBATCH -A skl_g1 # 账号
#SBATCH --qos=sklcnl # 不自动重排
#SBATCH -n 64 # 总任务数 (ntasks)
# 加载 Intel MPI 环境
source /appsnew/source/intel2025.sh
# 运行 MPI 程序(从 example 目录调用)
mpirun -n $SLURM_NTASKS ./mpi_test
提交作业:
bash
sbatch job-cnlong-n.srp
5. 查看结果
作业完成后,在 ~/lustre1/test/
下会生成:
bash
job-cnlong-n.srp rank-13.txt rank-1.txt rank-26.txt rank-32.txt rank-39.txt rank-45.txt rank-51.txt rank-58.txt rank-6.txt
mpi_test rank-14.txt rank-20.txt rank-27.txt rank-33.txt rank-3.txt rank-46.txt rank-52.txt rank-59.txt rank-7.txt
mpi_test.c rank-15.txt rank-21.txt rank-28.txt rank-34.txt rank-40.txt rank-47.txt rank-53.txt rank-5.txt rank-8.txt
rank-0.txt rank-16.txt rank-22.txt rank-29.txt rank-35.txt rank-41.txt rank-48.txt rank-54.txt rank-60.txt rank-9.txt
rank-10.txt rank-17.txt rank-23.txt rank-2.txt rank-36.txt rank-42.txt rank-49.txt rank-55.txt rank-61.txt sle135926_64722.err
rank-11.txt rank-18.txt rank-24.txt rank-30.txt rank-37.txt rank-43.txt rank-4.txt rank-56.txt rank-62.txt sle135926_64722.out
rank-12.txt rank-19.txt rank-25.txt rank-31.txt rank-38.txt rank-44.txt rank-50.txt rank-57.txt rank-63.txt summary.txt
示例:rank-42.txt
bash
Hostname: c03b01n02
Rank: 42 out of 64 processes
示例:summary.txt
bash
MPI test run with 64 processes.
Each process writes rank-XX.txt in this directory.
cn-long 并行任务:OpenMPI 编译与单节点提交
1. 配置环境
在运行前先加载 OpenMPI 环境:
bash
cd ~/lustre1/test
source /appsnew/source/openmpi-5.0.8.sh
确认 OpenMPI 路径正确:
bash
[skl_lcy@login01 test]$ which mpicxx
/appsnew/opt/openmpi/openmpi-5.0.8/bin/mpicxx
2. 编译程序
假设源码 mpi_test.c
(配置同上)已经在 ~/lustre1/test
,直接编译:
bash
mpicxx -o mpi_test mpi_test.c
编译后得到可执行文件 mpi_test
。
3. 提交脚本
在 ~/lustre1/test/
创建 job-cnlong-n.srp
:
bash
#!/bin/bash
#SBATCH -J mpitest
#SBATCH -p cn-long
#SBATCH -N 1
#SBATCH -n 64
#SBATCH -o mpitest_%j.out
#SBATCH -e mpitest_%j.err
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH --no-requeue
# 加载 OpenMPI 环境
source /appsnew/source/openmpi-5.0.8.sh
# 在当前目录运行 OpenMPI 程序
mpirun -np $SLURM_NTASKS ./mpi_test
提交作业:
bash
sbatch job-cnlong-n.srp
4. 查看结果
运行完成后,在 ~/lustre1/test/
下会生成:
bash
job-cnlong-n.srp rank-11.txt rank-18.txt rank-24.txt rank-30.txt rank-37.txt rank-43.txt rank-4.txt rank-56.txt rank-62.txt
mpi_test rank-12.txt rank-19.txt rank-25.txt rank-31.txt rank-38.txt rank-44.txt rank-50.txt rank-57.txt rank-63.txt
mpitest_64725.err rank-13.txt rank-1.txt rank-26.txt rank-32.txt rank-39.txt rank-45.txt rank-51.txt rank-58.txt rank-6.txt
mpitest_64725.out rank-14.txt rank-20.txt rank-27.txt rank-33.txt rank-3.txt rank-46.txt rank-52.txt rank-59.txt rank-7.txt
mpi_test.c rank-15.txt rank-21.txt rank-28.txt rank-34.txt rank-40.txt rank-47.txt rank-53.txt rank-5.txt rank-8.txt
rank-0.txt rank-16.txt rank-22.txt rank-29.txt rank-35.txt rank-41.txt rank-48.txt rank-54.txt rank-60.txt rank-9.txt
rank-10.txt rank-17.txt rank-23.txt rank-2.txt rank-36.txt rank-42.txt rank-49.txt rank-55.txt rank-61.txt summary.txt
内容与 Intel 版本相同,只是编译/运行环境换成了 OpenMPI。
- Intel MPI 与 OpenMPI 区别只在于:
- 加载的环境脚本不同 (
intel2025.sh
vsopenmpi-5.0.8.sh
) - 编译器、运行命令路径不同(但参数用法一致)
- 加载的环境脚本不同 (
- 其他流程(源码、编译、提交、结果查看)完全一样。
cn-long 跨节点提交
1. 使用 -n
参考脚本 cat job-cnlong-more-n.srp
bash
#!/bin/bash
#SBATCH -J mpitest
#SBATCH -p cn-long
#SBATCH -N 2 # 节点数
#SBATCH -n 128 # 总任务数
#SBATCH -o mpitest_%j.out
#SBATCH -e mpitest_%j.err
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH --no-requeue
# 加载 MPI 环境
source /appsnew/source/intel2025.sh
# 运行程序(此时 $SLURM_NTASKS=128)
mpirun -n $SLURM_NTASKS ./mpi_test
说明:
-N 2
表示使用 2 个节点-n 128
表示总共运行 128 个 MPI 进程(自动在 2 个节点间分配,每节点 64 个进程)
2. 使用 --ntasks-per-node
参考脚本 job-cnlong-more2-n.srp
bash
#!/bin/bash
#SBATCH -J mpitest
#SBATCH -p cn-long
#SBATCH -N 2 # 节点数
#SBATCH --ntasks-per-node=64 # 每节点进程数
#SBATCH -o mpitest_%j.out
#SBATCH -e mpitest_%j.err
#SBATCH -A skl_g1
#SBATCH --qos=sklcnl
#SBATCH --no-requeue
# 加载 MPI 环境
source /appsnew/source/intel2025.sh
# 运行程序(此时 $SLURM_NTASKS=128)
mpirun -n $SLURM_NTASKS ./mpi_test
说明:
--ntasks-per-node=64
表示每个节点启动 64 个 MPI 进程-N 2
→ 总进程数 = 2 × 64 = 128- 注意:
--ntasks-per-node
不能大于单节点最大核心数,否则任务会调度失败。
对比:
- 两种写法效果一致:
-n
直接指定总任务数,--ntasks-per-node
指定每节点任务数。 $SLURM_NTASKS
会自动等于总进程数,脚本里统一用它调用mpirun
,保证通用性。- 推荐在实际科研任务中用 脚本 2,更直观地控制单节点进程数。
cn-short 分区任务脚本与提交
在不同分区提交作业时,脚本内容大体一致,只需要根据分区调整 -p
、账号 -A
、QOS
参数即可。
下面给出 job-cnshort-c.srp
脚本的示例
bash
#!/bin/bash
#SBATCH -J sle135926
#SBATCH -p cn-short
#SBATCH -N 1
#SBATCH -o sle135926_%j.out
#SBATCH -e sle135926_%j.err
#SBATCH --no-requeue
#SBATCH -A skl_g1
#SBATCH --qos=sklcns
#SBATCH -c 1
srun sleep 11
脚本逻辑完全相同,仅需修改:
-p
分区名:cn-long
→cn-short
--qos
:sklcnl
→sklcns
- 其余参数(作业名、节点数、核心数等)保持不变。