本章描述了可用于在不同的抽象层、精度层和速度层对 AI 引擎应用进行仿真的各种执行目标。AI 引擎 graph 可在 4 种不同环境内进行仿真。
x86 仿真器是一种快速功能仿真器,如 x86 功能仿真器 中所述。它应用于对 AI 引擎 graph 进行功能仿真,适用于内核与 graph 的功能开发与验证。但它无法提供时序、资源或性能信息。
AI 引擎仿真器 (aiesimulator
) 会对 AI 引擎阵列的时序和资源进行建模,同时为 NoC 和 DDR 存储器使用传输事务级 SystemC 模型。这样即可加速完成 AI 引擎应用的性能分析、准确估算 AI 引擎资源使用情况并提供周期近似的时序信息。
在 x86 功能仿真器与 AI 引擎仿真器中,与 AI 引擎对接的 PL 接口可通过未定时的外部流量来实践。同样,使用用户 graph 的 main() 函数作为 C 语言测试激励文件即可配置和控制 AI 引擎。此测试激励文件数据输入和输出并未定时,用户 graph 的 main() 函数充当虚拟仿真平台。
如需对整个系统进行快速功能仿真(包括 AI 引擎 graph、PL 逻辑以及基于 XRT 的主机应用)以控制 AI 引擎和 PL,则应使用 Vitis™ 软件仿真流程。软件仿真流程使用基于 HLS 的内核或基于 RTL 的内核的 C 语言模型,以便与 AI 引擎 graph 对接,并使用同样可在硬件上运行的主机代码对其进行控制。此流程包含 AI 引擎的 x86 功能模型以及用于对未定时的 PS 进行建模的 Arm® QEMU 仿真器。
最后,当您准备好对整个系统(包括 AI 引擎 graph 和 PL 逻辑以及用于控制 AI 引擎和 PL 的基于 XRT 的主机应用)进行仿真后,您应针对特定开发板和平台使用 Vitis 硬件仿真流程。此流程包括 AI 引擎的 SystemC 模型,以及用于 NoC、DDR 存储器、PL 内核 (RTL) 和 PS(在 QEMU 上运行)的传输事务级 SystemC 模型。您也可为自己的平台或设计包含 RTL 逻辑和测试激励文件 PL 逻辑。
下表列出了 4 种仿真流程及其是否支持功能级或性能级调试,以及源代码调试的支持级别。此外还提供了有关在您的 AI 引擎设计开发的相应阶段内如何使用这些仿真流程的建议。
仿真工具流程 | 功能调试 | 性能分析与调试 | 源码级调试 | 设计开发阶段使用 |
---|---|---|---|---|
X86 仿真器 | 支持 | 不支持 | 支持 | AI 引擎内核与 graph 调试 |
AI 引擎仿真器 | 支持 | 支持(此仿真会单步执行 AI 引擎汇编代码,对于性能分析和最优化很有用) | 允许单步执行 AI 引擎编译器所生成的汇编代码,这有助于代码最优化,但可能由于编译器最优化而限制源码级可视性 | AI 引擎 graph 性能调试 |
Vitis 软件仿真 | 支持 | 不支持 | 支持 | 系统级仿真和功能调试 |
Vitis 硬件仿真 | 支持 | 支持 | 可能;但由于编译器最优化,源码级可视性受到限制 | 系统级仿真和性能调试 |
仿真模型
下表列出了仿真流程,并对 AI 引擎设计开发的相应阶段内如何使用这些仿真流程以及用于各种 Versal® 架构域的仿真模型类型提供了建议。仿真模型的类型和所使用的仿真工具流程可用于判定模型结果的准确性。
仿真工具流程 | AI 引擎内核 | PL 内核 | PL 平台 | NoC/DDR 模型 | PS 模型 |
---|---|---|---|---|---|
X86 仿真器 | X86 线程 | C/SystemC/外部流量生成器 | 不适用 | 不适用 | 不适用 |
AI 引擎仿真器 | SystemC | SystemC/外部流量生成器 | 不适用 | SystemC | 不适用 |
Vitis 软件仿真 | X86 线程 | SystemC/RTL/外部流量生成器 | 不适用 | 不适用 | QEMU |
Vitis 硬件仿真 | SystemC | SystemC/RTL/外部流量生成器 | RTL/SystemC | SystemC | QEMU |
仿真功能特性
在 aiesimulator
或硬件仿真中运行设计时,可获取剖析数据。分析此数据有助于您测量内核效率、与每个 AI 引擎关联的停滞和活动时间,并确定性能可能未处于最优状态的 AI 引擎内核。您还可收集有关设计时延、吞吐量和带宽的数据。如需获取有关运行和分析剖析数据的详细信息,请参阅 仿真期间对 AI 引擎 graph 应用进行性能分析。
事件追踪功能特性允许您捕获并分析程序执行的系统级视图。它有助于识别程序执行期间的问题,包括执行正确与否以及性能问题。AI 引擎架构可为仿真和硬件仿真期间的事件生成、收集和串流(作为追踪数据)提供直接支持。如需获取有关运行和分析事件追踪数据的详细信息,请参阅 仿真期间对 AI 引擎 graph 应用进行性能分析。
x86simulator
和 aiesimulator
通过 graph.cpp()
的 main()
函数来对设计进行仿真。由于 QEMU 仿真支持可用于软件仿真和硬件仿真内的主机应用,因此当您转至软件仿真或硬件仿真时,可以创建以裸机或 Linux-XRT 为目标的主机应用,也可以对主机应用进行仿真。通过 graph 的 main() 函数(充当虚拟测试激励文件平台)即可将测试激励文件数据提供给 x86 仿真器和 AI 引擎仿真器。有多个级别的测试激励文件支持可用于仿真流程。测试激励文件数据可基于文件,或者也可以通过外部流量生成器来传输。如需了解有关此功能特性的更多详细信息,请参阅 生成流量用于软硬件仿真。
在 AI 引擎内核之间流动的数据可供使用,也可作为数据快照文件或者通过 Vitis 分析器 GUI 来查看。如需了解有关 x86 仿真器快照功能特性的更多详细信息,请参阅 数据快照。对于运行 AI 引擎仿真器所得结果的追踪数据,如需了解有关数据可视化的更多信息,请参阅 追踪视图数据可视化。
下表列出了 4 种仿真流程所支持的仿真功能特性的类型。
仿真工具流程 | 走线 | 剖析 | 主机应用 | 测试激励文件支持 | AI 引擎数据流可视性 |
---|---|---|---|---|---|
X86 仿真器 | 不支持 | 不支持 | 通过 graph.cpp 中的 main() 函数 | 基于文件/外部流量生成器 | 支持(通过快照功能特性) |
AI 引擎仿真器 | 支持 | 支持 | 通过 graph.cpp 中的 main() 函数 | 基于文件/外部流量生成器 | 支持(通过 Vitis 分析器中的“Trace”视图) |
Vitis 软件仿真 | 不支持 | 不支持 | 通过以 Linux-XRT 为目标的主机应用中的 main() 函数 | 基于文件/外部流量生成器 | 支持(通过快照功能特性) |
Vitis 硬件仿真 | 支持 | 支持 | 通过以裸机或 Linux-XRT 为目标的主机应用中的 main() 函数 | 基于文件/外部流量生成器 | 支持(通过 Vitis 分析器中的“Trace”视图) |