mynote/torque/torque.md
2020-06-26 21:29:00 +08:00

5.3 KiB
Raw Permalink Blame History

torque 简介

PBS, Portable Batch System, 可执行程序的批处理系统,用来在计算机上做任务管理。主要有三个分支:

  • openpbs(开源) 早期的pbs系统失去维护, 2016年后由PBS Pro接手升级为pbs pro opensource project,目前更新频繁
  • Torque(开源) openpbs的分支由adaptivecomputing接手后持续更新于2016年前停止更新
  • PBS Pro(商业) openpbs的商业版本

torque 是一个分布式作业管理系统, PBS 分支之一, 可以在超算或集群上管理多个任务队列每个队列关联特定的资源比如a队列任务是写入日志b队列任务是备份或者压缩日志a队列随时响应 b队列每天提交一次任务等每个队列有不同的特性需要不同的资源torque就是在集群中分配管理这些资源比如将任务a1分配到哪个节点执行限制多少核数限制多少内存限制最多多长时间执行等。

torque 指令

  • qsub 提交任务

    # 形如 qsub -n task_name -o output_path -q queue1_name -a date_time -l ncpus=16,mem=1024mb job.script
    
    -n 任务名
    -o 任务输出地址
    -q 任务队列名称
    -a 在什么时间之后执行
    -r 该任务是否可以重新执行
    -u -u user@host,user@host 定义可以执行的用户
    -v 定义任务执行的环境变量, -v var1=value1,var2=value2
    -l 定义硬件资源限制,-l ncpus=16,mem=1024mb
    -d 任务执行路径
  • qstat 查看任务状态

  • qdel 删除或终止任务

  • qhold 保留某任务,暂时不去执行

  • qrls 释放某任务到等待执行状态

PBS 脚本语法

一个 pbs 任务脚本 类似这样

#!/bin/bash 

#PBS -k o 
#PBS -l nodes=2:ppn=6,walltime=30:00
#PBS -M jthutt@tatooine.net
#PBS -m abe 
#PBS -N JobName 
#PBS -j oe 

mpiexec -np 12 -machinefile $PBS_NODEFILE ~/bin/binaryname

第一行指明用bash去执行该脚本 后面几行声明一些任务参数跟qsub指令参数一样。

最后一行就是真的的任务, 告诉系统用 mpiexec 这个指令在这些计算节点 $PBS_NODEFILE 上去执行 ~/bin/binaryname 这个命令

MPI

MPI是一个跨语言的通讯协议基于此可用于编写并行计算程序。

mpi 有6个基本接口

MPI_Init 初始化其后面到MPI_Finalize为止的代码在每个进程中都会执行一遍
MPI_Comm_size 获得进程个数n
MPI_Comm_rank 获得本进程的id, 从0到n-1
MPI_Send 发送消息
MPI_Recv 收到消息
MPI_Finalize mpi 退出, 必须调用
// 示例 mpitest
// 0号进程接收消息 并 打印
// 非0号进程发送消息
#include <stdio.h>
#include <string.h>
#include "mpi.h"
void main(int argc, char* argv[])
{
    int numprocs, myid, source;
    MPI_Status status;
    char message[100];
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    if (myid != 0) {  //非0号进程发送消息
        strcpy(message, "Hello World!");
        MPI_Send(message, strlen(message) + 1, MPI_CHAR, 0, 99,
            MPI_COMM_WORLD);
    }
    else {   // myid == 0即0号进程接收消息
        for (source = 1; source < numprocs; source++) {
            MPI_Recv(message, 100, MPI_CHAR, source, 99,
                MPI_COMM_WORLD, &status);
            printf("接收到第%d号进程发送的消息%s\n", source, message);
        }
    }
    MPI_Finalize();
}
# mpitest 为上面文件编译后的可执行文件
# 通过调用mpiexec 开4个进程同时运行mpitest
mpiexec -np 4 mpitest
# 输出
接收到第1号进程发送的消息Hello World!
接收到第2号进程发送的消息Hello World!
接收到第3号进程发送的消息Hello World!

参考

- https://en.wikipedia.org/wiki/Portable_Batch_System
- https://en.wikipedia.org/wiki/TORQUE
- https://kb.iu.edu/d/avmy
- http://docs.adaptivecomputing.com/torque/4-0-2/help.htm#topics/12-appendices/commandsOverview.htm
- [CentOS下torque集群配置-torque安装与配置](https://blog.csdn.net/dream_angel_z/article/details/44225669/)
- [作业提交系统Torque个人安装总结(PBS)](https://blog.csdn.net/educast/article/details/7166764)
- [PBS命令和使用](https://www.cnblogs.com/yqsun/p/5433070.html)
- [MPI编程入门详解](https://www.jianshu.com/p/2fd31665e816)