主要内容

代码探查分析器

R2026b

分析生成代码的执行时间和栈使用探查

自 R2023a 起

描述

使用代码探查分析器分析由生成代码的软件在环 (SIL) 或处理器在环 (PIL) 执行产生的执行时间和栈使用探查:

  • 查看任务和函数的执行时间,可视化在特定仿真时间的函数调用栈,并比较不同运行的执行时间。

  • 查看任务和函数的栈使用,并比较不同运行的值。

如果您使用的是 Embedded Coder®,您也可以:

  • 分析基于 XCP 的外部模式仿真产生的执行时间探查。

  • 为模型层次结构配置代码探查。

  • 识别和分析生成代码中的性能热点。此工作流使用 coder.profile.test.runTests 函数。

  • 识别和分析生成代码中的关键路径。此工作流使用 coder.profile.test.analyzePath 函数。

Code Profile Analyzer app

打开 代码探查分析器 App

如果您从 Simulink® 模型生成代码,请点击 SIL/PIL 选项卡。在结果库中的执行探查结果或栈探查结果下,点击代码探查分析器按钮。

如果您从 MATLAB® 代码生成代码,请在命令行窗口中终止 SIL/PIL 执行。代码生成器在命令行窗口中生成一条消息,其中包含指向执行或栈探查报告的链接。请点击该链接。

或者,对于 Simulink 和 MATLAB 两种工作流,在 SIL/PIL 执行终止后,通过在命令行窗口中输入 coder.profile.show 或 coder.profile.show(profileVariable) 打开代码探查分析器。

对于 Simulink 工作流,profileVariable 是工作区变量(coder.profile.ExecutionTime 或 coder.profile.ExecutionStack 对象),您通过工作区变量 (CodeExecutionProfileVariable) 或栈工作区变量 (CodeStackProfileVariable) 配置参数指定该工作区变量。

对于 MATLAB 工作流,通过使用 getCoderExecutionProfile 或 getCoderStackProfile 函数获取 profileVariable。

如果 App 已打开,您可以使用常规选项卡通过选择包含执行时间或栈使用测量值的工作区变量来导入单个仿真结果。

您无法使用常规选项卡导入多个仿真的聚合结果。在这种情况下,请改用命令 coder.profile.show(profileAggregate),其中 profileAggregate 是 coder.profile.ExecutionTimeSet 或 coder.profile.ExecutionStackSet 对象。

代码探查分析器工作流

您导入的仿真结果的类型确定该 App 显示的选项卡以及您可以执行的工作流。

当您使用 coder.profile.ExecutionTime 对象导入结果时,时间探查选项卡显示如下表所述的选项卡。

选项卡用途
任务执行

显示任务的执行时间度量。对于每个任务,检查执行时间(即最小、平均和最大执行时间)以及对应的 CPU 利用率,这使您能够确定总体上任务是否可以在目标硬件上运行而不会出现执行时间问题。

请参阅View and Compare Code Execution Times。

函数执行

显示生成代码函数的执行时间度量,以识别热点并确定需要返工的函数。

请参阅View and Compare Code Execution Times。

函数调用栈

显示特定仿真时间的函数调用栈。如果您发现某个任务花费的时间超过预期,您可以显示它在每个执行实例的函数调用步。此功能可帮助您识别性能瓶颈。

请参阅View and Compare Code Execution Times。

比较

比较两次仿真的执行时间度量,以识别性能下降。

请参阅View and Compare Code Execution Times。

任务验证

执行 CPU 可行性分析,以正式确定任务集是否可以运行而不会出现执行时间问题。分析任务到 CPU 映射的效果。

请参阅Validate Task-to-CPU Mapping。

CPU 使用情况

对于每个任务,显示在可用 CPU 上的执行时间。此功能显示任务如何在系统上分配以及帮助您改进负载平衡。

仅在以下条件适用时可用:

  • 仿真是 XCP 外部模式

  • 启用了多任务执行

  • 目标应用程序在操作系统上运行

请参阅Validate Task-to-CPU Mapping。

当您使用 coder.profile.ExecutionTimeSet 对象导入结果时,时间探查选项卡显示如下表所述的选项卡。

选项卡用途
累积结果

显示来自不同测试的任务执行时间度量。如果您运行一组测试用例,对于每个任务,您可以识别最长执行时间和平均执行时间。然后,您可以识别产生最严苛执行的测试用例。

火焰图

显示最长任务执行的火焰图。此视图可帮助您了解任务执行实例期间发生的情况,使您能够识别性能瓶颈。

比较

比较两次仿真的执行时间度量,以识别性能下降。

任务验证

执行 CPU 可行性分析,以正式确定任务集是否可以运行而不会出现执行时间问题。分析任务到 CPU 映射的效果。

请参阅Validate Task-to-CPU Mapping。

当您使用 coder.profile.ExecutionStack 对象导入结果时,内存探查选项卡显示如下表所述的选项卡。

选项卡用途
栈内存

显示任务和函数的栈使用度量。对于每个任务,查看栈内存使用量的最小值、平均值和最大值的摘要。在任务内,查看每个执行的函数需要多少内存。

请参阅View and Compare Stack Usage Metrics。

函数调用栈

显示特定仿真时间的函数调用栈。如果您观察到某个任务的内存分配高于预期,您可以显示它的每个执行实例的函数调用栈。此功能可帮助您识别性能瓶颈。

请参阅View and Compare Stack Usage Metrics。

比较

比较两次仿真的栈使用度量,以识别性能下降。

请参阅View and Compare Stack Usage Metrics。

当您使用 coder.profile.ExecutionStackSet 对象导入结果时,内存探查选项卡显示如下表所述的选项卡。

选项卡用途
累积结果

显示来自不同测试的任务栈使用度量。如果您运行一组测试用例,对于每个任务,您可以识别栈使用的最大值。然后,您可以识别产生最严苛执行的测试用例。

比较

比较两次仿真的栈使用度量,以识别性能下降。

如果您的模型配置为生成性能监控单元 (PMU) 度量,则当您导入结果时,代码探查选项卡显示如下表所述的选项卡。

选项卡用途
函数执行

显示生成代码函数的 PMU 度量,以识别热点并确定需要返工的函数。

请参阅Generate Profiles Using PMU Metrics。

比较

比较两次仿真的 PMU 度量,以识别性能下降。

请参阅Generate Profiles Using PMU Metrics。

无论您是否导入数据,您都可以使用代码探查分析器在模型层次结构中配置代码探查。请参阅Configure Execution-Time Profiling in Model Hierarchy Using Code Profile Analyzer和Configure Stack Usage Profiling in Model Hierarchy Using Code Profile Analyzer。

示例

全部展开

下表列出了进一步的工作流示例。

示例使用该 App 可以:
Aggregate Execution-Time Profiles to Identify Worst Execution

处理执行时间探查的聚合。例如,识别:

  • 每个任务的最长执行时间

  • 生成代码中的性能热点

Analyze Execution Times of Critical Paths

查看生成代码的关键路径分析的结果。

Visualize Task Scheduling in XCP External Mode Simulation

查看百分比形式的超限率(超限事件数/调用数)。

Aggregate Stack Usage Profiles to Identify Most Demanding Execution

处理栈使用量探查的聚合。例如,识别每个任务的最严苛执行。

相关示例

版本历史记录

在 R2023a 中推出

另请参阅