AI 引擎标量单元支持位宽为 8、16 和 32 位的有符号和无符号整数,并支持部分单精度浮点用于执行特定运算。
AI 引擎矢量单元支持位宽为 8、16 和 32 位的整数和复数整数以及实数和复数单精度浮点值。它还支持含位宽 48 位和 80 位元素的累加器矢量数据类型。内部函数(例如,绝对值、加法、减法、比较、乘法和 MAC 运算)使用这些矢量数据类型来运算。矢量数据是使用如下命名约定来命名的:元素数、实数或复数、矢量类型或累加器类型以及位宽,如下所示:
aie::vector<[c]([u]int|float)(SizeofElement),NumLanes>
aie::accum<[c](acc|accfloat)(SizeofElements),NumLanes>
可选规范包括:
-
NumLanes
- 表示矢量中的元素数量,可取值:2、4、8、16、32、64 或 128。
-
c
- 表示将实数和虚数部分打包在一起的复杂数据。
-
int
- 表示整数矢量数据值。
-
float
- 表示单精度浮点值。
-
acc
- 表示累加器矢量数据值。
-
u
- 表示无符号。仅存在无符号 int8 矢量。
-
SizeofElement
- 表示矢量数据类型元素的大小。
- 1024 位整数矢量类型是包含 8 位、16 位或 32 位矢量元素的矢量类型。这些矢量包含 16、32、64 或 128 条通道。
- 512 位整数矢量类型是包含 8 位、16 位、32 位码或 64 位矢量元素的矢量类型。这些矢量包含 4、8、16、32 或 64 条通道。
- 256 位整数矢量类型是包含 8 位、16 位、32 位、64 位或 128 位矢量元素的矢量类型。这些矢量包含 1、2、4、8、16 或 32 条通道。
- 128 位整数矢量类型是包含 8 位、16 位或 32 位矢量元素的矢量类型。这些矢量包含 2、4、8 或 16 条通道。
- 累加器数据类型位 80 位或 48 位元素的矢量类型。这些矢量包含 2、4、8 或 16 条通道。
矢量数据类型的数据总宽度可为 128 位、256 位、512 位或 1024 位。累加器数据类型的数据总宽度可为 320/384 位或 640/768 位。
例如,v16int32 是含 16 个元素的 32 位整数矢量。矢量的每个元素都被称为一条通道。妥善利用寄存器,使用必要的最小位宽即可改善性能。
图 1. aie::vector<int32,16>