16x16 位上的 MAC - 2023.2 简体中文

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

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

以下显示了含 int16 X 缓冲器和 int16 Z 缓冲器的 MAC 示例。请注意 X 缓冲器的置换粒度为 32 位。startstep 参数始终围绕数据类型粒度来使用。要获取 16 位索引,需将其乘以 2。

xoffsets 参数成对使用。第一个十六进制值是绝对 32 位偏移,取偶数行中的 2 x 16 位值(索引和索引+1)。第二个十六进制值是距离第一个十六进制值的偏移 + 1(32 位偏移),取奇数行中的 2 x 16 位值。因此,xoffsets 中的十六进制值 0x24 会为偶数行选择索引 8 和 9,为奇数行选择索引 14 和 15,这些索引来自 xbuff

even: 2 * 4 -> get indices [8, 9]
odd: 2 * ( 2 + 4 + 1 ) -> get indices [14, 15]

同样,xoffsets 中的十六进制值 0x00 会为偶数行选择索引 0 和 1,为奇数行选择索引 2 和 3,这些索引来自 xbuff

另有一个 xsquare 参数在完成主要置换后执行 16 位粒度旋转。它将以 2x2 矩阵形式为索引提供额外贡献,这会在 int16 x int16 模式下由 MUL8 给定的 8x4 矩阵计算中重复出现。

例如,xsquare0x2103(从低位十六进制值到高位十六进制值)将索引 3 和 0 置于偶数行中,将索引 1 和 2 置于奇数行中。在下图中心可以看到 xsquare 参数的工作方式。

图 1. int16 x int16 类型上的 MAC8

下图显示了 int16 和 int16 的 mac16 内部函数示例。

图 2. int16 x int16 类型上的 MAC16