矢量寄存器通道置换 - 2022.1 简体中文

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

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

AI 引擎定点矢量单元数据路径由下列三条路径组成,这三条路径彼此分离且很大程度上可独立使用:

  • MAC 主路径
  • 移位 - 舍入 - 饱和路径
  • 上移路径

主要的乘法路径会从矢量寄存器读取值、按用户可控制的方式对其进行置换、执行可选前加、执行乘法,并在某些后加运算后,将其累加至累加器寄存器的前一个值。

虽然主数据路径存储至累加器,但移位 - 舍入 - 饱和路径则从累加器寄存器执行读取,并存储到矢量寄存器或数据存储器。上移路径与主数据路径保持并行运行。它不执行任何乘法,仅读取矢量、将其上移并将结果馈送给累加器。如需了解有关定点和浮点数据路径的详细信息,请参阅 Versal ACAP AI 引擎架构手册(AM009)。如需获取有关用于实践这些数据路径的内部函数的详细信息,请参阅 Versal ACAP AI 引擎内部函数文档(UG1078)

如下图所示,MAC 数据路径的基本功能由来自 X 和 Z 缓冲器的数据之间的矢量乘法和累加运算组成。其它参数和选项允许在矢量和多个输出通道内灵活选择数据,并提供可选功能特性以支持不同大小的输入数据和前加运算。此外还有一个额外的输入缓冲器,即 Y 缓冲器,其中的值先以来自 X 缓冲器的值执行前加,然后再执行乘法。来自内部函数的结果会添加到累加器。

图 1. MAC 数据路径的功能概述

此运算可使用“lanes”(通道数)和“columns”(列数)来描述。 通道数对应于将从内部调用生成的输出值的数量。列数是每个输出通道将执行的乘法数,每项乘法结果都将相加在一起。例如:

acc0 += z00*(x00+y00) + z01*(x01+y01) + z02*(x02+y02) + z03*(x03+y03)
acc1 += z10*(x10+y10) + z11*(x11+y11) + z12*(x12+y12) + z13*(x13+y13)
acc2 += z20*(x20+y20) + z21*(x21+y21) + z22*(x22+y22) + z23*(x23+y23)
acc3 += z30*(x30+y30) + z31*(x31+y31) + z32*(x32+y32) + z33*(x33+y33)

在此例中会生成 4 个输出,因此每个输出有 4 条通道和 4 个列,并含有来自 X 和 Y 缓冲器的前加运算。

内部函数的参数允许从不同输入缓冲器灵活选择每个通道和列的数据,并且全部遵循相同的参数模式。下一章节介绍了数据选择(或者数据置换)方案,并提供了包含 shuffleselect 内部函数的详细示例。在后续章节中也探讨了有关 mac 内部函数的详细信息。