脉动阵列计算全连接层
约 658 个字 预计阅读时间 2 分钟
脉动阵列计算全连接层 ¶
使用 \(k*k\) 矩阵计算 \((h_i*w_i)\cdot(1*h_i)\)
方案 1: 权重和输入定向传递,乘加结果静止(矩阵乘法)¶
最终计算结果分布在各个 PE 内,需要把所有 PE 都读出的逻辑。
k 小于 w 的情况下,记 \(r=\frac{w}{k}\),每次输入 k 行权重,相当于 \(w \rightarrow k\),\(h \rightarrow r\cdot h\)
阵列启动时间为 \(t_{start}\).
第一个数据在矩阵的左上角 PE 单元输出,需要的周期数为 \(h+t_{start}\) .
全部算完需要 \(r\cdot h + t_{start} = \frac{w\cdot h}{k}+t_{start}\) 个周期。
假设 \(t_{start} = k - 1\),以 \(h=1024\),\(w=4096\),\(k=64\) 为例,第一个数据输出周期数为 \(1031\),总周期数为 \(65599\)。
方案 2:输入和乘加结果定向传递,权重静止(固定卷积核)¶
最终计算结果都在最底行的 PE 内,仅需要把最底行 PE 读出,但是需要事先把权重装载至 PE 阵列中。
如果 \(k\) 小于 \(h\),一次输入算不完,还得把底行的 PE 乘加结果送到顶层作为乘加初始值。
记 \(r=\frac{w}{k}\), \(s=\frac{h}{k}\),每次 \(k\cdot k\) 权重更新所需周期为 \(t_{load\_block}\),每次将底层 PE 结果送到顶层所需周期为 \(t_{shift\_block}\),阵列启动时间为 \(t_{start}\).
对于最差情况(权重更新、PE 底层与顶层乘加结果传递不与其他计算重叠
所有数据输出所需周期为:
假定 \(t_{shift\_block} = 0\),得第一个数据输出所需周期为:
假定 \(t_{shift\_block} = 0\),得总周期数为:
进一步假定 \(t_{load\_block}\) 与输入过程重叠,则第一个数据输出所需周期为:
进一步假定 \(t_{load\_block}\) 与输入过程重叠,则总周期数为:
进一步假定 \(t_{load\_block} \le k\),则第一个数据输出所需周期为:
进一步假定 \(t_{load\_block} \le k\),则总周期数为:
若 \(t_{load\_block}\) 不与输入过程重叠,假定 \(t_{load\_block} = k\),则第一个数据输出所需周期为:
若 \(t_{load\_block}\) 不与输入过程重叠,假定 \(t_{load\_block} = k\),则总周期数为: