Matlab 使用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

今天我问了一个关于MatlabSimulink并行计算的问题。因为我前面的问题有点混乱,代码中有很多东西不属于这个问题

我的问题是

我想在parfor循环中模拟一些东西,而我的Simulink模拟使用“来自工作区”块将工作区中所需的数据集成到模拟中。由于某种原因,它不起作用

我的代码如下所示:

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);