SilentStorm的个人博客分享 http://blog.sciencenet.cn/u/SilentStorm

博文

使用Matlab MDCS在计算机集群上做并行计算

已有 8594 次阅读 2016-1-6 19:28 |个人分类:计算机|系统分类:科研笔记|关键词:学者| MATLAB, 并行计算, 计算机集群, 超算, MDCS

因为要做大量仿真运算,辗转找到了可以使用的集群。好好研究了如何使用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天才找到这个错误。。。





https://m.sciencenet.cn/blog-2958868-948568.html


下一篇:qsub 使用知识积累

1 王生亮

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...
扫一扫,分享此博文

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

GMT+8, 2024-5-21 06:40

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部