x86 功能仿真器 - 2023.2 简体中文

AI 引擎工具和流程用户指南 (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 简体中文

在 AI 引擎计算图与内核上启动开发时,验证设计行为至关重要。这称为功能仿真,对于识别设计中的错误很有用。例如,计算图中的窗口大小与内核中的迭代数息息相关。通过故障排除来查看大型计算图中是否每个内核都正在吸收和生成正确数量的样本,这本质上是一个耗时且迭代性的操作。x86 仿真器因其给开发者所提供的高速迭代和高层次的数据可视性,而成为对此类行为进行测试、调试和验证的理想选择。但 x86 仿真无法提供时序、资源或性能信息。x86 仿真器专在工具开发机器上运行。这意味着其性能和存储器使用均由开发机器来定义。

虽然 AI 引擎仿真器能对计算图与内核上的存储器进行完整建模,但对于 AI 引擎阵列,这也意味着 AI 引擎仿真器受到 AI 引擎存储器空间的限制。x86 仿真器则不受此限制,可提供近乎无限量的调试 printf()s、大型阵列和变量。通过搭配单步执行内核的能力,即可快速发现并解决非常复杂的问题。

其中还提供了多个宏用于改善内核调试。这些宏旨在搭配 x86 仿真器一起使用,可保留在代码中以便于维护。x86 仿真器有利有弊。部分类型的计算图构造不受支持,在 AI 引擎仿真器与 x86 仿真器之间难以保证行为的周期精确性。x86 仿真器并非旨在替代 AI 引擎仿真器。AI 引擎仿真器仍必须在所有设计上运行以验证行为并获取性能信息。对于工程开发的不同阶段,总有某一种工具更适合您的需求。

注释: 要了解有关 x86 仿真限制的更多信息,请参阅 限制

要运行 x86 仿真器,请将 AI 引擎编译器目标更改为 x86sim

aiecompiler --target=x86sim graph.cpp

为 x86 仿真完成应用编译后,即可按如下方式调用 x86 仿真器。

x86simulator

以下提供了完整的 x86 仿真器命令帮助信息。

$ 
x86simulator [-h] [--help] [--h] [--pkg-dir=PKGDIR]
optional arguments:
-h,--help --h               Show this help message and exit
--pkg-dir=PKG_DIR           Set the package directory. ex: Work
--i, -i ,--input-dir=PATH   Set the input directory
--o, -o ,--output-dir=PATH  Set the output directory
--timeout=secs 		   Terminate simuation after specified number of seconds
--dump 			      Enable snapshots of data traffic on kernel ports
--dump-size    		   Set the maximum size of the snapshot file in MB
--gdb          		   Invoke from gdb
--valgrind     		   Run simulator under valgrind to detect access violations
--valgrind-gdb 		   Run simulator under valgrind and debug via gdb server
--valgrind-args=ARGS        Override default options for valgrind. Used in conjunction with --valgrind.
--disable-stop-on-deadlock  Disable deadlock detection
--trace                     Enable trace of kernel stall events
--trace-print               Print kernel stall events during simulation

编译后的 x86 本机仿真二进制文件是由 AI 引擎编译器生成的,置于Work 目录(请参阅 对 AI 引擎计算图应用进行编译)下,并由 x86 仿真器自动启动。

在以下计算图代码片段中指定了输入和输出文件。

adf::input_plio in1=adf::input_plio::create("In", adf::plio_32_bits, "In1.txt");
adf::output_plio out1=adf::output_plio::create("Out", adf::plio_32_bits, "Out1.txt");

x86 仿真器在运行时会在当前工作目录中查找 data/In1.txt,即 ADF 计算图所使用的输入之一。为了将 x86 仿真器的输出文件与 AI 引擎计算图和内核的输出文件加以区分,重要的是验证设计仿真器中的 Out1.txt 是否位于 current_working_dir/x86simulator_output/data/ 内。

如果使用逗号分隔值 (CSV) 输入文件,那么输入文件名应替换为 In1.csv

(可选)由仿真器生成的输出文件可以与黄金输出进行比较(忽略空格差异)。

diff –w <data>/golden.txt <data>/output.txt
仿真器 log 日志和输出均可在 Vitis IDE 中直观查看:
图 1. 日志视图
图 2. 仿真器输出视图
“Simulator Output”(仿真器输出)视图允许您选择应显示的输出。