matlab分布式计算报告,简单的matlab分布式计算
matlab的分布式計(jì)算可以理解為一臺(tái)機(jī)器作為client(主控機(jī)),其他的機(jī)器分別作為計(jì)算的結(jié)點(diǎn),要由client進(jìn)行控制和操作。如果把單機(jī)上的.m文件直接放到client運(yùn)行,是不會(huì)產(chǎn)生分布式計(jì)算的效果的,只相當(dāng)于在主控機(jī)進(jìn)行了計(jì)算,而其他的結(jié)點(diǎn)都還處于閑置狀態(tài)。要想使用所有的結(jié)點(diǎn)或者部分結(jié)點(diǎn)進(jìn)行計(jì)算,必須使用findResource()找到可利用的閑置cpu,使用createJob()創(chuàng)建工作,再使用createTask()為工作分配一個(gè)或多個(gè)任務(wù),最后提交工作,這樣,計(jì)算任務(wù)才分配到各個(gè)結(jié)點(diǎn)上。
分布式計(jì)算的環(huán)境是需要配置的,但是我使用的環(huán)境是學(xué)院的刀片機(jī),已經(jīng)被配置好了,運(yùn)行的時(shí)候直接用ssh或者xmanager 登陸,所以對這一部分不了解。假設(shè)環(huán)境已經(jīng)配置好了,想要進(jìn)行分布式計(jì)算,一般寫一個(gè)主函數(shù),進(jìn)行分布式計(jì)算的資源分配下發(fā)任務(wù)。
舉例來說,如果要調(diào)用FunA和FunB(一般FunA和FunB是相互獨(dú)立的),并且FunA要調(diào)用目錄下的sub_floderA文件夾,FunB要調(diào)用目錄下的sub_floderB文件夾,則把FunA、FUnB、sub_floderA、sub_floderB都拷貝到主控機(jī)的matlab的工作目錄下,在這個(gè)目錄下再建立main.m(當(dāng)然也可以是其他名字),假設(shè)當(dāng)前控制機(jī)的matlab的工作目錄是 ”/hpc/home/myTask“,則main.m應(yīng)如所示:
clear;clc;
sched = findResource();
%findResource默認(rèn)可以無參,讓matlab自己去找可用的資源,但最好自己分配一下,
%也可以調(diào)用已有的配置文件
job=createJob(sched);
%將當(dāng)前工作所需要的目錄及文件拷貝至各個(gè)結(jié)點(diǎn),如果想調(diào)用自定義的函數(shù),這一步幾乎是必須的。
set(job,'FileDependencies',{'/hpc/home/myTask/sub_floderA' '/hpc/home/myTask/sub_floderB' 'Fun_A.m' 'Fun_B.m'});
%也可以用下面這個(gè)將所有需要的路徑共享給各個(gè)計(jì)算結(jié)點(diǎn),但我用這個(gè)沒有成功,好像要先設(shè)置文件共享才行
%set(job,'pathDependencies',{'...' '...'})
%用FileDependencies的方法雖然麻煩一點(diǎn),但拷貝的方法可能會(huì)穩(wěn)定些
job,%這里可以讓job顯示一下,以確認(rèn)工作目錄等是否都分配正確了。
createTask(job,@FunA,2,{});%2表示FunA的返回參數(shù)個(gè)數(shù),{}里是FunA的參數(shù),如果無參,就寫{}
createTask(job,@FunB,3,{para1,para2}); %3表示FunB的返回參數(shù)個(gè)數(shù),{}里是FunB的參數(shù)
submit(job);
waitForState(job,'finished');
results = getAllOutputArguments(job);
save('result.mat','results');
%因?yàn)榉植际接?jì)算一般都是遠(yuǎn)程登錄控制機(jī),所以最好把結(jié)果保存下來,再用FTP等工具傳回本地查看。
%還有一個(gè)好的習(xí)慣是FunA和FunB中也寫下save語句,將計(jì)算結(jié)果保存下來,
%此時(shí)的save應(yīng)該是控制節(jié)點(diǎn)%的絕對地址,
%如要在FunA中寫下保存FunA的運(yùn)算結(jié)果,則應(yīng)寫如下語句:
%save('/hpc/home/myTask/resultOfFunA.mat','result');
%將結(jié)果保存到控制節(jié)點(diǎn)的工作目錄下
destroy(job);
此時(shí),執(zhí)行main,便可在分布環(huán)境下執(zhí)行FunA和FunB。
總結(jié)
以上是生活随笔為你收集整理的matlab分布式计算报告,简单的matlab分布式计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1602液晶显示摄氏度
- 下一篇: 一些公司的笔试题