【问题标题】:Performance improvement of simulink coder over accelerated modelssimulink 编码器相对于加速模型的性能改进
【发布时间】:2013-08-13 04:14:32
【问题描述】:

我想知道是否有一些经验,使用 Simulink Coder 生成模型比在(快速)加速器模式下运行模型可以获得多少性能?

例如,它与从非加速模型到加速模型的显着改进相比如何?

我知道这有点含糊,可能取决于模型的具体情况,但我会对示例性数字感到满意。

【问题讨论】:

  • 您获得多少加速取决于您为 SFunction 编写的 C 代码的优化程度...
  • 您是否尝试通过使用 Simulink Coder 生成代码然后在 Simulink 外部运行来模拟模型?
  • 简而言之:我不知道 ;) 这是关于一个通用应用程序,它应该能够将 simulink 模型(从微不足道的增益块到受保护的 s 功能块)作为一种插入。应用程序本身通常是关于分析/可视化(例如)simulink 模型的输出。这些模型可能会运行数千次。所以我想知道编码器在性能方面是否物有所值......

标签: matlab simulink


【解决方案1】:

我不知道您是否真的会发现速度改进轶事有帮助,因为您的结果将高度依赖于您自己的实施。

也就是说,How Acceleration Modes Work 上的以下参考资料可能对您有用。

如本链接所述...

加速器模式生成代码并将其链接到 C-MEX S-函数。 Simulink 使用此加速目标代码 执行模拟...

...模型方法与 Simulink 分离 软件并且是加速目标代码的一部分。一个 C-MEX S-Function API 与 Simulink 软件和 MEX API 通信 与 MATLAB 通信。目标代码在同一个进程中执行 作为 MATLAB 和 Simulink。

该链接继续描述快速加速,如下所示:

Rapid Accelerator 模式创建独立的 Rapid Accelerator 从您的模型可执行。该可执行文件包括求解器和 模型方法,但它位于 MATLAB 和 Simulink 之外。它用 与之通信的外部模式(请参阅主机/目标通信) Simulink。

(请注意,实际链接中有一些很好的图表可以帮助说明此架构)。

我认为从这些描述中可以看出一些重要的东西。首先,在加速器模式下,只为模型方法生成代码;但是,在 Rapid Accelerator 模式下,也会为求解器生成代码。在任何一种情况下,由于生成的代码和 Simulink 之间的通信都会产生一些开销(尽管通常在非快速加速器模式下开销会更大)。

现在,您是否会看到这些加速模式和完整代码生成之间的显着差异很可能取决于您将如何使用生成的代码。您曾说过您的应用程序旨在从本质上分析/可视化 simulink 模型的输出。您是否打算让您的应用程序本身成为 Simulink 模型?如果是这样,我想您的工作流程将是您为“插件”模型生成代码,然后将其作为 s-function 合并到您的“父”模型中。根据上面给出的描述,我的直觉是,与加速器模式相比,您不会看到太多的性能提升。

但是,如果您的应用程序要在 Simulink 之外实现,那么代码生成肯定是可行的方法。在这种情况下,您已经完全消除了与 Simulink 通信的开销。例如,在此工作流程中,您可以从“插件”模型生成一个独立的可执行文件,执行该模型以获取输出,然后简单地将这些输出加载到您的应用程序中进行分析和可视化。您的应用程序可以用您想要的任何语言编写。事实上,您甚至还可以在 MATLAB 中编写应用程序——不过,关键是您的应用程序在独立可执行文件(从“插件”模型生成)完成后运行 执行,而不是与插件模型交互它正在执行。

【讨论】:

  • 是的,总结得差不多了!另一个比较不同模拟模式性能的有用链接:mathworks.com/help/simulink/ug/comparing-performance.html
  • 我也遇到过这些链接/手册。不幸的是,“比较性能”图不包括“Simulink Coder”行,这是我最初试图找到的。两种加速器模式已经在某种程度上产生了编译模型,这让我想到代码生成是否会在性能方面有所改善。同时,我对此表示怀疑……但很明显,性能并不是代码生成工具箱的“声明”目标。
  • 我大体上同意。 Simulink Coder 的主要目的是允许生成独立代码,并且在很大程度上,没有 Simulink Coder,代码生成的速度改进方面已经可用。还有其他需要考虑的事情——与其为 Simulink Coder 买单,不如研究一下 matlab/simulink 的并行计算工具。您对用例的描述听起来有点像蒙特卡洛方法。如果您计划运行的数千个模拟可以并行化,那将显着加快速度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多