如何在matlab中检查并行处理的性能?

时间:2014-08-29 05:08:58

标签: performance matlab parallel-processing

为了检查并行处理在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

1 个答案:

答案 0 :(得分:2)

查看(显然)执行代码的串行版本的时间,它实际上是0。这是可疑的,所以看看代码......

tic;
t = toc;
嗯,这会启动秒表并立即停止。是的,那应该是0s。看一下并行代码......

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

啊,在这种情况下,代码会执行关闭工作池的时间。这需要相当多的工作,所需的时间3.33s是在Matlab中使用并行计算的开销的一部分。

是的,我确实相信你做错了什么,你没有衡量你(可能)认为你在衡量的东西。 tic启动秒表并toc读取它。你的代码启动秒表两次并读取一次,它应该只开始计时一次。