超算小站 超算小站
首页
  • 注册账号
  • 登录系统
  • 熟悉系统
  • 配置环境
  • 数据管理
  • 作业管理
  • 集群软件环境:

    • 01.编译环境
    • 02.基础库
    • 03.应用软件
    • 04.工具软件
    • 05.常用语言环境
    • 06.使用进阶
  • 入门课程

    • 01.超算历史
    • 02.VPN登录
    • 03.Mobaxterm工具
    • 04.Linux基本命令
    • 05.Module环境变量管理工具
    • 06.Vim文本编辑器使用
    • 07.Slurm作业管理系统
HPC&AI
  • 01.登录问题
  • 02.编译问题
  • 03.作业问题
  • 04.存储和数据问题
  • 05.GPU问题
资料下载
归档
关于我
🚀试用
首页
  • 注册账号
  • 登录系统
  • 熟悉系统
  • 配置环境
  • 数据管理
  • 作业管理
  • 集群软件环境:

    • 01.编译环境
    • 02.基础库
    • 03.应用软件
    • 04.工具软件
    • 05.常用语言环境
    • 06.使用进阶
  • 入门课程

    • 01.超算历史
    • 02.VPN登录
    • 03.Mobaxterm工具
    • 04.Linux基本命令
    • 05.Module环境变量管理工具
    • 06.Vim文本编辑器使用
    • 07.Slurm作业管理系统
HPC&AI
  • 01.登录问题
  • 02.编译问题
  • 03.作业问题
  • 04.存储和数据问题
  • 05.GPU问题
资料下载
归档
关于我
🚀试用
  • 注册账号

  • 登录系统

  • 熟悉系统

  • 配置环境

  • 数据管理

  • 作业管理

    • slurm

    • scripts

      • 串行程序提交说明
      • 多线程程序提交
      • 多线程程序提交
        • 准备工作
          • hello world 程序
          • 编译 hello world 程序
        • 提交作业
        • 运行结果
          • MPI程序(用户自编MPI)
      • 多进程-多线程程序提交
      • 分子动力学软件提交脚本
  • 技术支持
  • 用户手册
  • 作业管理
  • scripts
mrzhenggang
2024-06-17
目录

多线程程序提交

我们介绍一个多进程程版本的 hello world 程序的并行提交方式。

# 准备工作

  • 登录超算系统系统,并切换到相应的工作目录。
  • 编写并编译多进程版本的 hello world 程序,并将可执行文件 a.out 放到工作目录。

# hello world 程序

编写一个文本文件 hello-mpi.c,内容如下:

#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>

int main(int argc, char** argv) {
    int rank, size;
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    printf("Hello, world! Process %d of %d\n", rank, size);
    MPI_Finalize();
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 编译 hello world 程序

gcc hello-mpi.c -o a.out
1

# 提交作业

假设用户可执行文件为 a.out,编写提交脚本 sub.sh 如下:

#!/bin/bash
#SBATCH -n 4 -p debug 
yhrun a.out
1
2
3

提交批处理命令如下:

yhbatch sub.sh
1

参数说明: 1、yhrun a.out ,没写进程数,默认使用 yhbatch 的设置,即为 #SBATCH -n 4,所以并行进程数为 4 个。

修改

示例中的 -p debug 参数,请根据实际情况进行计算分区名称的调整

注意

  1. 多进程程序使用 MPI 进行消息通信,因此可以实现跨计算节点计算。
  2. 因此运行 MPI 程序时建议优先用满计算节点的所有 CPU 核,以便充分利用计算资源。

# 运行结果

如果作业正常运行结束,会生成一个 slurm-xxxx.out 文件,内容如下:

Hello, world! Process 1 of 4
Hello, world! Process 2 of 4
Hello, world! Process 3 of 4
Hello, world! Process 0 of 4
1
2
3
4

说明:

  1. 因为设置了线程数为 4,所以结果有四行
  2. 但是由于 print 函数由四个进程(无序)执行,因此结果顺序是随机的。

# MPI程序(用户自编MPI)

如果用户自行编译MPI并且没有支持slurm作业调度系统接口,那么在提交并行任务时,只能使用 mpirun 命令运行。举例如下:

如果用户需要使用请自行安装。假设用户 A 在个人目录下安装了 openmpi,使用 /vol6/home/A/openmpi 编译生成可执行程序 a.out,则编写脚本 sub.sh 如下:

#!/bin/bash
yhrun -n $SLURM_NPROCS -p debug /bin/hostname > hostlist
/vol6/home/A/openmpi/bin/mpirun -np $SLURM_NPROCS -hostfile hostlist ./a.out
1
2
3

用户根据该脚本,提交批处理命令如下:

yhbatch -n 24 -p debug ./sub.sh
1
多线程程序提交
多进程-多线程程序提交

← 多线程程序提交 多进程-多线程程序提交→

Theme by Vdoing | Copyright © 2015-2024 Zheng Gang | MIT License | 津ICP备2021008634号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×