我想知道是否有一些经验,使用Simulink Coder在(快速)加速器模式下运行模型生成模型可以获得多少性能?
例如,它与从非加速模型到加速模型的显着改进相比如何?
我知道这有点模糊,可能取决于模型的细节,但我会对示例数字感到满意。
答案 0 :(得分:2)
我不知道你是否真的会找到有用的速度提升轶事,因为你的结果将高度依赖于你自己的实现。
尽管如此,How Acceleration Modes Work上的以下参考资料可能对您有用。
如此链接所述......
加速器模式生成代码并将其链接到 C-MEX S功能。 Simulink使用此加速目标代码 执行模拟...
...模型方法与Simulink是分开的 软件并且是Acceleration目标代码的一部分。一个C-MEX S-function API与Simulink软件和MEX API通信 与MATLAB通信。目标代码在同一进程中执行 作为MATLAB和Simulink。
链接继续描述Rapid Acceleration,如下:
Rapid Accelerator模式可独立创建Rapid Accelerator 从您的模型中执行。此可执行文件包括求解器和 模型方法,但它位于MATLAB和Simulink之外。它用 与外部模式(请参阅主机/目标通信)进行通信 Simulink中。
(请注意,实际链接有一些很好的图表,有助于说明这种架构)。
我认为从这些描述中可以看出一些重要的事情。首先,在加速器模式下,仅为模型方法生成代码;但是,在Rapid Accelerator模式下,还会为求解器生成代码。在任何一种情况下,由于生成的代码和Simulink之间的通信会产生一些开销(尽管通常在非快速加速器模式下开销会更大)。
现在,您是否会看到这些加速模式与完全代码生成之间的显着差异很可能取决于您将如何使用生成的代码。您已声明您的应用程序旨在实质上分析/可视化simulink模型的输出。您是否打算将应用程序本身作为Simulink模型?如果是这样,我想你的工作流程就是为“插件”模型生成代码,然后将其作为s函数合并到“父”模型中。基于上面给出的描述,我的直觉是,与加速器模式相比,您不会看到太多的性能提升。
但是,如果您的应用程序要在Simulink之外实现,那么代码生成肯定是要走的路。在这种情况下,您已经完全消除了与Simulink通信的开销。例如,在此工作流程中,您可以从“插件”模型生成独立的可执行文件,执行该模型以获取输出,然后只需将这些输出加载到应用程序中进行分析和可视化。您的应用程序可以用您想要的任何语言编写。事实上,您甚至可以在MATLAB中编写应用程序 - 关键是,一旦独立的可执行文件(从“插件”模型生成)已经完成正在执行时执行,而不是与插件模型连接。