Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

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

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

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

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

让我们看看我想出了什么。

背景

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

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

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

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

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

我的解决方案

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

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

我将菜单项与以下功能关联起来:

金宝app作为批处理作业代码的Simulink

让我们看看它的作用和原因。

文件的依赖关系

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

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

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

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

文件的依赖关系

在正确的地方获取数据

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

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

preLoadFcn

创建工作

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

创建批处理作业

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

批处理作业对象

任务完成后,使用fetchOutputs方法检索模拟输出

一些小建议……

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

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

  • 现在轮到你了

    我们目前正在开发一些功能,以便在未来的版本中简化这个工作流,但对于当前的版本,我希望这篇博文能够帮助您利用集群来运行模拟。

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

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

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处2017-07-29 13:313:00