单内核编程 - 2022.1 简体中文

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

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

每个 AI 引擎内核都是 1 个 C/C++ 程序,该程序是使用原生 C/C++ 语言、AI 引擎 API 和专用内部函数编写的,其中内部函数以 VLIW 标量和矢量处理器为目标。AI 引擎内核代码是使用 AI 引擎编译器 (aiecompiler) 编译的,此编译器包含在 Vitis™ 核开发套件内。AI 引擎编译器可编译内核以生成在 AI 引擎处理器上运行的 ELF 文件。

如需了解有关内部函数的高级编程信息,请参阅 Versal ACAP AI 引擎内部函数文档(UG1078)。在本章前几节中涵盖了有关 AI 引擎编译器和仿真器的信息。

AI 引擎支持在矢量编程时使用专用数据类型和 API 函数。按需利用 API 函数和矢量数据类型来重构标量应用代码即可实现矢量化的应用代码。AI 引擎编译器负责将 API 函数映射到运算、矢量或标量寄存器分配和数据移动、自动调度以及生成微码并将其有效打包到 VLIW 指令内。

以下章节介绍 AI 引擎内核支持的数据类型以及可使用的寄存器。此外,还描述了矢量 API 函数如何在矢量寄存器上使用相应的数据类型执行初始化、加载、存储以及运算。

为了在 AI 引擎上达成最高性能,单内核编程的主要目标是确保使用的矢量处理器可达成其理论最大值。算法矢量化至关重要,但管理矢量寄存器、存储器访问和软件流水打拍也同样不可或缺。程序员必须努力在执行当前运算的同时,使数据可用于执行新运算,因为矢量处理器每个时钟周期内只能执行一项运算。借助编译指示即可在循环内使用软件流水打拍来执行最优化。例如,如果内层循环具有顺序或循环进位依赖关系,那么可能可以展开外层循环,并行计算多个值。以下章节也讲解了这些概念。