计算节点 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
hostnamecn-long 并行任务:Intel 编译与单节点提交 
1. 进入测试目录 
bash
cd ~/lustre1/test2. 创建源码文件 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.c4. 提交脚本示例 
在 ~/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.srp5. 查看结果 
作业完成后,在 ~/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/mpicxx2. 编译程序 
假设源码 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.srp4. 查看结果 
运行完成后,在 ~/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.shvsopenmpi-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
- 其余参数(作业名、节点数、核心数等)保持不变。