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。
總結
以上是生活随笔為你收集整理的matlab分布式计算报告,简单的matlab分布式计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1602液晶显示摄氏度
- 下一篇: matlab人脸追踪,求大神帮助我这个菜