设计模型以实现有效加速
为加速模式选择模块
加速模式运行以下模块,就好像您在普通模式下运行一样,因为这些模块不会为加速器构建生成代码。因此,如果这些模块在您的模型中所占的比例很高,则加速模式可能无法显著提高性能。所有这些 Simulink® 模块都使用解释的代码。
在默认的 JIT 加速模式下运行时,以下模块可能会导致仿真运行时性能较差。
为快速加速模式选择模块
不支持代码生成的模块(如 SimEvents®)或仅为特定目标生成代码的模块都不能在快速加速模式下进行仿真。
此外,如果您的模型中包含以下任何模块,快速加速模式也不起作用:
设备驱动程序 S-Function,如来自 Simulink Real-Time™ 产品的模块,或针对 Freescale® MPC555 的模块
控制 S-Function 的执行
注意
在默认的 JIT 加速模式下,不支持内联用户编写的 TLC S-Function。如果您在 JIT 加速模式下运行包含 TLC S-Function 的模型,执行速度有可能会降低。但是,由于 JIT 加速的原因,代码生成速度会提高。
使用 Target Language Compiler 将 S-Function 内联,可以提高经典加速模式的性能,因为消除了对 Simulink API 的不必要的调用。但是,默认情况下,经典加速模式会忽略 S-Function 的内联 TLC 文件,即使该文件存在也是如此。在快速加速模式下,只要 TLC 文件可用,就会始终使用该文件。
例如,为访问 I/O 板上的特定硬件寄存器而编写的设备驱动程序 S-Function 模块就需要选择这种行为作为默认行为。因为 Simulink 软件在主机系统而不是目标上运行,所以它不能访问目标 I/O 寄存器,即使尝试这样做也会失败。
要指示经典加速模式使用 TLC 文件而不是 S-Function MEX 文件,请在 S-Function 的 mdlInitializeSizes
函数中指定 SS_OPTION_USE_TLC_WITH_ACCELERATOR
,如以下示例所示:
static void mdlInitializeSizes(SimStruct *S) { /* Code deleted */ ssSetOptions(S, SS_OPTION_USE_TLC_WITH_ACCELERATOR); }
如果 S-Function C 文件不在同一个文件夹中,快速加速模式将使用 MEX 文件。
注意
要为您的 S-Function 使用 .c
或 .cpp
代码,请确保它们与 S-Function MEX 文件位于同一文件夹中。否则,您可以将其他文件包含在 S-Function 中,或通过使用 rtwmakecfg.m
文件绕过路径限制。有关详细信息,请参阅使用 rtwmakecfg.m API 自定义生成的联编文件 (Simulink Coder)。
加速和快速加速模式下的数据类型注意事项
加速模式支持最多 128 位的定点信号和向量。
快速加速模式支持最多 128 位的定点参数。
快速加速模式支持最多 32 位的定点根输入
快速加速模式支持枚举数据类型的根输入
快速加速模式不支持 From Workspace 模块的定点数据。
快速加速模式忽略 To Workspace 模块的将定点数据记录为 fi 对象参数。
快速加速模式支持使用总线对象作为参数。
加速模式和快速加速模式以尽可能精简的方式存储整数。
Fixed-Point Designer™ 在加速或快速加速模式下不会收集最小值、最大值或溢出数据。
加速模式支持一组有限的运行时诊断,包括 Assertion 模块。
快速加速模式支持一组有限的运行时诊断,包括 Assertion 模块。
示波器和查看器在快速加速模式下的行为
是以编程方式还是以交互方式运行仿真决定了示波器和查看器在快速加速模式下的行为。
示波器或查看器的类型 | 以交互方式运行仿真 | 以编程方式运行仿真 |
---|---|---|
Simulink Scope 模块 | 提供的支持与普通模式相同 |
|
Simulink 信号查看器中的示波器 | 更新图,但不支持日志记录 | 不支持 |
其他信号查看器中的示波器 | 仅限于在外部模式下可用的支持 | 不支持 |
信号记录 | 支持。 | 支持。 |
接受记录作为输入的可视化工具 (如仿真数据检查器或逻辑分析仪) | 仿真期间数据不能可视化。 | 仿真期间数据不能可视化。 |
Stateflow® 图 | 对图动画的支持与普通模式相同 | 不支持 |
注意
虽然以编程方式运行快速加速仿真时示波器和查看器不会更新,但以交互方式运行仿真时它们会更新。从用户界面运行加速模式 显示如何从菜单中运行快速加速模式。Interact with the Acceleration Modes Programmatically 显示如何以编程方式运行仿真。
禁止加速的因素
如果您的模型存在以下情况,则您不能使用加速模式或快速加速模式:
向 MATLAB® S-Function 传递的数组参数不是数值、逻辑或字符数组,而是稀疏数组或超过两个维度的数组。
使用包含具有复数输入的三角函数的 Fcn 模块。
在某些情况下,与外部或自定义代码相关的更改不会导致加速或快速加速仿真结果发生变化。其中包括:
TLC 代码
S-Function 源代码,包括
rtwmakecfg.m
文件集成的自定义代码
S-Function Builder
在这些情况下,可以考虑强制为顶层模型重新生成代码。也可以通过删除代码生成文件夹(如
slprj
)或生成的模型代码文件夹,强制为顶层模型重新生成代码。注意
对于 JIT 加速,加速目标代码在内存中。因此,只要模型处于打开状态,即使您删除了
slprj
文件夹,也可以重用这些代码。
快速加速模式限制
快速加速模式不支持:
代数环。
用 C++ 编写的目标。
非内联 MATLAB 语言或 Fortran S-Function。您必须使用 C 语言编写 S-Function 或者使用 Target Language Compiler (TLC) 对它们进行内联,也可以使用 MEX 文件。有关详细信息,请参阅 编写完全内联的 S-Function (Simulink Coder)。
调试实用工具或 Simulink 探查器。
Simulink.RunTimeBlock 和 Simulink.BlockCompOutputPortData 模块的运行时对象。
模型参数必须为以下数据类型之一:
boolean
uint8
或int8
uint16
或int16
uint32
或int32
single
或double
定点
枚举
您不能在快速加速模式下暂停仿真。
在某些情况下,更改模块参数可能会导致模型发生结构性改变,从而改变模型的校验和。例如,更改 DSP 仿真中的时滞数。在这些情况下,您必须重新为模型生成代码。有关详细信息,请参阅 Code Regeneration in Accelerated Models。
对于根级输入端口,如果您指定了模块应该输出的最小值和最大值,快速加速模式在仿真过程中无法识别这些限制。
在快速加速模式下,如果函数调用端口连接到 Ground 或断开连接,则函数调用子系统中的 To File 或 To Workspace 模块不会生成任何记录文件。
快速加速模式不支持运行 RHEL / CentOS 6.x 或 7.x 的系统。
保留的关键字
某些词是保留的关键字,专门供 Simulink Coder™ 代码语言以及加速和快速加速模式使用。这些关键字不能以函数或变量名称的形式出现在子系统上,也不能作为导出的全局信号名称。使用保留的关键字将导致 Simulink 软件报错,模型也无法编译或运行。
Construction of Generated Identifiers (Simulink Coder)中列出了为 Simulink Coder 产品保留的关键字。其他仅适用于加速和快速加速模式的关键字包括:
muDoubleScalarAbs | muDoubleScalarCos | muDoubleScalarMod |
muDoubleScalarAcos | muDoubleScalarCosh | muDoubleScalarPower |
muDoubleScalarAcosh | muDoubleScalarExp | muDoubleScalarRound |
muDoubleScalarAsin | muDoubleScalarFloor | muDoubleScalarSign |
muDoubleScalarAsinh | muDoubleScalarHypot | muDoubleScalarSin |
muDoubleScalarAtan | muDoubleScalarLog | muDoubleScalarSinh |
muDoubleScalarAtan2 | muDoubleScalarLog10 | muDoubleScalarSqrt |
muDoubleScalarAtanh | muDoubleScalarMax | muDoubleScalarTan |
muDoubleScalarCeil | muDoubleScalarMin | muDoubleScalarTanh |