Matlab Parfor比以前慢得多 - 即使是可笑的并行程序

时间:2015-08-18 22:12:07

标签: matlab parallel-processing parfor

我比较了以下代码。 串行:

N = 500;
M = rand(500,500,N);
R = zeros(500,500,N);
tic
for k = 1:N
    R(:,:,k) = inv(M(:,:,k));
end
toc

并行:

N = 500;
M = rand(500,500,N);
R = zeros(500,500,N);
tic
parfor k = 1:N
    R(:,:,k) = inv(M(:,:,k));
end
toc

我知道串行时间比并行时间短3倍 - 尽管我有4个似乎正在使用的可用本地核心。 对于它为什么会发生的任何想法?

1 个答案:

答案 0 :(得分:1)

请记住,许多MATLAB操作(特别是大型线性代数操作)本质上是多线程的。在这种情况下,inv是多线程的,并且是for循环中的主导因素。当您将其转换为parfor循环时,如果您只有'local'群集类型可用,则parfor中的可用计算核心数量不会超过for中的计算核心数量。因此,parfor循环只需必须for循环慢,因为它必须将数据传输给工作人员才能进行操作。

一般情况下,如果只有'local'个工作人员可用,那么只有当MATLAB无法多线程化parfor循环体时,for才能击败for。 / p>