1

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

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

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

4

1 回答 1

2

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

也就是说,以下关于加速模式如何工作的参考资料可能对您有用。

如此链接中所述...

加速器模式生成代码并将代码链接到 C-MEX S-Function。Simulink 使用此加速目标代码来执行仿真...

...模型方法独立于 Simulink 软件,是 Acceleration 目标代码的一部分。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 中编写您的应用程序——关键点是,一旦独立可执行文件(从“插件”模型生成)完成执行,您的应用程序就会运行,

于 2013-08-12T20:14:32.680 回答