将相同的变量名称导致parfor冲突

时间:2013-11-11 11:21:09

标签: matlab parfor

我有一个像这样的基本代码:

parfor i=1:8
    [t,y]=ode15s(@rate,tspan,cin,options,i); % the option i is evaluated in the rate function
    figure(1)
    subplot(3,3,i+1)
    plot(t,y)
    hold on
end

是否会出现任何冲突,因为变量名y在所有迭代中都相同?

2 个答案:

答案 0 :(得分:3)

不,每个工人都有自己独特的命名空间。

但是,工作人员无法打开客户端上显示的数字(感谢提醒,@ Edric),因此调用ode15s后的所有内容都不会产生任何有用的结果。

要在parfor循环之外移动绘图,您可以执行以下操作(有更有效的解决方案,这个肯定会有效):

tCell = cell(8,1);
yCell = cell(8,1);
parfor i=1:8
    [tCell{i},yCell{i}]=ode15s(@rate,tspan,cin,options,i); % the option i is evaluated in the rate function

end

figure(1)
for i=1:8
   subplot(3,3,i+1)
   plot(tCell{i},yCell{i})
   hold on
end

答案 1 :(得分:1)

继续@Jonas的回答之后,只需注意一点,如果您使用的是R2013b或更高版本,并且希望在等待并行计算完成时显示图形,则可以使用PARFEVAL ,例如:http://www.mathworks.co.uk/help/distcomp/examples/parfeval-blackjack.html