【发布时间】:2015-06-29 08:15:17
【问题描述】:
我尝试使用parfor 命令循环运行模型。
于是我写了如下代码:
% control_model.m
warning('off', 'Simulink:Engine:UsingDefaultMaxStepSize');
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
load_system('mymodel');
tic
parfor w=1:10
warning('off', 'Simulink:Engine:UsingDefaultMaxStepSize');
w_str=num2str(w);
set_param('mymodel/mysystem','sys', ['tf(',w_str,',[1 ',w_str,'])'] )
sim('mymodel',[],[])
drawnow
end
toc
close_system('mymodel',0);
% delete(poolobj)
然后我会得到以下错误:
使用 control_model 时出错(第 11 行)
无效的 Simulink 对象名称:mymodel/mysystem
如果我再次运行它,我会得到同样的错误(尽管使用for 而不是parfor 可以解决这个错误)。
但如果我在parfor 后面加上load_system('mymodel'); 并运行一次,问题就解决了。即使我删除了load_system 命令,下一次也不会显示错误。
我有兴趣了解幕后发生的事情,以及为什么即使我多次运行程序,第一个 load_system 也无法解决问题。而parfor 中的那个即使在下次调用脚本时被删除也能解决问题?
【问题讨论】:
标签: matlab parallel-processing simulink parfor