探查器如何捕获性能数据
探查器的工作原理
探查器在您的模型进行仿真时捕获性能数据。它能找出模型中需要最多仿真时间的部分。探查信息可用来决定模型优化工作的重点。
注意
您不能在快速加速模式下使用探查器。
Simulink® 将性能数据存储在仿真探查报告中。数据显示执行模型中的每个函数所花费的时间。
探查器基于一个执行模型来工作,该模型的伪代码如下所示:
Sim() ModelInitialize(). ModelExecute() for t = tStart to tEnd Output() Update() Integrate() Compute states from derivs by repeatedly calling: MinorOutput() MinorDeriv() Locate any zero crossings by repeatedly calling: MinorOutput() MinorZeroCrossings() EndIntegrate Set time t = tNew. EndModelExecute ModelTerminate EndSim
根据此概念模型,Simulink 通过调用以下函数零次、一次或多次来运行模型,具体取决于函数和模型。
函数 | 用途 | 级别 |
---|---|---|
sim | 对模型进行仿真。此顶层函数调用仿真模型所需的其他函数。在此函数中花费的时间是模型仿真所需的总时间。 | 系统 |
ModelInitialize | 建立仿真模型。 | 系统 |
ModelExecute | 在从仿真开始到结束的每个时间步中,通过对每个模块调用 output、update、integrate 等函数来执行模型。 | 系统 |
Output | 计算模块在当前时间步的输出。 | 模块 |
Update | 更新模块在当前时间步的状态。 | 模块 |
Integrate | 通过对当前时间步的状态导数进行积分,计算模块的连续状态。 | 模块 |
MinorOutput | 计算模块在子时间步的输出。 | 模块 |
MinorDeriv | 计算模块在子时间步的状态导数。 | 模块 |
MinorZeroCrossings | 计算模块在子时间步的过零值。 | 模块 |
ModelTerminate | 释放内存并执行任何其他仿真结束时的清理工作。 | 系统 |
Nonvirtual Subsystem | 通过对所包含的每个模块调用 output、update、integrate 等函数,计算非虚拟子系统在当前时间步的输出。在此函数中花费的时间是执行该非虚拟子系统所需的时间。 | 模块 |
探查器测量执行这些函数的每次调用所需的时间。模型仿真完成后,探查器会生成一份报告,说明在每个函数上花费的仿真时间量。
启动探查器
打开模型。
在调试选项卡上,选择性能顾问 > Simulink 探查器。
对模型进行仿真。
仿真完成后,Simulink 会在 Simulink 编辑器的面板中为模型生成并显示仿真探查文件。
模块层次结构视图
报告的模块层次结构视图以嵌套树形式显示模型的探查信息。表的第一行(即树的顶部)对应于整个模型。第一层嵌套的后续行对应于模型根级别的模块。
执行堆栈视图
执行堆栈视图按模型的仿真阶段细分探查报告。模型的主要仿真阶段包括编译、初始化、仿真和终止。有关仿真阶段的更详细说明,请参阅动态系统的仿真阶段。
保存探查器结果
您可以将探查器报告保存到 mat
文件中。稍后,您可以通过将保存的 mat
文件加载到当前工作区或将其导入现有探查器会话来导入和查看报告。
要保存探查报告,请在探查选项卡的共享部分中选择导出为 MAT 文件,并可选择指定 mat
文件的名称。
要在 Simulink 编辑器中已打开的探查会话中查看已保存的报告,请在探查选项卡中选择从文件导入。
要在命令行中查看保存的报告,请加载包含该报告的 mat
文件。探查信息作为 Simulink.profiler.Data
对象加载到当前工作区。有关详细信息,请参阅Simulink.profiler.Data
。