AI 引擎系列 5 - 以 AI 引擎模型为目标运行 AI 引擎编译器(2022.1 更新)
简介
在先前的 AI 引擎系列博文中,我们以 x86 模型为目标运行了 AI 引擎编译器,并运行了 X86 仿真器来验证 AI 引擎应用的功能模型。
在本文中,我们将以 AI 引擎模型为目标来运行 AI 引擎编译器并观察生成的部分文件。
要求
下文要求您通读前几篇 AI 引擎系列博文。
AI 引擎系列 1 - 从 AI 引擎工具开始(2022.1 更新)
AI 引擎系列 2 - AI 引擎 graph 简介 (2022.1 更新)
AI 引擎系列 3 - AI 引擎内核简介
AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator(2022.1 更新)
以 AI 引擎模型为目标运行 AI 引擎编译器
在上一篇博文中所创建的工程内,打开 simple_application.prj 文件,将生效的构建配置更改为“Emulation-AIE”,这样即可为 AI 引擎模型编译应用。
选中“Explorer”(资源管理器)窗口中的 aie 应用 (simple_application),然后单击锤子图标构建该应用。
这样即可在控制台中看到该命令的运行过程。此过程与上一篇博文中用于 x86simulator 的过程非常相似。
aiecompiler -v --stacksize=1024 --heapsize=1024 -Xchess=main:darts.xargs=-nb -include="<Xilinx Installation Path>/Vitis/2022.1/aietools/include" -include="<Xilinx Installation Path>/Vitis_HLS/2022.1/include" -include="../" -include="../src" -include="../data" -include="../src/kernels" -target=hw -platform=xilinx_vck190_base_202210_1/xilinx_vck190_base_202210_1.xpfm -workdir=./Work ../src/project.cpp
主要区别在于目标选项 (-target) 设为 hw(硬件)。(先前构建目标为“Emulation-SW”,目标选项设为 x86)。
从 AI 引擎编译器生成的输出
构建完成后,即可在“Explorer”窗口中看到,已创建名为“Emulation-AIE”的新目录。
其中包含来自构建的所有输出。稍后我们再仔细查看此输出。
默认情况下,AI 引擎编译器会将所有输出写入 Work/ 的目录和 libadf.a 的文件。
libadf.a 文件是实际的输出文件,将在剩余 Vitis™ 流程中用于把 AI 引擎应用集成到系统其余部分。
Work/ 目录包含多个子目录和文件:
- aie/:该目录包含每个 AI 引擎各自编译的输出结果
- arch/:该目录包含的文件用于描述 AI 引擎阵列上的应用的物理映射
- config/:该目录包含的文件用于指定 SystemC 仿真器的选项
- noc/:该目录包含 NoC 相关的文件
- ps/c_rts/:该目录包含基于 C 语言的运行时协议,用于对 PS 交互进行建模
- ps/cdo/:该目录包含生成的代码,此代码用于以配置数据对象格式 (CDO) 进行计算图 (graph) 配置和初始化。可在 SystemC-RTL 仿真和实际硬件执行期间使用。
- reports/:该目录包含各种报告文件
- project.aiecompiler_summary:此文件可在 Vitis 分析器中打开,以便查看编译汇总信息和报告。我们将在后续博文中详细分析此文件。
运行 AI 引擎仿真器
现在,我们可以运行 AI 引擎仿真器了。
选中“AI Engine Application”(simple_application),然后单击“Run As”图标旁的箭头,单击“Run As > Launch AIE Emulator”(运行方式 > 启动 AI 引擎仿真器)
仿真输出会写入 Emulation-AIE/aiesimulator_output/data/output.txt 文件。
我们来仔细分析下该文件:
每一行值之前都有时间。这是因为,相比于 x86 仿真,AI 引擎仿真属于周期近似仿真,因此输出文件包含数据的时间戳。
可以看到,第一批输出样本于 934 ns 后到达。在 VCK190 基本平台中,AI 引擎的频率设置为 1250 GHz。这意味着需要 1167 个计算周期才能输出第一批输出样本。
在后续博文中,我们将讲解出现此时延的各种原因,但请谨记(正如 AI 引擎 3 博文中所述),此代码并未最优化为在矢量处理器上运行,因此并未充分发挥其算力。
通过观察 output.txt 中的第 64 行可以看到 TLAST 一词。这表示计算图执行完 1 次迭代需耗时 1033.6 ns。
经过 1324.8 ns 仿真后,输出第 2 次迭代的首个样本。
现在我们可以验证,输出的数据与黄金结果仍然匹配。
选中 golden.txt 文件和新创建的 output.txt 文件,然后右键单击其中之一。随后选中“Compare With > Each Other after transformation”(比较对象 > 变换后相互比较)。
在弹出窗口中,单击列表图标(预定义的筛选器)。在第二个输出窗口中,启用“Remove timestamp”(移除时间戳),然后单击“OK”(确定)。在第一个弹出窗口上单击“OK”。
这样将会从仿真器的输出文件中移除时间戳,仅对输出样本值进行比较。
2 个文件之间应不存在任何差异,这表示 AI 引擎编译结果与黄金参考之间功能上仍然匹配。
下一步
在下一篇博文中,我们将讲解 AI 引擎编译后生成的 Vitis 分析器报告文件。