matlab分布式计算报告,简单的matlab分布式计算

matlab的分布式计算可以理解为一台机器作为client(主控机),其他的机器分别作为计算的结点,要由client进行控制和操作。如果把单机上的.m文件直接放到client运行,是不会产生分布式计算的效果的,只相当于在主控机进行了计算,而其他的结点都还处于闲置状态。要想使用所有的结点或者部分结点进行计算,必须使用findResource()找到可利用的闲置cpu,使用createJob()创建工作,再使用createTask()为工作分配一个或多个任务,最后提交工作,这样,计算任务才分配到各个结点上。

分布式计算的环境是需要配置的,但是我使用的环境是学院的刀片机,已经被配置好了,运行的时候直接用ssh或者xmanager 登陆,所以对这一部分不了解。假设环境已经配置好了,想要进行分布式计算,一般写一个主函数,进行分布式计算的资源分配下发任务。

举例来说,如果要调用FunA和FunB(一般FunA和FunB是相互独立的),并且FunA要调用目录下的sub_floderA文件夹,FunB要调用目录下的sub_floderB文件夹,则把FunA、FUnB、sub_floderA、sub_floderB都拷贝到主控机的matlab的工作目录下,在这个目录下再建立main.m(当然也可以是其他名字),假设当前控制机的matlab的工作目录是 ”/hpc/home/myTask“,则main.m应如所示:

clear;clc;

sched = findResource();

%findResource默认可以无参,让matlab自己去找可用的资源,但最好自己分配一下,

%也可以调用已有的配置文件

job=createJob(sched);

%将当前工作所需要的目录及文件拷贝至各个结点,如果想调用自定义的函数,这一步几乎是必须的。

set(job,'FileDependencies',{'/hpc/home/myTask/sub_floderA' '/hpc/home/myTask/sub_floderB' 'Fun_A.m' 'Fun_B.m'});

%也可以用下面这个将所有需要的路径共享给各个计算结点,但我用这个没有成功,好像要先设置文件共享才行

%set(job,'pathDependencies',{'...' '...'})

%用FileDependencies的方法虽然麻烦一点,但拷贝的方法可能会稳定些

job,%这里可以让job显示一下,以确认工作目录等是否都分配正确了。

createTask(job,@FunA,2,{});%2表示FunA的返回参数个数,{}里是FunA的参数,如果无参,就写{}

createTask(job,@FunB,3,{para1,para2}); %3表示FunB的返回参数个数,{}里是FunB的参数

submit(job);

waitForState(job,'finished');

results = getAllOutputArguments(job);

save('result.mat','results');

%因为分布式计算一般都是远程登录控制机,所以最好把结果保存下来,再用FTP等工具传回本地查看。

%还有一个好的习惯是FunA和FunB中也写下save语句,将计算结果保存下来,

%此时的save应该是控制节点%的绝对地址,

%如要在FunA中写下保存FunA的运算结果,则应写如下语句:

%save('/hpc/home/myTask/resultOfFunA.mat','result');

%将结果保存到控制节点的工作目录下

destroy(job);

此时,执行main,便可在分布环境下执行FunA和FunB。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值