数据乱序 - 2023.2 简体中文

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

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

AI 引擎 shuffle(乱序)内部函数用于根据起始和偏移参数从单个输入数据缓冲器中选择数据。它支持灵活置换输入矢量值,无需重新排列这些值。xbuff 是输入数据缓冲器,其中包含 xstart 用于指示 xbuff 数据缓冲器中每个通道的起始位置偏移,还包含 xoffset 用于指示适用于数据缓冲器的位置偏移。shuffle 内部函数可在 8、16 和 32 通道变体(shuffle8shuffle16shuffle32)中使用。数据的主置换 (xoffsets) 采用 32 位粒度,xsquare 支持在主置换之后进一步调整为 16 位粒度。因此,8 位和 16 位矢量内部函数可包含额外的平方参数,用于更复杂的置换。

例如,shuffle16 内部函数具有以下函数原型。

v16int32 shuffle16	(	      v16int32 xbuff,
	int xstart,
	unsigned int xoffsets,
	unsigned int xoffsets_hi 
)	

数据置换以 32 位粒度来执行操作。当数据大小为 32 位或 64 位时,起始和偏移与完整数据宽度(32 位或 64 位)相关。通道选择遵循常规通道选择方案。

f: result [lane number] = (xstart + xbuff [lane number]) Mod input_samples

以下示例显示了在 v16int32 矢量上打乱顺序的方式。xoffsetxoffset_hi 的每条通道都有 4 个位。此示例将缓冲器的偶数和奇数元素分别移入缓冲器的更低部分和更高部分。

图 1. int32 类型的数据乱序

如果数据置换为 16 位数据,那么内部函数包含另一个参数 xsquare,以支持在每个 4 x 16 位数据块中灵活执行数据选择。xoffset 成对使用。第一个十六进制值是绝对 32 位偏移,取 2 x 16 位值(索引和索引+1)。第二个十六进制值是距离第一个值的偏移 + 1(32 位偏移),取 2 x 16 位值。例如,0x00 选择索引 0、1 和索引 2、3。0x24 选择索引 8、9 和索引 14、15。以下是 v32int16 矢量上的乱序示例。

图 2. int16 类型的数据乱序