我怎么能避免把所有工作空间变量的工人在使用“parsim”?

42视图(30天)
我用“parsim”并行模拟模型。我在寻找一种将变量我需要工人,不使用选项“TransferBaseWorkspaceVariables”。
事实上,当我执行大量的变量得到非常大的和MATLAB崩溃到一半我的模拟。我相信这是内存问题转移相关的变量的每个员工。
我有另一种方法可以使用吗?

接受的答案

MathWorks支金宝app持团队
编辑:MathWorks支金宝app持团队 2021年10月8日
而不是整个工作空间转移到工人,您可以考虑转让只有几个变量的使用方法后,这两个利用其他属性的“parsim”功能:
1)通过使用“evalin”:
  • 您要转帐的变量保存到工人在垫子上文件,通过使用保存函数。
  • MAT文件作为附件添加到“parsim”模拟使用选项“AttachedFiles”。
  • 添加一个设置函数来模拟使用“SetupFcn”选项。这个函数会加载垫文件使用负载功能,但由于我们希望装运发生在工人,我们使用evalin功能:
> > evalin (“基地”,“负载MATFILE.mat”)
2)通过使用“assignin”:
  • 添加一个设置函数来模拟使用“SetupFcn”选项。这个函数会将一些变量分配给工人们的工作空间,通过使用assignin功能:
> > assignin (“基地”,“myvar# = 10;”)
这两种方法应该达到减少内存使用你正在寻找。让我知道如果这并非如此。最后需要注意的一点是,请不要忘了关掉“TransferBaseWorkspaceVariables”选项。
请找到更多信息的名称-值对“parsim”功能在以下页面的文档:
2的评论
约翰
约翰 2023年2月8日
编辑:约翰 2023年2月8日
这太棒了,谢谢。这为多个.mat文件工作吗?
我可以看到多个附加文件会被采用
“AttachedFiles”,attachmentCellArray
在哪里
attachmentCellArray = {“name1.mat”,“name2.mat”,“nameN.mat”}
但我不知道如何修改多个.mat evalin文件。我试着和它不工作:
@ ()evalin (“基地”,“负载name1.mat”,“负载name2.mat”,“负载nameN.mat”)

登录置评。

更多的答案(2)

马克斯·海尔宾
马克斯·海尔宾 2020年6月6日
我用一个 “SetupFcn” 初始化所有模型参数在每个并行工人。
simOut = parsim(思敏,“ShowSimulationManager”,“上”,
“ShowProgress”,“关闭”,
“UseFastRestart”,“上”,
“SetupFcn”@ ()fct_mySetUpFct);

克里希纳teja
克里希纳teja 2020年8月1日
这是对我工作的完整的解决方案
这不是限制 parsim 但总的来说将工人工作空间变量
transferVars (var1 var2)% var1转移,var2平行的工人。你可以向当地派遣更多的变量通过添加附加参数的功能
resetWorkers ()%清楚所有变量在所有工人
= checkWorkers ()%检查所有工人的工作空间
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% %本地函数
函数[]= transferVars (var1 var2)
抽搐;
F = parfevalOnAll (gcp、@TransferVars 0 var1 var2);
等待(F)
t = toc;
disp (“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -”)
流(|变量转移在% 4.3 f年代| \ n”t);
disp (“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -”)
结束
函数[]= resetWorkers ()
抽搐;
fclear = parfevalOnAll (gcp @ () evalin (“基地”,“清楚”),0);
t = toc;
disp (“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -”)
流(|工人工作区在% 4.3 f s厘清| \ n”t);
disp (“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -”)
结束
函数= checkWorkers ()
f = parfevalOnAll (gcp @ () evalin (“基地”,“谁”),1);
= fetchOutputs (f);
结束
函数[]= TransferVars (var1 var2)
assignin (“基地”,“var1”var1)
assignin (“基地”,“var2”var2)
结束

类别

找到更多的在启动和关闭帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!