2014-08-29 45 views
0

只是爲了檢查matlab中的並行處理是如何工作的,我嘗試了下面的一段代碼並測量了執行時間。但是我發現並行處理代碼比意想不到的普通代碼花費更多時間。我在某處做錯了嗎?如何檢查matlab中的並行處理性能?

代碼與並行處理

function t = parl() 
matlabpool('open',2); 
tic; 
A = 5:10000000; 
parfor i = 1:length(A) 
    A(i) = 3*A(i) + (A(i)/5); 
    A(i) = 0.456*A(i) + (A(i)/45); 
end 
tic; 
matlabpool('close'); 
t = toc; 
end 

有導致用於並行處理

>> parl Starting matlabpool using the 'local' profile ... connected to 2 workers. Sending a stop signal to all the workers ... stopped. 

ans = 

    3.3332 


function t = parl() 
tic; 
A = 5:10000000; 
for i = 1:length(A) 
    A(i) = 3*A(i) + (A(i)/5); 
    A(i) = 0.456*A(i) + (A(i)/45); 
end 
tic; 
t = toc; 
end 

結果爲沒有並行處理代碼

>> parl 

ans = 

    2.8737e-05 

回答

2

看時間到(顯然)執行該串行版本的代碼,它實際上是0。這是可疑的,所以看代碼...

tic; 
t = toc; 

嗯,這啓動一個秒錶,並立即停止它。是的,這應該需要大約0s。看看並行代碼...

tic; 
matlabpool('close'); 
t = toc; 

啊,在這種情況下代碼的時間執行關閉的工人池。這需要一定的工作量,所需的時間,3.33s,是在Matlab中使用並行計算開銷的一部分。

是的,我相信你做錯了什麼,你沒有測量你(可能)認爲你正在測量的東西。 tic開始秒錶,toc讀取它。你的代碼啓動秒錶兩次並讀取一次,它應該只開始計時一次。