您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > MPICHPBS用户使用指南
1MPICH&PBS使用指南一、MPI编程..................................................................................................................................1二、MPICH下编译和运行.............................................................................................................3三、PBS环境下运行.......................................................................................................................4一、MPI编程1、MPI编程函数介绍MPI实际上是一个提供并行程序消息传递机制的函数库,有40多个函数,常用的有6个基本函数。下面以C语言为例简单介绍这些函数。(1)MPI_Init函数定义:intMPI_Init(int*argc,char***argv)功能:用命令行参数初始化MPI环境输入:argc、argv—表示命令行参数,同C语言的main()函数参数格式,argv中包含欲并行运行的进程数输出:返回值—非零/零表示初始化是否成功说明:该函数必须为程序中第一个调用的MPI函数示例:MPI_Init(&argc,&argv);//argc、argv引用的是mian()函数的参数(2)MPI_Finalize函数定义:intMPI_Finalize(void)功能:结束MPI程序的运行,指结束MPI环境的使用输入:无输出:返回值—非零/零表示结束MPI环境是否成功说明:该函数必须为程序中最后一个调用的MPI函数示例:MPI_Finalize();(3)MPI_Comm_size函数定义:intMPI_Comm_size(MPI_Commcomm,int*size)功能:得到总进程数输入:comm通信域句柄(系统默认的为MPI_COMM_WORLD,也可自己定义)输出:size,即通信域comm内包括的进程数整数(4)MPI_Comm_rank函数定义:intMPI_Comm_rank(MPI_Commcomm,int*rank)2功能:得到本进程的进程号输入:comm,该进程所在的通信域句柄输出:rank,调用进程在comm中的标识号(5)MPI_Send函数定义:intMPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm)功能:发送消息给特定的进程输入:buf发送缓冲区的起始地址(可选类型)count将发送的数据的个数(非负整数)datatype发送数据的数据类型(句柄)dest目的进程标识号(整型)tag消息标志(整型)comm通信域(句柄)输出:无(6)MPI_Recv函数定义:intMPI_Recv(void*buf,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Status*status)功能:接受别的进程发过来的消息输入:count最多可接收的数据的个数(整型)datatype接收数据的数据类型(句柄)source接收数据的来源即发送数据的进程的进程标识号(整型)tag消息标识与相应的发送操作的表示相匹配相同(整型)comm本进程和发送进程所在的通信域(句柄)输出:buf接收缓冲区的起始地址(可选数据类型)status返回状态(状态类型MPI_Status)2、MPI程序示例MPI程序中必须包含MPI库的头文件,C语言头文件名为mpi.h,FORTRAN语言头文件名为mpif.h。/*helloworld.c程序清单*/#include“mpi.h”main(intargc,char**argv){intnumprocs,myrank,i,j,k;MPI_Statusstatus;charmsg[20];MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&numprocs);//MPI_Comm_rank(MPI_COMM_WORLD,&myrank);if(myrank==0){3strcpy(msg,”HelloWorld”);MPI_Send(msg,strlen(msg)+1,MPI_CHAR,1,99,MPI_COMM_WORLD);}elseif(myrank==1){MPI_Recv(msg,20,MPI_CHAR,0,99,MPI_COMM_WORLD,&status);printf(“Receivemessage=%s\n”,msg);}MPI_Finalize();}二、MPICH下编译和运行1、编译MPICH环境下,程序的编译采用命令行方式,即在Linux命令行下用mpicc命令进行编译。编译命令格式:mpicc–o可执行文件名源程序文件名命令参数说明:(1)源程序文件经过mpicc编译连接以后得到可执行文件;(2)此处的mpicc命令就是/usr/local/topspin/mpi/mpich/bin/mpicc,下文中的mpirun_rsh也是在此目录下。程序编译示例:mpicc–ohelloworldhelloworld.c2、运行MPICH环境下,程序的运行亦采用命令行方式,即在Linux命令行下用mpirun_rsh命令运行程序。运行命令格式:mpirun_rsh–np进程数–hostfile节点列表文件./可执行文件名命令参数说明:节点列表文件(如:hosts)为手工建立的一个文本文档,内容为:iblade01iblade02iblade03iblade04…有多少个进程就需要写多少行,因节点为双CPU,故节点名可重复一次。(下例只需这四行即可)程序运行示例:mpirun_rsh–np4–hostfilehosts./helloworld运行结果:HelloWorld!Process0of4onblade01.cluster.seu.edu.cnHelloWorld!Process1of4onblade02.cluster.seu.edu.cnHelloWorld!Process2of4onblade03.cluster.seu.edu.cnHelloWorld!Process3of4onblade04.cluster.seu.edu.cn强烈建议:不采用该方式,而采用PBS环境下运行方式,因为所列节点可能有故障。4三、PBS环境下运行PBS是公开源代码的作业管理系统,在此环境下运行,用户不需要指定程序在哪些节点上运行,程序所需的硬件资源由PBS管理和分配。1、PBS命令PBS提供4条命令用于作业管理。(1)qsub命令—用于提交作业脚本命令格式:qsub[-adate_time][-cinterval][-Cdirective_prefix][-epath][-I][-jjoin][-kkeep][-lresource_list][-mmail_options][-Muser_list][-Nname][-opath][-ppriority][-qdestination][-rc][-Spath_list][-uuser_list][-vvariable_list][-V][-Wadditional_attributes][-z][script]参数说明:因为所采用的选项一般放在pbs脚本中提交,所以具体见PBS脚本选项。例:#qsubaaa.pbs提交某作业,系统将产生一个作业号(2)qstat命令—用于查询作业状态信息命令格式:qatat[-f][-a][-i][-n][-s][-R][-Q][-q][-B][-u]参数说明:-fjobid列出指定作业的信息-a列出系统所有作业-i列出不在运行的作业-n列出分配给此作业的结点-s列出队列管理员与scheduler所提供的建议-R列出磁盘预留信息-Q操作符是destinationid,指明请求的是队列状态-q列出队列状态,并以alternative形式显示-auuserid列出指定用户的所有作业-B列出PBSServer信息-r列出所有正在运行的作业-Qfqueue列出指定队列的信息-u若操作符为作业号,则列出其状态。若操作符为destinationid,则列出运行在其上的属于user_list中用户的作业状态。例:#qstat-f211查询作业号为211的作业的具体信息。(3)qdel命令—用于删除已提交的作业5命令格式:qdel[-W间隔时间]作业号命令行参数:例:#qdel-W1521115秒后删除作业号为211的作业(4)qmgr命令—用于队列管理qmgr-ccreatequeuebatchqueue_type=executionqmgr-csetqueuebatchstarted=trueqmgr-csetqueuebatchenabled=trueqmgr-csetqueuebatchresources_default.nodes=1qmgr-csetqueuebatchresources_default.walltime=3600qmgr-csetserverdefault_queue=batch2、PBS脚本文件PBS脚本文件由脚本选项和运行脚本两部分组成。(1)PBS作业脚本选项(若无-C选项,则每项前面加‘#PBS’)-adate_time:date_time格式为:[[[[CC]YY]MM]DD]hhmm[.SS]表示经过date_time时间后作业才可以运行。-cinterval:定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。-Cdirective_prefix:在脚本文件中以directive_prefix开头的行解释为qsub的命令选项。(若无此选项,则默认为’#PBS’)-epath:将标准错误信息重定向到path-I:以交互方式运行-jjoin:将标准输出信息与标准错误信息合并到一个文件join中去。-kkeep:定义在执行结点上保留标准输出和标准错误信息中的哪个文件。keep为o表示保留前者,e表示后者,oe或eo表示二者都保留,n表示皆不保留。若忽略此选项,二者都不保留。-lresource_list:定义资源列表。以下为几个常用的资源种类。cput=N:请求N秒的CPU时间;N也可以是hh:mm:ss的形式。mem=N[K|M|G][B|W]:请求N{kilo|mega|giga}{bytes|words}大小的内存。nodes=N:ppn=M:请求N个结点,每个结点M个处理器。-mmail_options:mail_option为a:作业abort时给用户发信;为b:作业开始运行发信;为e:作业结束运行时发信。若无此选项,默认为a。-Muser_list:定义有关此作业的mail发给哪些用户。-Nname:作业名,限15个字符,首字符为字母,无空格。-opath:重定向标准输出到path。-ppriority:任务优先级,整数,[-1024,1023],若无定义则为0.-qdestination:destination有三种形式:queue,@server,queue@server。-ry|n:指明作业是否可运行,y为可运行,n为不可运行。-Sshell:指明执行运行脚本所用的shell,须包含全路径。6-uuser_list:定义作业将在运行结点上以哪个用户名来运行。-vvariable_list:定义export到本作业的环境变量的扩展列表。-V:表明qsub命令的所有环境变量都export到此作业。-Wadditional_at
本文标题:MPICHPBS用户使用指南
链接地址:https://www.777doc.com/doc-2883214 .html