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

AI 引擎内核编码 最佳实践指南 (UG1079)

Document ID
UG1079
Release Date
2022-05-25
Version
2022.1 简体中文

以下显示了含 int16 X 缓冲器和 int16 Z 缓冲器的 MAC 示例。请注意 X 缓冲器的置换粒度为 32 位。startstep 参数始终围绕数据类型粒度来使用。因此对于 16 位数据,值为 2 将选中相距 2 * 16 位的值。xoffsets 参数成对使用。在偶数行中,第一个十六进制值是绝对 32 位偏移,取 2 x 16 位值(索引和索引+1)。在奇数行中,第二个十六进制值是距离第一个值的偏移 + 1(32 位偏移),取 2 x 16 位值。因此,xoffsets 中的十六进制值 0x24 会从 xbuff 中为偶数行选择索引 8 和 9,为奇数行选择索引 14 和 15,而 xoffsets 中的十六进制值 0x00 会从 xbuff 中为偶数行选择索引 0 和 1,为奇数行选择索引 2 和 3。

另有一个 xsquare 参数在完成主要置换后执行 16 位粒度旋转。例如,xsquare0x2103(从低位十六进制值到高位十六进制值)将索引 3 和 0 置于偶数行中,将索引 1 和 2 置于奇数行中。在下图中心可以看到 xsquare 参数的工作方式。

图 1. int16 x int16 类型上的 MAC8

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

图 2. int16 x int16 类型上的 MAC16