在matlab中使用parfor时出错

时间:2014-01-30 06:35:48

标签: matlab parallel-processing

我正在使用parfor来并行化matlab中的循环。代码如下:

   parfor i = 1:15

   tmp{i,1} = theta(i) * Fw{i,1}' * var1 * Wi{i,1} * var2 * Fw{i,1} ;

   end 

FW,Wi是包含矩阵的单元格。 var1,var2是矩阵。 Theta是一个载体。

当我执行此代码时,matlab会永远挂起,经过很长一段时间终止代码后,它会显示以下错误。

警告:评估侦听器回调时发生错误。

  

主要在58   使用main(第58行)

时出错

引起:     使用distcomp.remoteparfor / getCompleteIntervals

时出错

当我执行没有parfor的代码时,它工作正常。

完整代码如下:

Fw = cell(15,1);

Wi = cell(15,1);

tmp = cell(15,1);

for i  = 1 : 15
  Fw{i,1} = randn(25344);
  Wi{i,1} = randn(12672);
  theta(i) = 10;
end

var1 = randn(25344,12672);
var2 = randn(12672,25344);
parfor i = 1:15

   tmp{i,1} = theta(i) * Fw{i,1}' * var1 * Wi{i,1} * var2 * Fw{i,1} ;

end 

1 个答案:

答案 0 :(得分:1)

PARFOR旨在在单台计算机上运行,​​跨机器集群运行,并且工作进程不共享地址空间。因此,必须将所有数据复制到工作人员。在您的情况下,您正在将大量数据复制到12名工作人员中。我强烈怀疑您观察到的问题是由于数据传输的开销,以及每个工作人员都需要存储自己的var1var2副本。

我会尝试:从数组的小尺寸开始,并检查一切是否正常。随着您逐渐增加大小,您可能会发现因为机器内存不足而导致出现问题。

var1var2存储在sharedmatrix中可能有所帮助。