8x8 位上的 MAC - 2023.2 简体中文

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

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

下图显示了对 int8 X 缓冲器和 int8 Z 缓冲器执行的 MAC 运算。第一张图显示了如何进行数据置换,第二张图显示了如何进行系数置换。请注意,X 缓冲器和 Z 缓冲器的置换粒度分别为 32 位和 16 位。xoffsets 参数成对使用。第一个十六进制值是绝对 32 位偏移,取 4 x 8 位值(索引、索引+1、索引+2 和索引+3)。第二个十六进制值是距离第一个值的偏移 + 1(32 位偏移),取 4 x 8 位值。例如,0x00 选择索引 0、1、2、3 及 4、5、6、7,而 0x24 选择索引 16、17、18、19 及 28、29、30、31。

另有一个 xsquare 参数在完成主要置换后执行 8 位粒度旋转。在下图中心可以看到此示例中的 xsquare 参数的工作方式。

start 参数(xstartzstart)和 step 参数(xstepzstep)始终围绕数据类型粒度来使用。因此,对于 16 位,如果值为 2 则表示相距 2 * 16 位,对于 8 位,值为 2 则表示相距 2 * 8 位。step 参数适用于所选数据的下一个块。因此,如果成对 offset 参数选择 2 * 2 块,那么阶跃适用于下一个 2 * 2 块。添加到索引值的阶跃必须与置换粒度对齐(对于数据,采用 32 位;对于系数则采用 16 位)。例如,处理 8 位数据时,xstep 需为 4 的倍数。处理 8 位系数时,zstep 需为 2 的倍数。以下两张图分别显示了适用于数据和系数的 step 的工作方式。

请注意,对于 int8 * int8 类型的系数,会通过复制 2 * 2 索引块来构造一个 4 * 2 块。如需了解索引 0、1、2 和 3 的复制方式,请参阅 图 2

图 1. int8 x int8 类型上的 MAC8(X 部分)
图 2. int8 x int8 类型上的 MAC8(Z 部分)