AI 引擎 shuffle(乱序)内部函数用于根据起始和偏移参数从单个输入数据缓冲器中选择数据。它支持灵活置换输入矢量值,无需重新排列这些值。xbuff
是输入数据缓冲器,其中包含 xstart
用于指示 xbuff
数据缓冲器中每个通道的起始位置偏移,还包含 xoffset
用于指示适用于数据缓冲器的位置偏移。shuffle 内部函数可在 8、16 和 32 通道变体(shuffle8
、shuffle16
和 shuffle32
)中使用。数据的主置换 (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
矢量上打乱顺序的方式。xoffset
和 xoffset_hi
的每条通道都有 4 个位。此示例将缓冲器的偶数和奇数元素分别移入缓冲器的更低部分和更高部分。
如果数据置换为 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
矢量上的乱序示例。