科学网

 找回密码
  注册

tag 标签: 计算机集群

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

使用Matlab MDCS在计算机集群上做并行计算
SilentStorm 2016-1-6 19:28
因为要做大量仿真运算,辗转找到了可以使用的集群。好好研究了如何使用matlab MDCS在集群上做并行运算。现在把过程记录下来,以备将来再用。 我使用的是南安普顿大学的iridis4集群。 此集群使用PBS任务管理系统。 首先需要连接至南安普顿大学的vpn:vpn.soton.ac.uk; 其次使用ssh登录 username@iridis4_c.soton.ac.uk; 1. 找到合适的并行运算模式:这一步可以通过分析自己的代码以及阅读matlab中MDCS的文档找到适用于自己代码的并行运算模式。我的情况是做蒙特卡洛仿真,即数据密集型计算,且循环的每一次运行相互之间是独立的,即前后之间无关。在研究了batch等命令之后,发现batch是我需要的命令。batch可以根据clusterprofile申请资源,clusterprofile中规定了所需要的节点数,每个节点中包含的cpu个数,内存大小,以及预计运行时间。 2. clusterprofile可以在服务器端的matlab的菜单-Parallel-Manage Cluster Profile中定义。先通过import在/local/software/matlab/2014b/extern/examples/MDCS/ 下面的Iridis4_1node,再基于此profile修改并保存为自己需要的profile。注意不可以直接用local(default)那个profile,因为直接用local相当于在服务器的登录节点并行运算. 下面假定我自己定义的profile为 Iridis4_1node_8h 3.使用batch申请一个节点,并使用其16个cpu进行运算: 在m文件中输入: cluster1 = parcluster('Iridis4_1node_8h'); job = batch(cluster1,@ARsplitRunParforTriFreq,1,{ep,num,N},'Pool',15); 其中 ARsplitRunParforTriFreq.m为需要并行运算的函数,里面包含parfor语句。 1是 ARsplitRunParforTriFreq函数的输出参数个数, {ep,num,N}为 ARsplitRunParforTriFreq函数的输入参数。 ‘Pool’,15表示除了一个 master matlab之外,还有15个slave matlab要运行,总共是16个cpu。 ARsplitRunParforTriFreq.m文件内容为: function outsolution= ARsplitRunParforTriFreq(ep,num,N) parfor i=1:N blah blah blah end return 4. 再通过for循环批量提交batch作业,申请多个节点 5. parfor 命令进行并行循环,请参见matlab帮助。 注意事项: job = batch(cluster1,@ARsplitRunParforTriFreq,1,{ep,num,N},'Pool',15); 此语句中的 1表示的是函数 ARsplitRunParforTriFreq的输出参数个数,不是输入参数个数。如果搞错了的话,matlab虽然会申请到16个cpu运算,但是进不去 ARsplitRunParforTriFreq函数。表现出来的现象是:16个matlab进程 会同时闪退,而且不输出任何东西。妈的,调了3天才找到这个错误。。。
个人分类: 计算机|8616 次阅读|1 个评论
在集群上提交计算任务的bsub脚本
qianlivan 2012-3-15 09:40
组里的小服务器坏了,两三天无米下锅。前天从老岳那里要了他在台里计算机集群的账号,准备在集群上试试水。在计算机集群上做计算和在单机上不同,除了编译程序可以在控制节点上进行,计算都必须放到计算节点上去。怎么弄?得用任务管理的程序,就是qsub、bsub之类。 集群的手册上有一个示例脚本,但是我拿过来用不了。因为脚本里运行的是gadget2,我得改成我自己要运行的程序。我原来一直想试着用用MHD模拟程序athena,所以借此机会就试一试。下载,安装都非常简单,要做计算的时候得稍微注意一下,对不同的问题在配置的时候得有相应变化,然后编译,得到可执行文件之后,运行的时候还得用相应的输入文件。理解这个过程以后就可以修改bsub脚本了。 bsub脚本开头就是指定计算的参数。 BSUB -q cpu_test 指定计算的队列名,这个得问管理员。队列名定了之后,计算单元的数量也就定了,二者必须匹配!这个也得问管理员。 BSUB -n 30 其他的就不是很关键了。真正运行程序的一句是 mpirun \$exefile -i \$infile Report0 2 Error0 意思就是运行需要mpi,执行\$exefile,输入文件是$infile,标准输出放到文件Report0中,出错信息放到文件Error0中。于是,最终,我的脚本如下。 #!/bin/sh # BSUB -q cpu_test # BSUB -a openmpi-qlc # BSUB -R 'select span ' # BSUB -o athena_out.test # BSUB -n 30 cd /~/compute/1D-hydro infile=/~/Athena/athena4.1/tst/1D-hydro/athinput.sod exefile=/~/Athena/athena4.1/bin/athena mpirun \$exefile -i \$infile Report0 2 Error0
个人分类: 知识|24954 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-3 16:03

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部