linux下用pbs并行计算_linux pbs并行计算 - CSDN
  • linux---任务分配(PBS)

    2013-08-23 14:32:42
    PBS 是公开源代码的作业管理系统,在此环境运行,用户不需要指定程序在哪些节点上运行,程序 所需的硬件资源由PBS 管理和分配。 1、PBS 命令  PBS 提供4 条命令用于作业管理。 (1) qsub

    转自:http://blog.csdn.net/xiazhaoqiang/article/details/7761425

    PBS环境qsub, qstat, qdel 

    PBS 是公开源代码的作业管理系统,在此环境下运行,用户不需要指定程序在哪些节点上运行,程序
    所需的硬件资源由PBS 管理和分配。

    1、PBS 命令 
    PBS 提供4 条命令用于作业管理。

    (1) qsub 命令—用于提交作业脚本 
    命令格式:
    qsub [-a date_time] [-c interval] [-C directive_prefix]
    [-e path] [-I] [-j join] [-k keep] [-l resource_list] [-m mail_options]
    [-M user_list][-N name] [-o path] [-p priority] [-q destination] [-r c]
    [-S path_list] [-u user_list][-v variable_list] [-V]
    [-W additional_attributes] [-z]
    [script]
    参数说明:因为所采用的选项一般放在pbs 脚本中提交,所以具体见PBS 脚本选项。
    例:# qsub aaa.pbs 提交某作业,系统将产生一个作业号

    (2) qstat 命令—用于查询作业状态信息 
    命令格式:qatat [-f][-a][-i] [-n][-s] [-R] [-Q][-q][-B][-u]
    参数说明:
    -f jobid 列出指定作业的信息
    -a 列出系统所有作业
    -i 列出不在运行的作业
    -n 列出分配给此作业的结点
    -s 列出队列管理员与scheduler 所提供的建议
    -R 列出磁盘预留信息
    -Q 操作符是destination id,指明请求的是队列状态
    -q 列出队列状态,并以alternative 形式显示
    -au userid 列出指定用户的所有作业
    -B 列出PBS Server 信息
    -r 列出所有正在运行的作业
    -Qf queue 列出指定队列的信息
    -u 若操作符为作业号,则列出其状态。
    若操作符为destination id,则列出运行在其上的属于user_list 中用户的作业状态。
    例:# qstat -f 211 查询作业号为211 的作业的具体信息。

    (3) qdel 命令—用于删除已提交的作业 
    命令格式:qdel [-W 间隔时间] 作业号
    命令行参数:
    例:# qdel -W 15 211 15 秒后删除作业号为211 的作业

    (4) qmgr 命令—用于队列管理
     
    qmgr -c "create queue batch queue_type=execution"
    qmgr -c "set queue batch started=true"
    qmgr -c "set queue batch enabled=true"
    qmgr -c "set queue batch resources_default.nodes=1"
    qmgr -c "set queue batch resources_default.walltime=3600"
    qmgr -c "set server default_queue=batch"

    2、PBS 脚本文件
     
    PBS 脚本文件由脚本选项和运行脚本两部分组成。

    (1) PBS 作业脚本选项 (若无-C 选项,则每项前面加‘#PBS’)
    -a date_time : date_time 格式为:[[[[CC]YY]MM]DD]hhmm[.SS]
    表示经过date_time 时间后作业才可以运行。
    -c interval : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。
    -C directive_prefix :在脚本文件中以directive_prefix 开头的行解释为qsub 的命
    令选项。(若无此选项,则默认为’#PBS’ )
    -e path :将标准错误信息重定向到path
    -I :以交互方式运行
    -j join :将标准输出信息与标准错误信息合并到一个文件join 中去。
    -k keep :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。
    keep 为o 表示保留前者,e 表示后者,oe 或eo 表示二者都保留,
    n 表示皆不保留。若忽略此选项,二者都不保留。
    -l resource_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 个处理器。
    -m mail_options :mail_option 为a:作业abort 时给用户发信;为b:作业开始运行发信;为e:
    作业结束运行时发信。若无此选项,默认为a。
    -M user_list : 定义有关此作业的mail 发给哪些用户。
    -N name : 作业名,限15 个字符,首字符为字母,无空格。
    -o path : 重定向标准输出到path。
    -p priority : 任务优先级,整数,[-1024,1023],若无定义则为0.
    -q destination : destination 有三种形式: queue , @server,queue@server。
    -r y|n : 指明作业是否可运行,y 为可运行,n 为不可运行。
    -S shell : 指明执行运行脚本所用的shell,须包含全路径。
    -u user_list : 定义作业将在运行结点上以哪个用户名来运行。
    -v variable_list : 定义export 到本作业的环境变量的扩展列表。
    -V : 表明qsub 命令的所有环境变量都export 到此作业。
    -W additional_attributes : 作业的其它属性。
    -z : 指明qsub 命令提交作业后,不在终端显示作业号。

    (2) 运行脚本同LINUX 下一般的运行脚本文件。
    [注]:脚本文件中的mpirun_rsh 命令行中的节点列表文件要用环境变量表示
    $PBS_NODEFILE,这个环境变量表示由pbs 自动分配给作业的节点列表;
    节点数为命令行中指定的进程数。
    格式如下:
    mpirun_rsh –np 进程数 –hostfile $PBS_NODEFILE 可执行程序名 

    3、PBS 环境下运行示例 

    (1)脚本文件编辑示例
    实例1:运行mpi 程序
    命令行:#vi aaa.pbs
    编辑的内容:
    #PBS -N myjob
    #PBS -o /home/jz/my.out
    #PBS -e /home/jz/my.err
    #PBS –l nodes=2:ppn=2
    cd 目录(你们原来直接在节点上运行时所在的目录)
    mpirun_rsh –np 4 –hostfile $PBS_NODEFILE /home/jz/helloworld
    解释:原先大家都是在中断输入 mpirun_rsh…..这些命令执行程序的,现在只要把这些提交命令放
    在.pbs 配置文件的最后,由PBS 来调度执行(自动分配节点和其它资源)。
    Myjob 是为你此次要运行的程序起的任务名,可以改成你自己想要的名字
    原先输出信息都是直接在屏幕上显示的,现在屏幕上的显示全部输出到文件中,上例中输出文
    件是/home/jz/my.out 文件,大家可以根据自己的需要修改(目录,文件名)。程序运行时遇到的一些错误会
    记录在.err 文件中。好处:因为对每个任务都设定了不同的输出文件,所以看结果只要打开相应文件看就可
    以了,不需要开多个终端,而且里面有任务的详细信息,比如实际分配的是哪些节点计算,运行时间等。
    #PBS –l nodes=2:ppn=2,你们程序需要几个节点只要修改nodes 后的数字就可以了,ppn=2 保持
    不变,因为我们的机器每个节点都是双cpu 的。
    mpirun_rsh –np 4 –hostfile $PBS_NODEFILE /home/jz/helloworld
    此例中-np 后的4 是并行数(2 × 2 = 4 个cpu ), –hostfile $PBS_NODEFILE 不需要改变。
    /home/jz/helloworld 是你编译好的可执行文件名,需修改。
    对于每个你要运行的mpi 程序都需要这样一个.pbs 配置文件
    也就是说大家原来的操作是:mpirun…………
    现在改成2 步走:1)写个pbs 配置文件(比如xxx.pbs);2)向pbs 提交(qsub xxx.pbs)
    实例2:运行非mpi 程序
    有些用户并不是自己编写mpi 程序,同样也可以用pbs 提交。
    比如物理系运行程序时一般输入的命令是 RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt ,那么配置文件可以
    这样写:
    命令行:#vi job.pbs
    编辑的内容:
    #PBS -N physics_job
    #PBS -o /home/physics/physics_job.out
    #PBS -e /home/physics/physics_job.err
    #PBS -l nodes=1:ppn=2
    #PBS -r y
    cd 目录(你们原来直接在节点上运行时所在的目录)
    RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt
    解释:也就是说把原来在终端直接输入的命令RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt 放到pbs 配置
    文件中,因为你们只要一个节点,所以nodes=1,至于用哪个节点系统自动分配,你们肯定很关心是分配
    了哪个节点给你们,那么可以用qstat 命令查询(比如qstat -n)。

    (2) 提交作业示例
    命令行:#qsub aaa.pbs
    显示结果:

    (3) 作业状态查询示例
    Qstat 后加不同参数可以查看不同的信息(各参数的意思,上面有详细的说明,你们可以一个个试验一
    下,以后就知道查看哪些信息,需要哪些参数)
    实例:
    命令行:#qstat –a (查看作业的状态)
    显示结果:
    解释:Job id 211 是给你提交的任务分配的任务号,S(任务状态,R 表示正在运行,Q 表示正在排
    队等候调度)
    8
    命令行:#qstat –n (查看作业使用的节点)
    显示结果:
    解释:blade32 就是分给你这个任务的节点
    命令行:#qstat –f 211 (查看有关作业运行具体信息)
    显示结果:
    解释:exec_host 显示的是实际执行该任务的节点

     

    转自:http://blog.sina.com.cn/s/blog_62db9b1901013g49.html

    qsub

    qsub命令用来向SGE提交批处理作业,SGE支持单或多节点作业。

    qsub [ options ] [ command | -- [ command_args ]]

    1. -@ optionfile (contains all valid options)  就是把qsub命令的可选项组合成一定功能的语句,保存在一个文件中。  qsub -a optionfilename jobfilename  

    2. -a date_time   设置作业什么时候可以执行。   格式:CC YY MMDDHHMM.SS 如 201109272213.21   qsub -a 201109272213.21 ../simplejob

    3. -A account_string  Identifies the account to which the resource consumption of the job should be charged   设置一个作业的账户名,便于统计该账户使用的资源等信息    qsub -A testaccountname jobname  

    4. -ac 添加名/值对到作业上下文   -dc 删除。。   -sc 设置(修改)。。   Contexts provide a way to dynamically attach and remove meta-     information to and from a job. The context variables are not     passed to the job's execution context in its environment     The outcome of the evaluation of all -ac, -dc, and -sc options     or corresponding values in qmon is passed to defined JSV     instances as parameter with the name -ac.  

    5. -ar ar_id 分配已提交作业,作为它的一部分,给已存在预约。ar=advance reservation   qsub -ar 60 jobname   #ai_di = unsigned integer   

    6.  -b y[es]|n[o]      Gives the user the possibility to indicate explicitly whether       command should be treated as binary or script.     

    7. -binding 等待理解

    8.  -c occasion_specifier(际符)  定义或者重定义作业是否要被检查,if是,在什么环境下。        n           no checkpoint is performed.               s           checkpoint when batch server is shut down.               m           checkpoint at minimum CPU interval.               x           checkpoint when job gets suspended.               <interval>  checkpoint in the specified time interval.   qsub -c n jobname

    9. -C prefix_string 前缀字符串定义一个在作业命令中的指令     qsub -C "#$" ../simplejob   

    10.  -ckpt ckpt_name 选择检查点环境来检查一个作业,同时声明这个作业是检查点作业。      qsub -ckpt allanckpt ../simplejob    

    11.  -clear 重置作业的所有元素为初始默认状态    qsub -clear ../simplejob   

    12.  -cwd =current working directory  从当前的目录开始执行作业。如果有相应的配置文件的话,    这个命令将启动网格引擎的路径别名设备。    

    13.  -dl date_time 设置作业在deadline之前执行完,格式为CC YYU MMDDHHMM.SS    qsub -dl 201101131159.01 ../simplejob

    14.  -e [[hostname]:]path,...定义或重新定义作业的标准错误流使用的路径 e=stderror

    15.  -h | -h {u|s|o|n|U|O|S}... h=hold 暂停作业执行       'u' .........user hold.             `s'  denotes a system hold.               `o'  denotes a operator hold.               `n'  denotes no hold (requires manager privileges).               `U'  removes a user hold.               `S'  removes a system hold.               `O'  removes a operator hold.        qsub -h ../simplejob(qsub只能使用-h)

    16.  -l resource=value,... l=launch 启动满足资源需求的作业    Launch the job in a Grid Engine queue meeting the given resource               request list.  In case of qalter the previous definition is               replaced by the specified one.    qsub -l s_core=5 ../simplejob

    17.  -q wc_queue_list 定义或重定义可能用来执行作业的队列,包括群聚队列、队列域、队列实例。    qsub -q all.q ../simplejob

    18.  -hard  表示该作业在安排执行之前,作业的资源需求必须满足。    qsub -hard  ../simplejob

    19.  -soft 表示该作业在安排执行之前,作业的资料需求可以有、但不必须有。    qsub -soft ../simplejob

    20.  -help 获取帮助    qsub -help

    21.  -hold_jid   wc_job_listt 定义或重定义当前提交的作业对哪些作业有依赖,所依赖的作业使用通配符作业清单表示:wc_job_list    qsub -hold_jid 63926 ../simplejob

    22.  -hold_jid_ad wc_job_list ad=array dependency list of the submitted job    定义或者重定义组作业依赖列表。    qsub -hold_jid_ad 1-1200

    23.  -t n[-m[:s]]    指定组作业的数量,将指示器与作业关联    qsub -t 1-1200 ../simplejob

    24.  -i [[hostname]:]file,... 定义或重定义一个文件为作业的标准输入流    qsub -i stdin job

    25.  -j y[es]|n[o] 指定作业的标准错误流是否合并到标准输出流,如果-j y 和-e都存在的话,SGE将忽略后者。    qsub -j y ../simplejob

    26.  -js job_share 设置作业的对长期资源的相对股份 job_share is an unsigned integer value    qsub -js 4 job

    27.  -jsv jsv_url 定义一个本地jsv实例,在作业发送到qmaster之前,该jsv将执行验证作业规范。    qsub -jsv jsvurl job

    28.  -m b|e|a|s|n,... 定义作业处在哪个阶段给作业主人发送邮件。m=mail.    `b'     Mail is sent at the beginning of the job.               `e'     Mail is sent at the end of the job.               `a'     Mail is sent when the job is aborted or                       rescheduled.               `s'     Mail is sent when the job is suspended.               `n'     No mail is sent.    qsub -m n ../simplejob

    29.  -M user[@host],...定义由哪个主机账户给用户发送邮件    qsub -M root@ubuntu ../simplejob

    30.  -masterq wc_queue_list 定义平行作业的主队列,这个队列可以是集群队列、队列域、队列实例。    qsub -masterq all.q job

    31.  -N =name 定义作业名字    qsub -N jobname job

    32.  -notify 该选项标示这——网格引擎先发送警告信号给运行中的作业,再发送信号本身。如果SIGSTOP在排队,     作业将收到一个SIGUSR1,之后几秒才收到SIGSTOP;如果SIGKILL在排队,作业将收到一个SIGUSR2,之后     几秒才收到SIGKILL。    qsub -notify job   

    33.  -o [[hostname]:]path,... 定义或重定义作业标准输出流o=output stream    qsub -o jobname.jobid job   

    34.  -P Project_name 设置作业的项目    qsub -P projectname job   

    35.  -p priority 设置作业的相对优先权    qsub -p 10 job     

    36.  -pe parallel_environment n[-[m]]|[-]m,... 初始化并行程序化环境    qsub -pe 200-500 job   

    37.   -pty y[es]|n[o] 设置是否使用伪终端 pt=pseudo terminal    qsub -pty y  job  

    38.  -r y[es]|n[o]  设置作业是否可以重新运行 r=run    qsub -r y job     39.  -R y[es]|n[o] 指示作业的预约要不要实施 R=Reservation    qsub -R y job     40.   -S [[hostname]:]pathname,... 规定作业的Shell解释器    qsub -S ./ job   

    41.    -shell y[es]|n[o]  设置执行shell还是command line      qsub -shell y job      

    42.  -sync y[es]|n[o] y导致qsub等待作业执行完成之后才退出,n导致qsub提交作业成功就退出          

    43.  -tc max_running_tasks 设置作业组中最大并行作业数量 同-t搭配使用     qsub -tc 800 -t 1-1600 job     

    44.    -terse Available for qsub only. 只输出刚刚提交作业的ID。

    45.  -v variable[=value],...导出环境变量到作业执行上下文    qsub -v h_core=12 job    

    46.  -V 导出所以活动的环境变量到作业上下文       qsub -V job    

    47.  -verify 提交作业的同时,进行验证    qsub -verify job   

    48.  -w e|w|n|p|v 设置验证(级别)模式    e..error  w..warning  n..none  p..poke  v..verify   

    49.    -wd working_dir 工作目录    qsu -wd ./  job 

     

    展开全文
  • NUMECA FINE/OPEN 自带的openmpi无法跨节点进行并行计算,故调用集群自带ompi1.6.5 #!/bin/sh #PBS -r n #PBS -j oe #PBS -N CASE NAME #PBS -l nodes=3:ppn=28 #PBS -l walltime=168:00:00 NPROCS=`wc -l < $PBS...

    作业脚本

    NUMECA FINE/OPEN 自带的openmpi无法跨节点进行并行计算,故调用集群自带ompi1.6.5

    #!/bin/sh
    #PBS -r n
    #PBS -j oe
    #PBS -N CASE NAME
    #PBS -l nodes=3:ppn=28
    #PBS -l walltime=168:00:00
    NPROCS=`wc -l < $PBS_NODEFILE`
    #----------------------LICENSE------------------------------#
    NUMECA_LICENSE_FILE=27000@admin
    export NUMECA_LICENSE_FILE
    #----------------------NUEMCA DIR---------------------------#
    NI_VERSIONS_DIR=/path/to/numeca
    export NI_VERSIONS_DIR
    NUMECA_SOFT_VERSION=112
    export NUMECA_SOFT_VERSION
    TMP_DIR=/path/to/.numeca/tmp
    export TMP_DIR
    NUMECA_DIR=${NI_VERSIONS_DIR}/fine$NUMECA_SOFT_VERSION
    export NUMECA_DIR
    NUMECA_BIN=${NUMECA_DIR}/LINUX
    export NUMECA_BIN
    #-----------------------MPI HOME----------------------------#
    export MPIR_HOME=/path/to/mpi/openmpi/1.6.5/intel
    OPAL_PREFIX=$MPIR_HOME
    export OPAL_PREFIX
    PATH=${MPIR_HOME}/bin:${PATH}
    export PATH
    LD_LIBRARY_PATH=$MPIR_HOME/lib:${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH
    #-----------------------NUMECA EXCU-------------------------#
    BIN=${NUMECA_BIN}/euranus/euranusTurbodpx86_64_ompi
    #------------------------FILE DIR---------------------------#
    BASE_FILE=/path/to/project/dir/F-0
    TASK_NAME=F-0_Perf_curve_1_design_pt
    RUN_FILE=$BASE_FILE/$TASK_NAME/$TASK_NAME.run
    #-----------------------START!!!----------------------------#
    ${OPAL_PREFIX}/bin/mpirun --display-allocation --mca mpi_leave_pinned 0 -v -np $NPROCS -machinefile $PBS_NODEFILE ${BIN} $RUN_FILE -steering $STEERING_FILE | tee $STD_FILE
    

    脚本自动生成

    为计算压气机性能曲线,FINE/TURBO能自动生成一系列subtask,名称也有规律性,故可以用脚本自动生成

    #!/bin/bash
    printf '
          ____  _   _ _ __ ___   ___  ___ __ _ 
         |  _ \| | | |  _ ` _ \ / _ \/ __/ _` |
         | | | | |_| | | | | | |  __/ (_| (_| |
         |_| |_|\__,_|_| |_| |_|\___|\___\__,_|                                      
                 _                      _       _   
      __ _ _   _| |_ ___  ___  ___ _ __(_)_ __ | |_ 
     / _` | | | | __/ _ \/ __|/ __|  __| |  _ \| __|
    | (_| | |_| | || (_) \__ \ (__| |  | | |_) | |_ 
     \__ _|\__._|\__\___/|___/\___|_|  |_| .__/ \__|
                                         |_|        
    '
    
    echo -e "\033[4;31m write numeca pbs script. \033[0m"
    read -p "how much cores would you like to use?:" core_num
    read -p "input project name:" project_name
    read -p "input performance curve name:" perf_name
    read -p "input the number of choke point:" choke_number
    read -p "input the number of stall point:" stall_number
    
    
    for((i=1; i<=1+${choke_number}+${stall_number};i++));
    do
        declare -i tmp=1+${choke_number}
        if [ $i -eq 1 ]; then
            SUB_TASK_NAME=design_pt
        elif [ $i -gt 1 -a $i -le $tmp ]; then
            declare -i j=$i-1
            SUB_TASK_NAME=choke_pt_$j
        else
            declare -i k=i-${choke_number}-1
            SUB_TASK_NAME=stall_pt_$k
        fi
    
    echo "#!/bin/sh
    #PBS -r n
    #PBS -j oe
    #PBS -N ${project_name}_$SUB_TASK_NAME
    #PBS -l nodes=${core_num}:ppn=28
    #PBS -l walltime=168:00:00" > $SUB_TASK_NAME;
    
    echo 'NPROCS=`wc -l < $PBS_NODEFILE`
    #----------------------LICENSE------------------------------#
    NUMECA_LICENSE_FILE=27000@admin
    export NUMECA_LICENSE_FILE
    #----------------------NUEMCA DIR---------------------------#
    NI_VERSIONS_DIR=/path/to/numeca
    export NI_VERSIONS_DIR
    NUMECA_SOFT_VERSION=112
    export NUMECA_SOFT_VERSION
    TMP_DIR=/path/to/.numeca/tmp
    export TMP_DIR
    NUMECA_DIR=${NI_VERSIONS_DIR}/fine$NUMECA_SOFT_VERSION
    export NUMECA_DIR
    NUMECA_BIN=${NUMECA_DIR}/LINUX
    export NUMECA_BIN
    #-----------------------MPI HOME----------------------------#
    export MPIR_HOME=/path/to/mpi/openmpi/1.6.5/intel
    #export MPIR_HOME=${NUMECA_BIN}/_mpi/_ompi1.6/
    OPAL_PREFIX=$MPIR_HOME
    export OPAL_PREFIX
    PATH=${MPIR_HOME}/bin:${PATH}
    export PATH
    LD_LIBRARY_PATH=$MPIR_HOME/lib:${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH
    #-----------------------NUMECA EXCU-------------------------#
    BIN=${NUMECA_BIN}/euranus/euranusTurbodpx86_64_ompi' >> $SUB_TASK_NAME;
    
    echo "#------------------------FILE DIR---------------------------#
    BASE_FILE=/path/to/${project_name}
    TASK_NAME=${project_name}_${perf_name}_$SUB_TASK_NAME" >> $SUB_TASK_NAME;
    
    echo 'RUN_FILE=$BASE_FILE/$TASK_NAME/$TASK_NAME.run
    STEERING_FILE=$BASE_FILE/$TASK_NAME/$TASK_NAME.steering
    STD_FILE=$BASE_FILE/$TASK_NAME/$TASK_NAME.std
    #-----------------------START!!!----------------------------#
    ${OPAL_PREFIX}/bin/mpirun --display-allocation --mca mpi_leave_pinned 0 -v -np $NPROCS -machinefile $PBS_NODEFILE ${BIN} $RUN_FILE -steering $STEERING_FILE | tee $STD_FILE' >> $SUB_TASK_NAME;
    done
    

    环境变量设置

    虽然已经在pbs任务脚本中定义了相关计算中出现bug

    NUMECA_DIR not defined
    NUMECA_BIN not defined
    TMP_DIR not defined
    

    故在~/.bashrc文件中加入

    export NUMECA_DIR=/path/to/numeca/fine112
    export NUMECA_BIN=/path/to/numeca/fine112/LINUX
    export TMP_DIR=/path/to/.numeca/tmp
    
    展开全文
  • linux并行集群的搭建

    2016-09-17 18:13:55
    http://blog.csdn.net/wjciayf/article/details/50722373
    http://blog.csdn.net/wjciayf/article/details/50722373
    
    展开全文
  • 初学并行计算总结[1]--并行环境与命令并行计算环境并行命令Pthread标准MPI总结 并行计算环境 我的并行计算环境是在小型超算集群中。本地环境为Windows10,运行环境为Linux-Centos7。这里使用了两个强大的软件远程...

    初学并行计算总结[1]--并行环境与命令

    并行计算环境

    我的并行计算环境是在小型超算集群中。本地环境为Windows10,运行环境为Linux-Centos7。这里使用了两个强大的软件远程连接到运行环境进行操作—XShell与Xftp。Xshell不仅可以在windows环境中远程连接到Linux环境,也可以在Windows本地上控制多台虚拟机。Xftp是一种基于SFTP和FTP的文件传输软件。它可以在Window与Linux之间跨平台传输文件。

    并行命令

    并行编程有基于共享存储环境的POSIX线程–Pthread编程、OpenMP并行编程两种标准。还有分布存储系统的并行编程,这里重点讨论基于消息传递的MPI编程。

    Pthread标准

    1.编译命令
    g++ -o hello.o hello.cpp -lpthread
    或者intel的编译器
    icpc -pthread -o hello.o hello.cpp
    2.执行命令
    ./hello.o

    MPI

    1.编译命令
    mpicxx -g -Wall -o mpi.o mpi.cpp
    或者
    mpic++ -i_dynamic -o mpi.o mpi.cpp
    我一般使用前者
    2.执行命令
    mpirun -np number ./mpi.o
    3.PBS文件执行
    PBS是为了满足于异构计算网络的软件包。在集群环境中可以用于灵活的批处理。这里通过编写PBS文件提交作业到队列中,集群会根据队列排序依次执行作业,有效分配资源,避免资源竞争。
    PBS脚本的编写

    	#!/bin/bash
    	#PBS -N 作业名称
    	#PBS -I 申请资源(nodes=1:ppn=4) //使用的节点数和每个节点能跑多少核
    	#PBS -j oe //标准错误输出与标准输出合并
    
    	cd $PBS_O_WORKDIR//到工作目录下
    	procs = $(cat $PBS_NODEFILE | wc -l)//获取可调用的核数
    	mpirun -np $procs -machinefile $PBS_NODEFILE ./mpi.o//支持多节点执行MPI程序
    

    提交作业

    qsub MPI.pbs
    

    查看作业

    qstat -R
    //或者
    qstat -f (jobid)
    

    总结

    这次主要记录下Pthread编译命令和MPI的编译命令与执行命令。主要是记录下有关PBS文件的编写。在集群中多节点运行MPI的文件时,需要加上-machinefile。想要多了解PBS编程使用的可以去Dr. Yuan的博客了解下,我也从那里了解了不少。
    有关OpenMP编程了解有些少。这里写下OpenMP在intel编译器中的编译命令
    icpc -openmp -o test.o test.cpp
    下回会写一段Pthread的编程例子和心得。

    展开全文
  • 学院的计算平台(一期)运行已经一年了,麻雀虽小五脏俱全。本来以为大家有GPU需求的差不多都会自己买上一两台GPU服务器(我自己还有一台K40×2的古董呢),所以一期建设只有刀片和FPGA,但是现在大家都玩深度学习了...
  • PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需 要,如集群系统、超级计算机和大规模并行系统。PBS的主要...
  • PBS 安装与使用

    2012-11-03 10:59:32
    PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需要,如集群系统、超级计算机和大规模并行系统。PBS的主要...
  • PBS是公开源代码的作业管理系统,在此环境运行,用户不需要指定程序在哪些节点上运行,程序所需的硬件资源由PBS管理和分配。PBS(Portable Batch System)是由NASA开发的灵活的批处理系统。它被用于集群系统、超级...
  • PBS 作业管理系统

    2018-05-27 21:14:10
    本文从本人简书博客同步过来 在上一篇中我们非常简单地介绍了在 C 语言中嵌入 mpi4py 程序的方法。...集群系统具有低成本、高性能的特性,提供了强大的批处理和并行计算能力,代表了高性能计算机发展的新方向。...
  • Linux ANSYS Fluent计算集群配置实录作者: 牛钰森 前言 因为实验室的计算量逐年上升,以前计算的很多是二维轴对称的模型,现在很多都需要建立三维模型,并且网格数量是越来越多,所以最近实验室安装了...
  • 现在的计算平台有很多是 Linux Cluster,常用的作业管理系统采用 PBS。如果要采用 FLUENT 进行计算就需要解决在 Text Mode 下调 FLUENT 进行求解的问题,而且多数时候 需要执行并行版本的 FLUENT。 Linux ...
  • 并行程序的编程模型、运行环境、调试环境等都要比串行程序复杂得多。提供良好的高性能计算开发环境,一直是学术界和工业界所追求的目标。这里的开发环境既包括并行计算机体系结构,计算机网络拓扑结构等硬件环境;也...
  • PBS使用说明

    2009-11-25 15:20:00
    PBS是公开源代码的作业管理系统,在此环境运行,用户不需要指定程序在哪些节点上运行,程序所需的硬件资源由PBS管理和分配。PBS(Portable Batch System)是由NASA开发的灵活的批处理系统。它被用于集群系统、超级...
  • 转自:http://www.ibm.com/developerworks/cn/linux/cluster/hpc/part2/index.html 1 什么是Beowulf集群 Beowulf是现存的最古老的英语史诗: Famed was this Beowulf: far ew the boast of him, son of ...
  • 集群的管理pbs

    2019-07-17 20:30:25
    管理集群计算机最重要的工作不是象PC机那样启动,关闭计算机这么简单,也不需要做磁盘整理。笔者认为管理集群计算机最重要的是资源的组合划分,任务的分配,节点性能的监控和负载。每个节点的资源(包括内存,磁盘,...
  • 主机系统:rhel6.0 (数量不限) 系统环境:selinux and iptables disabled 服务节点: desktop26.example.com 192.168.0.26 ...计算节点:desktop80.example.com 192.168.0.80 desktop83.exampl...
  • ClusterShell 是一个事件驱动的开源 Python 库,旨在在服务器场或大型 Linux 集群上并行运行本地或远程命令。-- Magesh Maruthamut...
1 2 3 4 5 ... 9
收藏数 166
精华内容 66
热门标签
关键字:

linux下用pbs并行计算