Altifigence Academy

9 / 20 · 概念

输出驻留与其他数据流

通过确定 PE 内保留什么,比较存储和传输。

判断哪个值保留在本地

脉动阵列在操作数经过相邻处理单元时并行工作。“驻留”描述计算期间为复用而保留在附近的数值。即使数学操作相同,不同选择也会改变 PE 寄存器、部分和路径和边界调度。

在本课程的输出驻留型设计中,PE(i,j) 保留 C(i,j) 的部分和。A 和 B 随 k 推进而移动。全部 K 项到达后收集结果;clear 开始新的输出分块。A 值在一行中复用,B 值沿一列复用。2×2 示例中,A(0,0)=1 同时贡献给 C(0,0) 和 C(0,1)。

权重驻留型设计把 B 等权重预加载到 PE 中,并针对输入激活值复用它们。部分和必须移动,或在别处收集。仅仅重命名端口不能把 OS 控制器变成 WS:存储值、预加载顺序和结果路径都会改变。输入驻留型设计保留激活值,以便在多个权重或输出计算中复用。本课程比较这一思想,但不实现 IS 阵列。

数据流驻留值要检查的成本
OS输出部分和宽累加器和结果收集
WS权重预加载与部分和传输/存储
IS激活值权重供应与输出和合并

分别统计三种数据流量

考虑使用同一 B 的两个 2×2 矩阵乘法。OS 边界模型每个任务输入四个 A 值和四个 B 值:两个任务共十六个操作数值。本地 B 缓冲可避免第二个任务从外部存储器重新读取 B,但仍需要提供它的四个边界令牌。复用预加载权重具有不同的取舍,并需要不同的部分和路径。

外部读取、边界注入和 PE 间传送是不同的测量指标。加州大学伯克利分校 Gemmini README提供了可配置 OS 和 WS 数据流的一手示例。本课程阵列具有自己的约定,不复现 Gemmini 的实现或指令接口。

设计审查时,应明确哪些值保留在本地、和在哪里累加,以及哪些值跨过各个边界。仅有复用不能保证存储器端口足够或吞吐率持续稳定。

自己试试

两个 2×2 任务共享保存在本地缓冲中的 B。A 不复用。需要多少次外部操作数读取和 OS 边界注入?

阅读解释

外部读取共 12 个值:两个各含四个值的 A 矩阵,加上一个含四个值的 B 矩阵。边界注入共 16 个值:每个任务四个 A 加四个 B。不含结果写入和内部转发。

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