Altifigence Academy

1 / 20 · 概念

将点积映射到处理单元

区分行、列和归约索引,并计算一个小型参考矩阵。

先明确计算,再安排时序

设 A 的形状为 M×K,B 的形状为 K×P。它们的乘积 C 的形状为 M×P。索引 i 选择输出行,j 选择输出列,k 是求和中的归约索引。本课程所有索引都从零开始。

Ci,j=∑k=0K−1Ai,kBk,jC_{i,j}=\sum_{k=0}^{K-1} A_{i,k}B_{k,j}

输出驻留型设计将 C(i,j) 分配给 PE(i,j)。该处理单元保留自己的部分和,同时 A 向右移动,B 向下移动。数据移动实现复用;方程则规定哪些操作数可以相乘。时钟时序将另行定义,使调度错误不能悄悄改变原本的数学计算。

完整计算一个参考示例

使用 A=[[1,2],[3,4]] 和 B=[[5,6],[7,8]]。PE(0,1) 将行 [1,2] 与列 [6,8] 配对,累加 1×6=6 和 2×8=16,得到 22。如果误用 B 的第二行 [7,8],则得到 23,这正是行列混淆的一种有用特征。

PEk=0 项k=1 项结果
(0,0)51419
(0,1)61622
(1,0)152843
(1,1)183250

预期矩阵为 [[19,22],[43,50]]。每个 PE 执行两次有效 MAC,因此整个阵列执行八次 MAC。如果按一次乘法和一次加法分别计数,则为十六次算术操作。比较吞吐率时,必须标明计量单位。

将坐标对应到存储位置

按行优先存储时,A(i,k) 的元素偏移为 iK+k,B(k,j) 的偏移为 kP+j。在此示例的列 j=1 中,B 使用偏移 1 和 3。因此,提供连续行的存储器接口需要缓冲或重排,才能向阵列顶部提供各列。

用宽整数建立算术参考,之后再应用选定的输出转换。这些小正数输入无法测试溢出。后续测试必须加入负值、最小负操作数以及更长的归约。当 B 为单位矩阵时,应重现 A;A 的全零行则应产生 C 的全零行。除了最终和,还应记录每个 PE 的 k 项列表:即使两个错误在数值上相互抵消,也能发现遗漏或重复的项。

自己试试

对于 A=[[2,-1],[0,3]] 和 B=[[4,5],[-2,1]],求 C、MAC 次数以及按行优先存储时 B(1,0) 的元素偏移。

阅读解释

C=[[10,9],[-6,3]]:四个和分别为 8+2、10−1、0−6 和 0+3。共执行 2×2×2=8 次 MAC。B(1,0) 的元素偏移为 1×2+0=2。

你的选择适用于此浏览器,可随时在页脚更改。