是否可以使用使用的parfor并行计算在Matlab在这些代码?

2视图(30天)
我用 parfor Matlab的并行计算。我不熟悉这个命令。如果这是可能的,请看下面我的代码,告诉我如果我可以写 parfor 。这些错误和警告出现在Matlab编辑器:
parfor循环不能由于运行变量的Dat的方式使用。
整个数组或结构“绑定”是广播变量。这可能导致不必要的通信开销。
parforpj = 1:尺寸(normXpj, 1)
Dat。normXpj = normXpj (pj,:);
如果大小(Dat.InitialGuess) = = 0
X =(绑定(:1)+(绑定(:,2)绑定(:1))。*兰德(据Nvar, 1)) ';
其他的
X = Dat.InitialGuess;
结束
[Xsqp, ~,国旗,选项]= mopOPT (X, Dat);
函数宏指令= Options.funcCount;
菲斯=菲斯+函数宏指令;
PSet (pj:) = Xsqp;
PFront (pj:) =拖把(Xsqp Dat 0);
% disp ([' ExitFlag:“num2str(国旗)]);
如果标志= = 2
disp (“..........藻类帕索……”);
其他的
F = PFront (pj:);
如果Nobj = = 2
情节(F (1,1), F (1、2),“* r”);网格;持有;
elseifNobj = = 3
结束
结束
结束

接受的答案

Edric埃利斯
Edric埃利斯 2015年3月5日
这里的问题是,我们可以看到,你不使用order-dependent“大宇”的方式,但“parfor”的静态分析机械无法推断出,因为你分配的方式。我想你可以解决这一点,而不是创建一个全新的Dat每个迭代的循环,就像这样:
Dat =结构(“normXpj”1),兰德(10日,“InitialGuess”3);
normXpj =兰德(10);
parforidx = 1:10
tmpDat =结构(“normXpj”normXpj (: idx),“InitialGuess”,Dat.InitialGuess);
%使用“tmpDat”
disp (tmpDat);
结束
1评论
Jamais avenir
Jamais avenir 2015年3月5日
谢谢你,成功了。时间减少,结果有点倾斜(10 ^ 4)除了一次例(20)。减少偏差呢?也有办法打开所有内核在运行主代码之前?我使用“删除(gcp);parpool(“当地”,2)”,但如果我运行它在其他计算机4也许我必须改变它。同样,开核后我使用“暂停(5)”,使系统稳定,它真的帮助更快地运行的主要代码/ ?谢谢。

登录置评。

答案(1)

马特·J
马特·J 2015年3月4日
编辑:马特·J 2015年3月4日
你应该熟悉的材料分类变量parfor循环,
特别是这条线,
Dat。normXpj = normXpj (pj,:);
是不允许的。由于Dat广播变量,不能分配。它也没有意义,试图这样做。将不同的平行pj-dependent值分配给相同的值会导致parfor循环结束的时候一个不明确的值。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!