Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

设计模型以实现有效加速

为 Accelerator 模式选择模块

Accelerator 仿真模式运行以下模块,就好像您在 Normal 模式下运行一样,因为这些模块不会为加速器构建生成代码。因此,如果这些模块在您的模型中所占的比例很高,则 Accelerator 模式可能无法显著提高性能。所有这些 Simulink® 模块都使用解释的代码。

注意

在某些情况下,Normal 模式的输出可能与 Accelerator 模式的输出不完全匹配,因为模型的解释版本和编译版本在数值精度方面存在细微的差别。

在默认的 JIT Accelerator 模式下运行时,以下模块可能会导致仿真运行时性能较差。

为 Rapid Accelerator 模式选择模块

不支持代码生成的模块(如 SimEvents®)或仅为特定目标生成代码的模块都不能在 Rapid Accelerator 模式下进行仿真。

此外,如果您的模型中包含以下任何模块,Rapid Accelerator 模式也不起作用:

  • Interpreted MATLAB Function

  • 设备驱动程序 S-Function,如来自 Simulink Real-Time™ 产品的模块,或针对 Freescale™ MPC555 的模块

注意

在某些情况下,Normal 模式的输出可能与 Rapid Accelerator 模式的输出不完全匹配,因为模型的解释版本和编译版本在数值精度方面存在细微的差别。

控制 S-Function 的执行

注意

在默认的 JIT Accelerator 模式下,不支持内联用户编写的 TLC S-Function。如果您在 JIT Accelerator 模式下运行包含 TLC S-Function 的模型,执行速度有可能会降低。但是,由于 JIT 加速的原因,代码生成速度会提高。

使用 Target Language Compiler 将 S-Function 内联,可以提高经典 Accelerator 模式的性能,因为消除了对 Simulink API 的不必要的调用。但是,默认情况下,经典 Accelerator 模式会忽略 S-Function 的内联 TLC 文件,即使该文件存在也是如此。在 Rapid Accelerator 模式下,只要 TLC 文件可用,就会始终使用该文件。

例如,为访问 I/O 板上的特定硬件寄存器而编写的设备驱动程序 S-Function 模块就需要选择这种行为作为默认行为。因为 Simulink 软件在主机系统而不是目标上运行,所以它不能访问目标 I/O 寄存器,即使尝试这样做也会失败。

要指示经典 Accelerator 模式使用 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 文件不在同一个文件夹中,Rapid Accelerator 模式将使用 MEX 文件。

注意

要为您的 S-Function 使用 .c 或 .cpp 代码,请确保它们与 S-Function MEX 文件位于同一个文件夹中,否则,您可以将其他文件包含在 S-Function 中,或通过使用 rtwmakecfg.m 文件绕过路径限制。有关详细信息,请参阅使用 rtwmakecfg.m API 自定义生成的联编文件 (Simulink Coder)

Accelerator 和 Rapid Accelerator 模式下的数据类型注意事项

  • Accelerator 模式支持最多 128 位的定点信号和向量。

  • Rapid Accelerator 模式支持最多 128 位的定点参数。

  • Rapid Accelerator 模式支持最多 32 位的定点根输入

  • Rapid Accelerator 模式支持枚举数据类型的根输入

  • Rapid Accelerator 模式不支持 From Workspace 模块的定点数据。

  • Rapid Accelerator 模式将忽略为 To Workspace 模块选中的 Log fixed-point data as a fi object (FixptAsFi) 复选框。

  • Rapid Accelerator 模式支持使用总线对象作为参数。

  • Accelerator 模式和 Rapid Accelerator 模式以尽可能精简的方式存储整数。

  • Fixed-Point Designer™ 在 Accelerator 或 Rapid Accelerator 模式下不会收集最小值、最大值或溢出数据。

  • Accelerator 模式支持一组有限的运行时诊断,包括断言模块。

  • Rapid Accelerator 模式支持一组有限的运行时诊断,包括断言模块。

示波器和查看器在 Rapid Accelerator 模式下的行为

从命令行还是菜单中运行仿真决定了示波器和查看器在 Rapid Accelerator 模式下的行为。

示波器或查看器的类型从菜单中运行仿真从命令行运行仿真
Simulink Scope 模块提供的支持与 Normal 模式相同
  • 支持日志记录

  • 不更新示波器窗口

Simulink 信号查看器中的示波器更新图,但不支持日志记录不支持
其他信号查看器中的示波器仅限于在 External 模式下可用的支持不支持
信号日志记录支持,但存在 Rapid Accelerator 模式中的信号记录中列出的限制条件支持,但存在 Rapid Accelerator 模式中的信号记录中列出的限制条件。
多速率信号查看器不支持不支持
Stateflow® Chart 模块对图动画的支持与 Normal 模式相同不支持

