VLSI数字信号处理系统——第七章脉动结构设计
作者:夏风喃喃
参考:
(1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著
(2) socvista https://wenku.baidu.com/u/socvista?from=wenku
文章目录
一. 引言
脉动阵列:多个相同的处理单元(简称PE)按一定互联规则组成的网络,称为脉动阵列。脉动阵列可以是一维线形、二维三角形、二维矩形、二维六边形、二维二叉树型、三维长方体形等等。
脉动阵列特点:
- 每一个节点,也就是PE,也称为胞元,都是相同的。
- 每个PE只与其相邻的PE进行通信,也就是说PE之间的通信具有局部性,而且通信是规则的。如果通信不是局部的而且不规则,那么网络中各PE的连接关系将会很错乱,硬件上进行布局布线也会遇到困难。
- 每个PE都有其局部的存储器,也就是PE的某些边带有延时,延时在硬件上对应于寄存器。这说明脉动阵列数据储存具有局部性,同时这也是流水运行的必要条件。
由于脉动阵列的以上特点,造成PE之间的高度流水化、规则化,因此系统吞吐率非常大且易于VLSI的实现。工程上为了扩大脉动阵列的用途,会引入一些弛豫,比如允许使用邻近(靠近但不是相邻)互联,使用数据广播操作,以及在系统中使用不同的胞元,尤其是边界上的胞元往往和网络内部胞元不太一样。
二. 脉动阵列设计方法原理
规则迭代算法依赖图:
不是任意的算法都可以用脉动阵列来实现,只有规则的迭代算法,画出该算法的依赖图(DG),才能用投影技术设计出脉动结构。如果依赖图的任一节点沿某个方向的边存在,则称依赖图是规则的,通俗的说,依赖图的所有节点具有相同形式的边。
设计方法步骤:
- 投影矢量 d T = [ d 1 d 2 ] d^T=[d_1\quad d_2] dT=[d1d2]:位移为d或者d的倍数的两个节点由同一个处理器执行。
- 处理器空间矢量 P T = [ p 1 p 2 ] P^T=[p_1\quad p_2] PT=[p1p2]:任何标示为 I T = [ i j ] I^T=[i\quad j] IT=[ij]的节点将被处理器以 P T I P^TI PTI处理。
- 调度矢量 S T = [ s 1 s 2 ] S^T=[s_1\quad s_2] ST=[s1s2]:任何标示为 I T = [ i j ] I^T=[i\quad j] IT=[ij]的节点在时间 S T I S^TI STI执行。
- 硬件利用率
H
U
E
=
1
/
∣
S
T
d
∣
HUE=1/\vert S^Td\vert
HUE=1/∣STd∣:同样的处理器执行两次任务间隔
∣
S
T
d
∣
\vert S^Td\vert
∣STd∣时间单位。
一个问题可选择不同的投影、处理器空间矢量和调度矢量设计出很多脉动结构。这些矢量必须满足下面推导的可行性限制调条件: - 处理器空间矢量 P P P和投影矢量 d d d必须正交, P T d = 0 P^Td=0 PTd=0。
- 如果节点A和B映射到同一个处理器,则它们不能在同一时间执行, S T d ≠ 0 S^Td≠0 STd=0。
- 边映射:如果依赖图中包含边 e e e,则在脉动阵列中引入一条延时为 S T e S^Te STe的边 P T e P^Te PTe。
三. FIR脉动阵列
3.1 设计B1(输入广播,结果移动,权重保持)
把DG图所在的i-j空间投影到一维脉动阵列空间。一维脉动阵列是一个2维空间,一个维度是PE空间,另一个维度是时间;同理二维脉动阵列是一个3 维空间,其中两个维度形成PE平面网络,另外一个维度是时间。对一维脉动阵列,时间轴不能和PE轴平行;对二维脉动阵列,时间轴不能和PE平面平行,即可行性限制条件。
如图4,蓝色坐标轴P是PE轴,红色坐标轴S是时间轴,图中的水平蓝线和竖直红线清楚的显示了节点(黄色)是如何投影到PE轴和时间轴的,这种投影的物理意义是:所有在同一条竖直红线上的节点在同一个周期被调度执行;所有在同一条水平蓝线上的节点在同一个处理单元被执行。
脉动硬件电路构造:
(1)可以看出图4所需的线形脉动网络包含3个PE,在硬件上可以先画出三个PE单元,如下图
(2)接下来,需要把DG中节点的边映射为各个PE之间的互联关系。对于
[
1
,
0
]
T
[1,0]^T
[1,0]T方向的权值w边(水平向右),权值边连接相邻的两个水平节点,将该边投影到S上,跨越一个周期,将改变投影到P上,位于同一PE,这就表示,权值边在硬件上是同一个PE上延时一个周期的连线,如下图示
而
[
0
,
1
]
T
[0,1]^T
[0,1]T方向的输入x边,投影到S没有跨度,投影到P是从低序号PE到高序号PE的边,反映到硬件上就是
最后,在看
[
1
,
−
1
]
T
[1,-1]^T
[1,−1]T方向的输出y边,投影到S,跨越一个周期,投影到P,从高序号PE到相邻的低序号PE,反映到硬件上就是
(3)得出脉动结构图,结合DG中节点的具体内容,即可画出最终电路。图1节点的内容是一个乘法加法的级联单元,最终电路图如下示
3.2 设计B2(输入广播,权重移动,结果保持)
脉动硬件电路构造:
(1)首先要用矢量来表示脉动空间的两个坐标轴P和S,这里令
S
=
[
1
0
]
T
S=[1\quad 0]^T
S=[10]T,
P
=
[
1
1
]
T
P=[1\quad 1]^T
P=[11]T,显然P和S不平行(叉积为0)。任一节点
[
i
j
]
T
[i\quad j]^T
[ij]T在P轴和S轴的投影,就是点积,即
[
i
j
]
T
[i\quad j]^T
[ij]T在
S
⋅
[
i
j
]
T
S·[i\quad j]^T
S⋅[ij]T周期被调度到
P
⋅
[
i
j
]
T
P·[i\quad j]^T
P⋅[ij]T处理器执行。
可以发现同一周期最多只有3 个节点被映射到P 轴的处理器执行,也就是说只需3个处理器便可以保证构造出功能正确的脉动阵列,画出三个PE单元,如下图
(2)在DG中存在三条边,分别是
[
1
,
0
]
T
[1,0]^T
[1,0]T的权值w边、
[
0
,
1
]
T
[0,1]^T
[0,1]T的输入x边以及
[
1
,
−
1
]
T
[1,-1]^T
[1,−1]T的输出y边,如图5 的绿线所示。将
[
1
,
0
]
T
[1,0]^T
[1,0]T的权值w边分别投影到S轴和P轴,有
S
⋅
[
1
0
]
T
=
[
1
0
]
T
⋅
[
1
0
]
T
=
1
S·[1\quad 0]^T=[1\quad 0]^T·[1\quad 0]^T=1
S⋅[10]T=[10]T⋅[10]T=1和
P
⋅
[
1
0
]
T
=
[
1
1
]
T
⋅
[
1
0
]
T
=
1
P·[1\quad 0]^T=[1\quad 1]^T·[1\quad 0]^T=1
P⋅[10]T=[11]T⋅[10]T=1,也就是说权值脉动阵列中是有低序号PE 流向高序号PE且跨越一个周期。
接下来是
[
0
,
1
]
T
[0,1]^T
[0,1]T的输入x边,分别投影到S轴和P轴,有
S
⋅
[
0
1
]
T
=
[
1
0
]
T
⋅
[
0
1
]
T
=
0
S·[0\quad 1]^T=[1\quad 0]^T·[0\quad 1]^T=0
S⋅[01]T=[10]T⋅[01]T=0和
P
⋅
[
0
1
]
T
=
[
1
1
]
T
⋅
[
0
1
]
T
=
1
P·[0\quad 1]^T=[1\quad 1]^T·[0\quad 1]^T=1
P⋅[01]T=[11]T⋅[01]T=1,意味着输入x也是从低序号PE流向高序号PE,但没有时间上的延迟,也就是数据广播结构。
最后是
[
1
,
−
1
]
T
[1,-1]^T
[1,−1]T的输出y边, 分别向S轴和P轴,有
S
⋅
[
1
−
1
]
T
=
[
1
0
]
T
⋅
[
1
−
1
]
T
=
1
S·[1\quad -1]^T=[1\quad 0]^T·[1\quad -1]^T=1
S⋅[1−1]T=[10]T⋅[1−1]T=1和
P
⋅
[
1
−
1
]
T
=
[
1
1
]
T
⋅
[
1
−
1
]
T
=
0
P·[1\quad -1]^T=[1\quad 1]^T·[1\quad -1]^T=0
P⋅[1−1]T=[11]T⋅[1−1]T=0,结果y在同一个PE上循环且延时一个周期,即
(3)最终电路如下图是,其中还需要添加一些控制电路,用于产生选路器的选择信号。
3.3 设计F(结果扇入,输入移动,权重保持)
选择
P
=
[
0
1
]
T
P=[0\quad 1]^T
P=[01]T,
S
=
[
1
1
]
T
S=[1\quad 1]^T
S=[11]T,列出三条边的映射结果
脉动结构为
3.4 设计R1(结果保持,输入和权重反向移动)
选择
P
=
[
1
1
]
T
P=[1\quad 1]^T
P=[11]T,
S
=
[
1
−
1
]
T
S=[1\quad -1]^T
S=[1−1]T,在R1 中需反转输入边,三条边用绿色标注在图7中。边的映射结果表如下
脉动结构为
3.5 设计R2和双R2(结果保持,输入和权重同方向但不同速度移动)
选择
P
=
[
1
1
]
T
P=[1\quad 1]^T
P=[11]T,
S
=
[
2
1
]
T
S=[2\quad 1]^T
S=[21]T,同一周期最多也只有2个节点投影到P轴,也就是说只需2个PE即可,但是,我们仍然在P轴上设置3个PE,稍后再讨论设置2个PE的情况。边的映射结果表如下
脉动结构为
在脉动设计中选择P轴和S轴是非常关键的,如果选择不当构造出来的脉动阵列比较复杂,而且硬件利用率也不高。例如R2结构,结果隔一个周期出一个,相吞吐率就下降了一半,PE节点利用率也不高,有些PE在某些周期不参与有意义的计算。
为了提高PE的利用率,在P轴上只设置2个PE。因为同一周期最多只会有2个节点投影到P轴。
边的映射结果表如下
脉动结构为
选择
P
=
[
1
1
]
T
P=[1\quad 1]^T
P=[11]T,
S
=
[
1
2
]
T
S=[1\quad 2]^T
S=[12]T,对于双R2,需要反转输出边,三条边的情况如图中绿色带箭头线所示。观察R2可知需要设置3个PE。边的映射结果表如下
脉动结构为
3.6 设计W1(权重保持,输入和结果反向移动)
选择
P
=
[
0
1
]
T
P=[0\quad 1]^T
P=[01]T,
S
=
[
2
1
]
T
S=[2\quad 1]^T
S=[21]T,显然W1可设置3 个PE,也可以设置2个PE,这里设置3个PE。边的映射结果表如下
脉动结构为
3.7 设计W2和双W2(权重保持,输入和结果同方向但不同速度移动)
选择
P
=
[
0
1
]
T
P=[0\quad 1]^T
P=[01]T,
S
=
[
1
2
]
T
S=[1\quad 2]^T
S=[12]T,W2 需设置3个PE,并且需反转输出边。边的映射结果表如下
脉动结构为
选择
P
=
[
0
1
]
T
P=[0\quad 1]^T
P=[01]T,
S
=
[
1
−
1
]
T
S=[1\quad -1]^T
S=[1−1]T,双W2需设置3个PE,并且需反转输入边。边的映射结果表如下
脉动结构为
3.8 应用变换的关联脉动设计
设定不同的P和S轴,将会构造出不同形式的脉动阵列,但是这些阵列是“相通”的,且功能相同。所谓的“相通”是指可以通过各种电路变化从某一个阵列导出另一个阵列。
比如F可以通过B1应用割集重定时得到。
W1可由F二分之一减速然后在应用割集重定时得到。
四. 调度矢量的选择
前面所构造的脉动空间隐含了很大的人为因素,而且还默认驱动系统的时钟周期T足够长,以至于不用考虑节点关键路径的长短问题。在实际的系统设计中,如果T是预先规定的且不能更改,而节点的计算时间偏偏又大于T,此时就不能随意地设定S和P矢量。特别是S,S 选择不当将导致节点计算结果错误。
4.1 基于调度不等式选择 S T S^T ST
设
S
=
[
s
1
s
2
]
T
S=[s_1\quad s_2]^T
S=[s1s2]T,则
I
x
I_x
Ix在
S
⋅
I
x
=
s
1
×
i
+
s
2
×
j
S·I_x=s_1×i+s_2×j
S⋅Ix=s1×i+s2×j周期被调度,
I
y
I_y
Iy在
S
⋅
I
y
=
s
1
×
(
i
+
1
)
+
s
2
×
(
j
−
1
)
S·I_y=s_1×(i+1)+s_2×(j-1)
S⋅Iy=s1×(i+1)+s2×(j−1)周期被调度,那么使得
S
⋅
I
y
≥
S
⋅
I
x
+
2
S·I_y≥S·I_x+2
S⋅Iy≥S⋅Ix+2成立的
S
S
S就是所求解。化简不等式,有
s
1
−
s
2
≥
2
s_1-s_2≥2
s1−s2≥2,取
S
=
[
2
0
]
T
S=[2\quad 0]^T
S=[20]T,确定P与S不平行即可。
调度矢量选择步骤:
- 找出所有基本边。可利用简化依赖图(RDG)得到基本边,RDG则利用相应问题的规则迭代算法(RIA)描述构造。
- 根据公式 S ⋅ I y ≥ S ⋅ I x + T S·I_y≥S·I_x+T S⋅Iy≥S⋅Ix+T建立调度不等式,且解之得到可用的 S T S^T ST。
4.2 规则迭代算法(RIA)描述
RIA有两种标准形式,定义如下:
- 如果所有方程的输入(RHS)下标相同,则该RIA为标准输入RIA形式;
- 如果所有输出(LHS)下标,都相同,则该RIA为标准输出RIA形式。
应用同样的FIR滤波器,RIA描述为:
其标准输出RIA描述为:
根据这些方程,可以得到RDG如下:
4.3 应用简化依赖图(RDG)的调度矢量和脉动阵列设计
五. 矩阵乘法与二维脉动阵列设计
矩阵乘法是3维DG,可用投影法将其投影到2维脉动空间。在DG 中,每个节点的内容是一个乘法器和一个加法器,调度的约束在于[0,0,1]边,这条边表示将前一个节点的结果和当前节点所得的a*b相加。
令
S
=
[
s
1
s
2
s
3
]
T
S=[s_1\quad s_2\quad s_3]^T
S=[s1s2s3]T,则调度不等式为
S
⋅
I
y
≥
S
⋅
I
x
+
1
S·I_y≥S·I_x+1
S⋅Iy≥S⋅Ix+1,化简得
s
3
≥
1
s_3≥1
s3≥1。(对所有边建立调度不等式是严格正确的,这里之所以只对
[
0
,
0
,
1
]
T
[0,0,1]^T
[0,0,1]T边建立调度不等式,是因为其他边是一种广播性质的边,不会对导出正确的脉动结构造成影响)
不妨取
S
T
=
[
−
1
−
1
1
]
S^T=[-1\quad -1\quad 1]
ST=[−1−11],
P
T
=
[
1
0
0
0
1
0
]
P^T=\begin{bmatrix} 1&0&0\\ 0&1&0\\ \end{bmatrix}
PT=[100100],需要进行a和b边的反转,才能保证映射是合法的,边映射如下表
首先把DG中各个节点的调度时间和所分配的PE序号标出来
图中,黄色数字是节点的坐标,蓝色数字是节点映射的PE序号,红色数字是节点被调度的时刻(相对时间)。从图中可知,可能出现的PE序号有(0,0)/(0,1)/(1,0)/(1,1),所以只需在处理器平面设置4个PE节点即可,如图
上图给出了每个PE 的序号,以及该PE工作的时刻,比如左下角为(0,0)号PE,在0周期和1周期工作,同理右上角为(1,1)号PE,在-2周期和-1周期工作。接下来将边映射到脉动阵列中,有
根据调度不等式,考虑如下可能的解:
解1——S.Y.Kung的二维脉动阵列:
取
S
T
=
[
1
1
1
]
S^T=[1\quad 1\quad 1]
ST=[111],
P
T
=
[
1
0
0
0
1
0
]
P^T=\begin{bmatrix} 1&0&0\\ 0&1&0\\ \end{bmatrix}
PT=[100100],调度图如下
边映射表
脉动结构
解2——Weiser-Davis的二维脉动阵列:
取
S
T
=
[
1
1
1
]
S^T=[1\quad 1\quad 1]
ST=[111],
P
T
=
[
1
0
1
0
1
1
]
P^T=\begin{bmatrix} 1&0&1\\ 0&1&1\\ \end{bmatrix}
PT=[100111],调度图如下
边映射表
脉动结构
解3——Schreiher-Rao的二维脉动阵列:
取
S
T
=
[
1
1
1
]
S^T=[1\quad 1\quad 1]
ST=[111],
P
T
=
[
1
0
−
1
0
1
0
]
P^T=\begin{bmatrix} 1&0&-1\\ 0&1&0\\ \end{bmatrix}
PT=[1001−10],调度图如下
边映射表
脉动结构
解4——Kung-Leiserson的二维脉动阵列:
取
S
T
=
[
1
1
1
]
S^T=[1\quad 1\quad 1]
ST=[111],
P
T
=
[
1
0
−
1
0
1
−
1
]
P^T=\begin{bmatrix} 1&0&-1\\ 0&1&-1\\ \end{bmatrix}
PT=[1001−1−1],调度图如下
边映射表
脉动结构
解5:
取
S
T
=
[
1
2
1
]
S^T=[1\quad 2\quad 1]
ST=[121],
P
T
=
[
0
1
1
1
0
0
]
P^T=\begin{bmatrix} 0&1&1\\ 1&0&0\\ \end{bmatrix}
PT=[011010],调度图如下
边映射表
脉动结构
解6:
取
S
T
=
[
1
1
1
]
S^T=[1\quad 1\quad 1]
ST=[111],
P
T
=
[
1
−
1
−
1
0
1
−
1
]
P^T=\begin{bmatrix} 1&-1&-1\\ 0&1&-1\\ \end{bmatrix}
PT=[10−11−1−1],调度图如下
边映射表
脉动结构
解7:
取
S
T
=
[
1
2
1
]
S^T=[1\quad 2\quad 1]
ST=[121],
P
T
=
[
1
1
1
1
−
1
0
]
P^T=\begin{bmatrix} 1&1&1\\ 1&-1&0\\ \end{bmatrix}
PT=[111−110],调度图如下
边映射表
脉动结构
六. 包含延迟的空间表示脉动阵列(略)
七. 结论
本章介绍了脉动结构设计方法,并以FIR滤波器和矩阵间乘法为例说明了该方法的原理。将DG按某种规则投影到脉动空间时,注意,脉动空间有一个维度是时间,其他维度构成脉动网络。