matlabpool open 4;%打開四個線程
B=zeros(1,5);
parfor i=1:5
a=i;
B(1,i)=a;
end
matlabpool close
B
Libing Wang
師弟用過,比如對PCA 20次隨機分割肯定能這么用,這樣會提高CPU的利用效率,幾個核同時用

一個使用parfor-loop的例子:
%example of parfor-loop %本地worker數通常等于cpu的核數
matlabpool
open local 2;
parfor
i=1:1024
A
(i) = sin(i*2*pi/1024);
end
plot(A);
matlabpool
close;

設機器的CPU核心數量是CoreNum雙核機器的CoreNum2,依次類推。CoreNum以不等于核心數量,但是如果CoreNum小于核心數量則核心利用率沒有最大化,如果CoreNum大于核心數量則效率反而可能下降(如何看計算機有幾個核?Weiqiang說任務管理器->性能,看CPU使用記錄有幾個就是幾個核)。因此單核機器就不要折騰并行計算了,否則速度還更慢。下面一段代碼初始化Matlab并行計算環境:

%Initialize Matlab Parallel Computing Enviornment by Xaero | Macro2.cn

CoreNum=2; %設定機器CPU核心數量,我的機器是雙核,所以CoreNum=2

if matlabpool('size')<=0 %判斷并行計算環境是否已然啟動

matlabpool('open','local',CoreNum); %若尚未啟動,則啟動并行環境

else

disp('Already initialized'); %說明并行環境已經啟動。

end

運行成功后會出現如下語句:

Starting matlabpool using the 'local' configuration ... connected to 2 labs.

成運行計算后可以將其關閉。關閉的命令很簡單:

matlabpool close

另外一個問題就是并行代碼做模擬的次數問題。我們要達到用非并行的代碼做N此模擬所能得到結果的精確程度,在核心為CoreNum并行代碼中,Parfor語句段中只要做N/CoreNum次即可達到。

read twice http://blog.sciencenet.cn/blog-419879-444784.html, no need to see again


但下面例子是可以的,parfor內部可以有for(parfor本身也不支持嵌套,將for j 改為parfor,兩重parfar不行)

matlabpool open local 2;

parfor i=1:1024

A(i) = sin(i*2*pi/1024);

for j=1:10

B(i,j)=A(i)*j;

end

end

matlabpool close;

這段代碼沒有問題,不知我的Test_GLA_DLSR_FS_ServerVersion_outerParFor,沒有r = zeros(length_d,1);就不行,提示rate can not be classified.Weiqiang討論,他也沒遇到這種錯誤,只是想辦法用替代方法解決
解決方案:最內層的循環用parfor(Weiqiang說未必要這樣);幾個內層串行for,相互沒有關聯,可以一起parforparfor內部不能有clearsave,因為parfor內部有了clearsave,對應的clearsave會顯示紅色。This is with Dong Cao's help.
解決方案:Weiqiangparfor內部是可以有for循環的,他講是可以有clearload的,封裝成一個函數my_clear(隨便什么函數名字都行)調用clear即可,load類似,但save不行。

錯誤實現
function my_load1(filename)
load(filename);
end
正確實現
function S = my_load(filename)
S = load(filename);
end

Weiqiang討論,他也沒說清楚原因。

function my_clear(name1)

clear name1;

    end

clear的用法有很多種,Weiqiang講只能寫死一種。

Test_GLA_DLSR_FS_ServerVersion_outerParFor

The client lost connection to lab 4. This might be due to network problems, or

the interactive matlabpool job might have errored.Weiqiang說這種問題沒法解決,

是通訊問題
在本機程序沒耗100%CPU和內存,到服務器上跑會不會快點,Weiqiang講會快點,但快不了多少。他在du公司服務器速度也和lab服務器速度速度差不多,關鍵程序本身很慢,租服務器還是很慢。