Rapid Accelerator 模式不支持多速率信号查看器,例如 DSP System Toolbox™ 频谱示波器或 Communications Toolbox™ 散点图、信号轨迹图或眼图示波器。

注意

虽然在您从命令行中运行 Rapid Accelerator 模式时示波器和查看器不会更新,但在您从菜单运行模型时会更新。从用户界面运行加速模式说明了如何从菜单中运行 Rapid Accelerator 模式。Interact with the Acceleration Modes Programmatically说明了如何从命令行运行仿真。

禁止加速的因素

  • 如果您的模型存在以下情况,则您不能使用 Accelerator 或 Rapid Accelerator 模式:

    • 向 MATLAB® S-Function 传递的数组参数不是数值、逻辑或字符数组,而是稀疏数组或超过两个维度的数组。

    • 使用包含具有复数输入的三角函数的 Fcn 模块。

  • 在某些情况下,与外部或自定义代码相关的更改不会导致 Accelerator 或 Rapid Accelerator 仿真结果发生变化。其中包括:

    • TLC 代码

    • S-Function 源代码,包括 rtwmakecfg.m 文件

    • 集成的自定义代码

    • S-Function Builder

    在这些情况下,可以考虑强制为顶层模型重新生成代码。也可以通过删除代码生成文件夹(如 slprj)或生成的模型代码文件夹,强制为顶层模型重新生成代码。

    注意

    对于 JIT 加速,加速目标代码在内存中。因此,只要模型处于打开状态,即使您删除了 slprj 文件夹,也可以重用这些代码。

Rapid Accelerator 模式限制

  • Rapid Accelerator 模式不支持:

    • 代数环。

    • 用 C++ 编写的目标。

    • Interpreted MATLAB Function 模块。

    • 非内联 MATLAB 语言或 Fortran S-Function。您必须使用 C 语言编写 S-Function 或者使用 Target Language Compiler (TLC) 对它们进行内联,也可以使用 MEX 文件。有关详细信息,请参阅 编写完全内联的 S-Function (Simulink Coder)

    • 调试器或探查器。

    • Simulink.RunTimeBlockSimulink.BlockCompOutputPortData 模块的运行时对象。

  • 模型参数必须为以下数据类型之一:

    • boolean

    • uint8int8

    • uint16int16

    • uint32int32

    • singledouble

    • 定点

    • 枚举

  • 您不能在 Rapid Accelerator 模式下暂停仿真。

  • 如果 Rapid Accelerator 编译包含引用模型(通过使用 Model 模块),需要将这些模型设置为使用固定步长求解器,以便为它们生成代码。但是,顶层模型可以使用可变步长求解器,前提是引用模型中的模块是离散模块。

  • 在某些情况下,更改模块参数可能会导致模型发生结构性改变,从而改变模型的校验和。例如,更改 DSP 仿真中的时滞数。在这些情况下,您必须重新为模型生成代码。有关详细信息,请参阅 Code Regeneration in Accelerated Models

  • 对于根级输入端口,Rapid Accelerator 模式仅支持与 Srcworkspace 相同的工作区。

  • 对于根级输入端口,如果您指定了模块应该输出的最小值和最大值,Rapid Accelerator 模式在仿真过程中无法识别这些限制。

  • 在 Rapid Accelerator 模式下,如果函数调用端口连接到 Ground 或断开连接,则函数调用子系统中的 To FileTo Workspace 模块不会生成任何日志记录文件。

  • Rapid Accelerator 模式不支持运行 RHEL / CentOS 6.x 或 7.x 的系统。

保留的关键字

某些词是保留的关键字,专门供 Simulink Coder™ 代码语言以及 Accelerator 和 Rapid Accelerator 模式使用。这些关键字不能以函数或变量名称的形式出现在子系统上,也不能作为导出的全局信号名称。使用保留的关键字将导致 Simulink 软件报错,模型也无法编译或运行。

Construction of Generated Identifiers (Simulink Coder)中列出了为 Simulink Coder 产品保留的关键字。其他仅适用于 Accelerator 和 Rapid Accelerator 模式的关键字包括:

muDoubleScalarAbs muDoubleScalarCosmuDoubleScalarMod
muDoubleScalarAcos muDoubleScalarCoshmuDoubleScalarPower
muDoubleScalarAcoshmuDoubleScalarExpmuDoubleScalarRound
muDoubleScalarAsinmuDoubleScalarFloormuDoubleScalarSign
muDoubleScalarAsinh muDoubleScalarHypotmuDoubleScalarSin
muDoubleScalarAtanmuDoubleScalarLogmuDoubleScalarSinh
muDoubleScalarAtan2muDoubleScalarLog10muDoubleScalarSqrt
muDoubleScalarAtanhmuDoubleScalarMaxmuDoubleScalarTan
muDoubleScalarCeil muDoubleScalarMin muDoubleScalarTanh

相关示例

详细信息