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

    • 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 程序
        • 提交作业
        • 运行结果
      • 多线程程序提交
      • 多进程-多线程程序提交
      • 分子动力学软件提交脚本
  • 技术支持
  • 用户手册
  • 作业管理
  • scripts
mrzhenggang
2024-06-17
目录

多线程程序提交

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

# 准备工作

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

# hello world 程序

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

#include <stdio.h>
#include <omp.h>

int main() {
    #pragma omp parallel
    {
        printf("Hello, world! Thread %d\n", omp_get_thread_num());
    }
    return 0;
}
1
2
3
4
5
6
7
8
9
10

# 编译 hello world 程序

gcc -fopenmp hello-omp.c -o a.out
1

# 提交作业

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

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

提交批处理命令如下:

yhbatch sub.sh
1

参数说明: 1、export OMP_NUM_THREADS=4 用户设置并行线程数为 4。 2、yhrun a.out 运行可执行文件 a.out,使用的 -N -n 的值,由 yhbatch 命令自动设置。 3、我们将任务需要的参数,写入了提交脚本,并通过 yhbatch 命令提交。

修改

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

注意

  1. 单纯的多线程程序无法实现跨节点计算,因此可以设置较大的并行线程数以便充分利用计算资源。
  2. 但是如果并行线程数过大,可能会由于并行程序的并行度不够或者程序存在资源竞争、原子操作导致性能地下,甚至程序设计不合理产生死锁等问题导致运行失败。因此,需要根据实际情况设置并行线程数。

# 运行结果

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

Hello, world! Thread 1
Hello, world! Thread 2
Hello, world! Thread 3
Hello, world! Thread 0
1
2
3
4

说明:

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

← 串行程序提交说明 多线程程序提交→

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