单内核编程 - 2023.2 简体中文

AI 引擎内核与计算图编程指南 (UG1079)

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

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

AI 引擎支持在处理矢量时使用专用数据类型和 API 函数。通过利用这些 API 函数和矢量数据类型来重构部分标量应用代码,即可创建快速而又高效的矢量代码。aiecompiler 负责将 API 函数映射到运算、矢量或标量寄存器分配和数据移动、自动调度以及生成微码并将其有效打包到 VLIW 指令内。

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

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