1 / 20 · 概念
将点积映射到处理单元
区分行、列和归约索引,并计算一个小型参考矩阵。
课时内容可免费阅读,选课后可保存学习进度。
先明确计算,再安排时序
设 A 的形状为 M×K,B 的形状为 K×P。它们的乘积 C 的形状为 M×P。索引 i 选择输出行,j 选择输出列,k 是求和中的归约索引。本课程所有索引都从零开始。
输出驻留型设计将 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,这正是行列混淆的一种有用特征。
| PE | k=0 项 | k=1 项 | 结果 |
|---|---|---|---|
| (0,0) | 5 | 14 | 19 |
| (0,1) | 6 | 16 | 22 |
| (1,0) | 15 | 28 | 43 |
| (1,1) | 18 | 32 | 50 |
预期矩阵为 [[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。