主要内容

本页采用了机器翻译。点击此处可查看英文原文。

排查因运行实时应用程序导致的 CPU 负载过高问题

在执行实时应用程序时,某些问题会导致 CPU 过载。

问题含义

CPU 过载表明,CPU 无法在重启以处理下一个时间步之前完成当前时间步的处理。

当发生此错误时,Simulink Real-Time RTOS 会中止模型执行,而 Target 对象的属性 TargetStatus 会显示错误,例如:

mCPUOverload: Sub-rate exception: Overload limit (0) exceeded in 0.02s rate with 1 overloads

如果允许过载,建模执行将持续进行,直到达到允许的过载限制。如果模型在 CPU 过载后继续运行,则该时间步长将持续到执行完成所需的时间为止。这种行为会导致下一个时间步延迟。

建模或 Speedgoat® 占用了过多的计算机资源,导致 CPU 过载。可能的原因包括:

  • 目标计算机运行速度太慢,或者建模采样时间过短。

  • 该模型过于复杂(算法复杂度)。

  • I/O 延迟,即每个使用的 I/O 通道都会给系统引入延迟。I/O 延迟可能会导致执行时间超过建模时间步长。

    要查询 Speedgoat 开发板的延迟值,请访问 www.speedgoat.com 并选择 Products & Services > Services

尝试此解决方法

Simulink® Real-Time™ 实时操作系统 (RTOS) 遇到 CPU 过载时,通常会暂停模型的执行。您可以配置 Simulink Real-Time 模型,使其允许 CPU 过载。利用此功能来支持长时间的初始化操作,并用于过载诊断。您还可以通过提升应用程序性能并启用 Compile with GCC -ffast-math 选项来尝试减轻过载。

允许较长的初始化时间

对于某些实时应用程序,常规初始化过程可能会持续到第一个采样时间之后。使用 SLRT Overload Options 模块来增加启动时忽略过载的时间步数。默认情况下,只有第一个时间步会忽略重载。

注意

如果让目标计算机的 CPU 过载,可能会导致结果不正确,特别是对于多速率建模模型而言。SLRT Overload Options 模块仅用于诊断。诊断完成后,请关闭这些选项。

启用使用 GCC -ffast-math 选项进行编译

Compile with GCC -ffast-math 选项可在编译实时应用程序代码时启用 GCC 编译器的 -ffast-math 选项。此选项在 Simulink Real-Time 型号中默认处于禁用状态。

通过启用 Compile with GCC -ffast-math 选项,您将赋予编译器更大的灵活性来优化浮点运算,但代价是偏离 IEEE-754 浮点标准。

有关 -ffast-math 选项的更多信息,请参阅 GCC 中浮点运算的语义gcc.gnu.org/wiki/FloatingPointMath/

强制轮询模式

Force polling mode 选项可启用轮询模式(而非中断驱动模式)来为实时应用程序提供时钟信号。在以下情况下,启用此选项有助于减轻 CPU 负载:

  • 目标计算机至少有 4 个 CPU 内核。

  • CPU 过载是由零星出现的 TET 尖峰引起的。

另请参阅

主题

外部网站