使用 Vitis IDE 和报告 - 2022.1 简体中文

AI 引擎内核编码 最佳实践指南 (UG1079)

Document ID
UG1079
Release Date
2022-05-25
Version
2022.1 简体中文

Vitis IDE 负责管理含 AI 引擎 graph、PL 内核及 PS 应用的系统工程。Vitis IDE 可提供 AI 引擎内核开发的可视化视图,它在内核以及 PS 应用调试中都是不可或缺的。

Vitis IDE 可提供单节点 graph 示例,此示例可用作为单内核开发的起点。Vitis IDE 具有调试视图,其中可显示寄存器、变量、可用断点、寄存器/存储器映射变量、内部/外部存储器内容以及指示信息的反汇编视图。对于单 AI 引擎拼块设计,它还可显示指令流水线(流水线视图)以及“Runtime Statistics”(运行时统计数据)窗口。

启动调试透视图时,如果在调试配置中选中Generate Profile(生成剖析),那么在单步执行各条指令时,它将在控制台中显示 printf 输出,并且“Runtime Statistics”窗口将显示实时周期计数。调试配置中的Generate Trace(生成追踪)复选框用于生成事件追踪数据,这些数据有助于更好地了解存储器停滞和串流停滞等事件发生的时间和方式。事件追踪有助于性能调优。

图 1. 调试配置

在调试透视图中,提供了调试命令恢复、单步进入以及单步跳过。其中会显示 AI 引擎源代码,并且可通过双击各行来设置断点。“Variables”(变量)窗口、“Breakpoints”(断点)窗口和“Registers”(寄存器)窗口可用于观察数据存储器或寄存器状态。反汇编视图有助于了解内部函数使用情况,尤其是这些内部函数在流水线中的调度方式。在反汇编视图中,Open New View(打开新视图)按钮可用于打开新的活动窗口。“Pipeline”(流水线)视图允许您将特定时钟周期内执行的指令与“Microcode/Disassembly”(微码/反汇编)视图中的标签加以关联。

注释: 流水线视图仅可供单一 AI 引擎设计使用,启动调试时,仅当选中Generate Profile(生成剖析)复选框的情况下才会启用该视图。
图 2. 调试代码

AI 引擎 (Col_Row.cc) 生成的代码包含核中的 AI 引擎内核以及封装文件代码。在 AI 引擎封装文件代码中,您可单击多个单步进入按钮以单步进入 AI 引擎内核代码。或者,您也可以从设计透视图打开 AI 引擎内核源文件,并在该文件中设置断点。有多个视图可用于调试和性能调优,如反汇编视图、流水线视图、存储器视图、寄存器视图和变量视图。

注释: 断点数量限制为每个 tile(拼块)最多 4 个断点。要设置超出允许数量的新断点,必须清除现有断点。如果您尝试设置的断点数量超出允许的数量,本工具将发出错误消息。

反汇编视图会显示编译器以硬件为目标所生成的微码。在各行之间也可嵌入 C/C++ 源码以供源代码引用。此微码有助于理解编译结果,尤其是循环流水打拍的结果。下图显示了为流水打拍的循环生成的微码。在反汇编视图中通过滚动或单步进入即可找到内核中的循环。循环会从零开销循环开始 (ZLS) 迭代至零开销循环结束 (ZLE)。从中可以看到加载指令和 MAC 指令布局为流水打拍的方式。前导码和后导码指令布局在零开销循环主体之前和之后,用于填充和清空流水线阶段。

图 3. 循环流水打拍的反汇编视图

AI 引擎核的连接器存储器映射报告可在 Work/aie/core_ID/Release/core_id.map 中找到。其中按函数、静态变量和软件栈来列出程序和数据存储器的位置。从这些报告中可以抽取栈大小、程序存储器大小、全局缓冲器及其大小。如需生成连接器报告的 xml 版本 (core_id.map.xml),只需为 AI 引擎编译器指定 -Xchess=\"main:bridge.xargs=-fB\" 选项即可。

Work/<name>.aiecompile_summary 是可供 Vitis 分析器打开的编译汇总报告。“Work/”报告包含 graph 编译结果(例如,内核与缓冲器映射结果)的多份报告。如需了解有关 AI 引擎编译器输出的更多信息,请参阅 Versal ACAP AI 引擎编程环境用户指南 (UG1076)