Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

通过在远程集群上运行模拟来卸载计算机上的工作

最近,我注意到,当我在当前文件夹浏览器中右键单击MATLAB脚本时,有一个选项可以将脚本作为批处理作业运行。

将脚本作为批处理作业运行

你可以猜到,当我想到的第一件事是:我想要同样的东西来模拟一个Simulink模型!金宝app

看看我想到了什么。

背景

对于那些不熟悉的人并行计算工具箱,你可能会想:什么是批处理作业?

作为这里介绍的,批处理命令可以在后台启动一个新的MATLAB会话,并在那里运行脚本或函数。然后,您可以继续在当前的MATLAB会话中工作,而不需要等待脚本完成。

将脚本作为批处理作业运行

除了并行计算工具箱,如果您还可以访问一个MATLAB分布式计算服务器时,可执行批处理作业远程集群,让机器的所有计算能力执行其他任务。

将脚本作为批处理作业运行

我的解决方案

我认为不可能在当前文件夹浏览器的右键菜单中添加条目,所以我决定使用一个sl_customization文件中添加一个新的模拟为批处理作业在Simulink编辑器的“仿真”菜单中输入。金宝app

金宝appSimulink作为批处理作业菜单

我将菜单项与以下函数关联:

金宝appSimulink作为批处理作业代码

让我们看看它能做什么以及为什么。

文件的依赖关系

如果尝试在远程集群上模拟模型,首先会注意到的一件事是,您的工作通常依赖于许多文件。

如果您的远程集群可以访问与本地MATLAB相同的文件系统,我建议您充分利用这一点,这将大大简化您的工作。只需将相同的路径添加到批处理作业中,就可以帮助避免丢失任何文件依赖项。

在我的例子中,我有一个Windows工作站,集群操作系统是Linux,它们不共享一个公共文件系统。这意味着我需要将文件附加到作业中。的批处理命令能够分析代码的依赖关系并自动将文件附加到作业。然而,这个功能在Simulink模型中并不能很好地工作。金宝app

正因为如此,我做的第一件事就是打电话dependencies.fileDependencyAnalysis找到模拟我的模型所需的所有文件。在我正在使用的示例中,它找到了模型preLoadFcn回调中使用的初始化脚本、模型本身和引用的模型。

文件的依赖关系

在正确的地方获取数据

正如我在以前的文章在美国,当通过并行计算工具箱使用Simulink时,让它看到所需的数据有金宝app时会很棘手。一件有帮助的事情是通过使用将模型所需的数据强制放到基本工作区中evalinassignin

为了让模型与我的菜单项一起工作,模型需要自己创建所需的所有数据,并将其放置在基本工作区中。我推荐的方法是通过model preLoadFcn回调

preLoadFcn

创建工作

现在可以创建批处理作业了。我传递到批处理集群在哪里运行,句柄到sim卡命令,通知它sim卡将返回一个变量,并将模型名作为输入。我告诉它不要试图分析我的文件,并自动附加它们。相反,我将上面提到的文件列表传递给它。最后,我告诉它不要尝试cd到我的Windows工作站的当前目录…因为它在Linux集群上不存在。

创建批作业

最后,在本地基本工作空间中分配批处理作业对象。

批处理作业对象

工作完成后,使用fetchOutputs方法检索模拟输出

一些小建议…

第一次尝试模拟您的模型时,您很可能会遇到各种问题。由于并行工作线程是在后台运行的,所以有时会感觉像是被蒙住了眼睛进行调试。这里有一些我喜欢用的技巧:

  • 要了解工作线程上出了什么问题,请尝试在工作线程命令提示符上显示信息。方法在作业完成时可以对其进行可视化日记函数。之类的函数松材线虫病而且dir通常都是很好的起点。
  • 如果您的Simu金宝applink模型出现错误,请尝试将sim卡命令,并将错误作为输出返回,而不是模拟日志。有时错误消息包含多个级别,获取完整的错误对象应该会有所帮助。
  • 要在worker上交互式地调试问题,请尝试使用usingpctRunOnAll.与上面的日记技巧类似,尝试运行如下命令松材线虫病dir等要求工人诊断可能的问题。

  • 现在轮到你了

    我们目前正在研究一些特性,以便在未来的版本中实现这个工作流,但是对于当前的版本,我希望这篇博文能够帮助您利用您的集群来运行模拟。

    我不能保证我sl_customization将适用于所有模型,但我相信它将适用于许多设置。如果没有,我希望这可以作为一个起点帮助您在远程集群上模拟模型。

    试一试,让我们知道它是如何进行的这里的评论

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。