【发布时间】:2016-10-11 03:04:35
【问题描述】:
我正在开展一个项目,其中并行计算将是一个巨大的优势。该项目模拟了多个Simulink 模型。我使用普通的 for 循环进行了模拟,但由于模拟需要几天时间,我决定尝试 "parfor"-Loop。
但这就是问题的开始。首先,我会给你我的代码、工作区和给我带来问题的 Simulink-part 的图片:
这是我的代码:
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
wpath = pwd;
parfor k = 1:number_of_models
load_system(strcat(wpath,'\Models_Folder\',House(k).model_name));
set_param(House(k).model_name, 'Stoptime', num2str(foreruntime));
set_param(House(k).mask_name, 'Data_contr', num2str(controlvector(k)));
set_param(House(k).mask_name, 'Data_cons', strcat('GlobalData(',num2str(k),').consume.',MaskParam(k).consume_input))
SimOut(k) = sim(House(k).model_name);
end
delete(apool);
令人困惑的是,如果我删除该列:
SimOut(k) = sim(House(k).model_name);
代码运行良好 -> modelparameters 设置在 parfor loop 中
但如果我不删除该列,则会出现以下错误:
Error using Forerunsimple (line 9)
Error evaluating parameter 'Data_cons' in 'model_house_14/House'
Caused by:
Error using parallel_function>make_general_channel/channel_general (line 907)
Error evaluating parameter 'Data_cons' in 'model_house_14/House'
Error using parallel_function>make_general_channel/channel_general (line 907)
Undefined variable "GlobalData" or class "GlobalData".
正如您在图片中看到的,变量"GlobalData" 是在工作区中定义的。所以在我看来它应该工作。显然不是。您知道可能是什么问题吗?
【问题讨论】:
-
嗨,Elias,欢迎来到 SO!您的帖子不错,但您必须考虑将代码作为文本发布在您的问题中,而不是作为屏幕截图!
-
感谢您的帮助 :) 当然将代码作为文本发布更有意义,我会记住这一点。我对 SO 和 Matlab-Simulink-Coding 很陌生,所以请原谅我对某些事情的不了解 :)
-
是的,当然,对我来说没问题。这里的老人们应该帮助新人。请注意,有些是艰难的。不要以个人名义冒犯。
标签: matlab parallel-processing simulation simulink parfor