Matlab 使用parfor的Simulink仿真(并行计算)
今天我问了一个关于MatlabSimulink并行计算的问题。因为我前面的问题有点混乱,代码中有很多东西不属于这个问题 我的问题是 我想在parfor循环中模拟一些东西,而我的Simulink模拟使用“来自工作区”块将工作区中所需的数据集成到模拟中。由于某种原因,它不起作用 我的代码如下所示:Matlab 使用parfor的Simulink仿真(并行计算),matlab,parallel-processing,simulink,parfor,Matlab,Parallel Processing,Simulink,Parfor,今天我问了一个关于MatlabSimulink并行计算的问题。因为我前面的问题有点混乱,代码中有很多东西不属于这个问题 我的问题是 我想在parfor循环中模拟一些东西,而我的Simulink模拟使用“来自工作区”块将工作区中所需的数据集成到模拟中。由于某种原因,它不起作用 我的代码如下所示: load DemoData path = pwd; apool = gcp('nocreate'); if isempty(apool) apool = parpool('local'); en
load DemoData
path = pwd;
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
parfor k = 1 : 2
load_system(strcat(path,'\DemoMDL'))
set_param('DemoMDL/Mask', 'DataInput', 'DemoData')
SimOut(k) = sim('DemoMDL')
end
delete(apool);
我的模拟如下所示
解调数据文件只是一个零(100,20)矩阵。这是数据的一个例子
现在,如果我模拟脚本,将出现以下错误消息:
错误
使用DemoScript时出错(第9行)
评估“DemoMDL/Mask”中的参数“DataInput”时出错
原因:
现在你知道为什么会这样吗
奇怪的是,如果我尝试访问parfor循环中的“DemoData”,它就会工作。以该代码为例:
load DemoData
path = pwd;
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
parfor k = 1 : 2
load_system(strcat(path,'\DemoMDL'))
set_param('DemoMDL/Mask', 'DataInput', 'DemoData')
fprintf(num2str(DemoData))
end
delete(apool);
这是我的输出,没有模拟和显示数据
“>>”演示脚本
00000000000000000
非常感谢。这是原始问题,有很多(不必要的)细节:
您的错误是因为工作人员无法访问客户端工作区中的解调数据 在使用Simulink运行并行仿真时,如果将数据从工作区移动到模型工作区,将更容易管理数据。然后,每个工人都可以从其模型工作区访问此数据。您可以加载MAT文件或编写MATLAB代码来初始化模型工作区中的数据。您可以使用Simulink模型菜单“视图->模型资源管理器->模型工作区”访问模型工作区
另请参阅关于“解决工作区访问问题”的文档。我怀疑问题在于,当MATLAB对
parfor
循环进行预处理以确定需要传递给工人的变量时,它不知道什么是DemoData
。在第一个示例中,它只是一个字符串,因此不会发送任何数据。在第二个示例中,它明确地知道变量,因此确实传递了它
您可以尝试使用模型工作区,或者只是插入行
DemoData=DemoData代码>
在parfor
循环代码中
load DemoData
path = pwd;
apool = gcp('nocreate');
if isempty(apool)
apool = parpool('local');
end
parfor k = 1 : 2
load_system(strcat(path,'\DemoMDL'))
set_param('DemoMDL/Mask', 'DataInput', 'DemoData')
fprintf(num2str(DemoData))
end
delete(apool);