2014-08-29 43 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读取它。你的代码启动秒表两次并读取一次,它应该只开始计时一次。