5.3 KiB
5.3 KiB
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)