【问题标题】:How to check performance of parallel processing in matlab?如何在matlab中检查并行处理的性能?
【发布时间】:2014-08-29 05:08:58
【问题描述】:

为了检查 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

【问题讨论】:

    标签: performance matlab parallel-processing


    【解决方案1】:

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

    tic;
    t = toc;
    

    嗯,这会启动秒表并立即停止。是的,这大约需要0s。看看并行代码...

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2015-10-23
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多