2012-07-10 60 views
0

我想對一些計算,我想這樣做並行使用PARFOR或通過打開matlabpool ..作爲當前實現速度太慢:Matlab的並行for循環或Matlab開放游泳池

result=zeros(25,16000); 
for i = 1:length(vector1) % length is 25 

    for j = 1:length(vector2) % length is 16000 

       temp1 = vector1(i); 
       temp2 = vector2(j); 
       t1 = load(matfiles1(temp1).name) %load image1 from matfile1 
       t2 = load(matfiles2(temp2).name) % load image2 from matfile2 
       result(i,j)=t1.*t2 
    end 
end 

其工作正常,但我真的很想知道是否有辦法加快速度...... 非常感謝!

+0

每個圖像文件的大小是多少?一個簡單的優化就是簡單地將't1'加載線移出內部循環。 – Ansari 2012-07-10 04:05:39

+0

尺寸爲240 * 320;做了t1優化,但速度沒有太大差別... – Ash 2012-07-10 04:15:13

回答

1

使用parfor循環並打開matlabpool一起去。打開matlabpool爲您的MATLAB會話提供專門的工作人員,用它可以運行您的parfor循環的主體。所以,你可以更改您的代碼是這樣的:

matlabpool open local 4 % or however many cores you have 
parfor i = ... 
    ... 
end 

並行運行代碼之前,我肯定會推薦使用MATLAB profiler以確保您瞭解正在那裏度過的時間運行代碼。 (我有點驚訝,將load提升爲t1進入外部循環沒有任何影響 - 因此,探查器可能應該顯示load調用與其他算法相比所花費的時間很少)。

+0

當我將t1移到外部循環時,從132秒到122秒有一個下降。但是,當我使用parfor和matlab打開時,我沒有看到任何真正的改進......並且我收到了一條消息,以修復代碼 – Ash 2012-07-10 06:31:11

+0

中的切片變量問題您正在使用哪種MATLAB版本?另外,我是否正確理解您有16000個單獨的文件,每個文件都包含一個標量值? – Edric 2012-07-10 10:29:23

+0

是.. 16000圖像 – Ash 2012-07-11 00:26:09