AI 引擎仿真器 - 2023.2 简体中文

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

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

AMD Versal™ 自适应 SoC AI 引擎多线程仿真器 (aiesimulator) 包含全局存储器(DDR 存储器)和片上网络 (NoC) 的建模,以及 AI 引擎阵列的建模。使用仿真目标完成应用编译后,即可调用 AI 引擎多线程仿真器,如下所示。

aiesimulator –-pkg-dir=./Work

这将以多线程模式运行仿真器。使用的线程数取决于机器上可用的核数。基于机器上可用的核数以及 AI 引擎设计中使用的核拼块数量来完成设置默认线程数的计算。

您也可手动配置要使用的线程数。机器上可用的线程总数等于机器上可用的核数乘以每个核支持的线程数。

  • 机器上可用的线程总数 = 机器上的核数 * 每个核的线程数
如果您的机器支持的核数不足,而您又希望使用有限数量的线程来运行仿真,那么您可以手动配置要使用的线程数量。具体方法是在 sim_opts.txt 文件中设置 MTMAXTHREADS=<n> 选项,其中 n 是线程数。
aiesimulator --pkg-dir=./Work -f <sim_opts.txt>
sim_opts.txt 包含:
MTMAXTHREADS=<n>
注释: AMD 强烈建议您避免将所有可用线程都分配给仿真器

各项配置和二进制文件都是由 AI 引擎编译器生成的,置于 Work 目录下(请参阅 对 AI 引擎计算图应用进行编译),并使用 --pkg-dir 选项来为仿真器指定这些配置和文件。计算图由 main 应用中所指定的控制线程来进行初始化、运行和终止。AI 引擎编译器负责对该控制线程进行编译,并将 PS IP 封装文件直接加载到仿真器中。

默认情况下,graph.run() 选项会指定永续运行的计算图。AI 引擎编译器会生成代码,以通过永续 While 循环来执行数据流计算图,因此仿真也会永续运行。要创建终止程序用于调试,请在计算图代码中指定 graph.run(<number_of_iterations>) 以将迭代的执行次数限制为指定次数。指定的迭代数可以是任意正整数。

注释: graph::run(-1) 可指定永续运行的计算图。

AI 引擎仿真器命令首先按 Work/config/scsim_config.json 文件中生成的编译器中指定的方式来配置仿真器。这包括加载 PL IP 块及其连接、配置 I/O 数据文件驱动程序以及配置 NoC 和全局存储器(DDR 存储器)连接。随后,它会执行指定的 PS 应用,最终退出仿真器。

AI 引擎仿真器具有可选 --profile 选项,该选项会在内核代码中启用 printfs 以将其显示在控制台上,并生成剖析信息。并且,--dump-vcd <filename> 选项还会在仿真持续期间生成值变转储 (VCD)。随后,即可使用 --simulation-cycle-timeout <number-of-cycles> 在指定时钟周期数过后退出仿真。

重要: 如果不提供时钟周期数或者 graph.run() 的运行轮数,那么仿真会永久运行。您需要按两次Ctrl+c才能退出仿真器。
提示: 在相同设计上的不同仿真运行期间,您可能会观察到不同的周期计数。这是因为仿真器会等待数秒钟以便暂挂的传输事务(例如,DMA)全部完成。在此等待时间内,仿真器进程仍会计时,但可由操作系统进行关联环境切换,因此每一轮运行的总周期数可能不同。要确保每一轮运行的总周期数相同,应使用 AI 引擎仿真器的 --simulation-cycle-timeout 选项在精确周期内停止仿真器。这样剖析报告上显示每一轮运行的总周期数都相同。
注释: 请勿在内核代码中包含 <iostream> 以启用 printfs。在内核代码中使用 #include <iostream> 会导致 x86 仿真器和 aiesimulator 仿真器都出现编译错误。

计算图和子计算图仿真运行时间

在包含大型计算图(由小型子计算图组成)的 AI 引擎设计上,建议先对各子计算图进行仿真。当子计算图经过验证并满足功能和性能方面的要求后,即可尝试对大型计算图进行仿真。根据子计算图大小,通常大型计算图的仿真时间更长。