我正在使用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
答案 0 :(得分:1)
PARFOR旨在在单台计算机上运行,跨机器集群运行,并且工作进程不共享地址空间。因此,必须将所有数据复制到工作人员。在您的情况下,您正在将大量数据复制到12名工作人员中。我强烈怀疑您观察到的问题是由于数据传输的开销,以及每个工作人员都需要存储自己的var1
和var2
副本。
我会尝试:从数组的小尺寸开始,并检查一切是否正常。随着您逐渐增加大小,您可能会发现因为机器内存不足而导致出现问题。
将var1
和var2
存储在sharedmatrix中可能有所帮助。