树形加法器(Brent-Kung加法器)
g
[
i
,
i
+
3
]
g_{[i, i+3]}
g[i,i+3] 和
p
[
i
,
i
+
3
]
p_{[i, i+3]}
p[i,i+3] 分别叫做“块
g
g
g 信号”和“块
p
p
p 信号”,代表了这个加法器从第
i
i
i bit到第
i
+
3
i+3
i+3 bit这个块的进位信息。它们的具体形式如:
一般的
g
i
,
i
+
n
g_{i, i+n}
gi,i+n 和
p
i
,
i
+
n
p_{i,i+n}
pi,i+n 的一般形式同理,第
i
+
n
i+n
i+n位进位信号可以通过下式生成:
块
g
g
g,
p
p
p信号的合并:
对于
i
0
<
i
1
<
i
2
i_0 < i_1 < i_2
i0<i1<i2 有:
对于
i
0
≤
i
1
−
1
≤
j
0
<
j
1
i_0 \leq i_1-1 \leq j_0 < j_1
i0≤i1−1≤j0<j1有:
并行前缀加法器
块g,p信号与并行前缀运算
我们定义了所谓的“块
p
,
g
p, g
p,g信号”,它们基本上是成对出现的,因此不妨让我们将这两个信号拼为一个信号二元对:
那么根据上面的公式 (2.3.1) 和 (2.3.2) ,我们可以将两个相邻或重叠块的块
p
,
g
p, g
p,g 信号
(
g
‘
,
p
‘
)
(g^`, p^`)
(g‘,p‘) 和
(
g
"
,
p
"
)
(g^", p^")
(g",p") 合并为一个新的块信号
(
g
,
p
)
(g, p)
(g,p) ,代表这两个块合并后新块的块
(
g
,
p
)
(g, p)
(g,p) 信号对,如图所示,
现在可以把这种合并操作记为“
U
U
U ”),念作“并”。则图中的合并过程可写为:
为了让符号更加简洁,在下文中不妨让我们记:
然后,可以证明这个运算操作 [公式] 对可合并的块
g
,
p
g,p
g,p信号是满足结合律的,即对三个相邻或重叠的
Q
A
,
Q
B
,
Q
C
Q_A, Q_B, Q_C
QA,QB,QC 有:
但是交换律就不行。
块g,p信号对、合并操作与区间合并
前文定义了所谓的块 g , p g,p g,p信号对 ( g , p ) (g,p) (g,p) 与它们之间的合并操作 U U U ,这里我想插入一个小节,以说明它们在代数结构上和区间,以及区间合并操作之间的关系。
前面我们讨论过,两个相邻或者重叠的块信号
Q
[
a
,
b
]
Q_{[a, b]}
Q[a,b]
Q
[
c
,
d
]
Q_{[c, d]}
Q[c,d]是可以通过
U
U
U 操作合并为一个大块信号的:
将上式中的所有“
Q
[
i
,
j
]
Q_{[i, j]}
Q[i,j] ”替换为“
[
i
,
j
]
[i, j]
[i,j] ”后,就能发现所谓的块
g
,
p
g, p
g,p信号其实就相当于一个(整数)区间,而
U
U
U 则相当于区间的并,可以将两个相邻或重叠的区间并为一个大区间:
进位计算的并行前缀表示
于是,我们就可以用 U U U 将进位计算问题表述为:
给定加法器每bit的
g
,
p
g, p
g,p 信号对(通过式 (1.4.2) 获得):
通过
U
U
U 操作求以下每个块信号对:
可以直接通过将每个给定
g
,
p
g, p
g,p信号合并:
上解
(
S
o
l
,
1
)
(Sol,1)
(Sol,1) 直接生成的电路就相当于标准的超前进位链,用图来表示就是:
(
S
o
l
,
1
)
(Sol,1)
(Sol,1) 中存在着非常多相同的中间变量,每个块信号都是下个块信号的一部分,具体地:
所以也可以:
上解
(
S
o
l
,
1
)
(Sol,1)
(Sol,1) 直接生成的电路就相当于标准的行波进位链,用图来表示就是:
其最大程度地减少了计算量,但是关键路径也最长,如上图一共需要k级节点。
除此之外,
U
U
U 还满足结合律(
(
3.1.4
)
(3.1.4)
(3.1.4) ),因此我们可以将 (Sol.1) 中
Q
[
0
,
k
]
Q_{[0, k]}
Q[0,k] 的计算部分拆成多个个可并行的部分,例如将它的前半段和后半段拆成两个可并行计算的子部分(下图左):
或者每两个相邻项结合一次(下图右):
等等,怎么拆都可以。拆完后我们还可以将不同待求块信号中的相同部分共用,例如如果
Q
[
0
,
7
]
Q_{[0, 7]}
Q[0,7] 和
Q
0
,
15
Q_{0, 15}
Q0,15 如果都是像上式那样每两项都结合一次的话,那么其中的大部分中间变量都是可以共用的。
以上就是“并行前缀加法器”中的核心要点:
- 利用计算步骤的结合律并行地求解问题,以减少电路延迟(latency)。
- 发现计算步骤中的重复部分并共用计算结果,以减少电路面积(area)。
需要注意的是,有的重复部分是需要以延迟为代价来进行共用的,因为可能会增加计算步骤。事实上,并行前缀加法器往往也需要在延迟与面积间进行权衡(trade-off),但这也为并行前缀加法器设计带来了非常大的灵活性:可以根据实际情况中对延迟与面积的需求,对并行前缀加法器结构进行特定的平衡调整,以达到延迟与面积间的平衡点。
除此之外,不同设计之间的扇入扇出情况也可能有所不同,这会在下一节的讨论中体现。
并行前缀加法器的一个完整示例
现在让我们来看一个简单的完整示例。
这里举一个4bit加法器的例子,记它的两个4bit输入分别为
那么它每bit的
g
,
p
g, p
g,p 信号对分别为
于是
我们可以选择直接分别并行地计算上面的每行公式,这样所得到的设计就是标准的超前进位链条。但是也可以选择,比如先计算:
然后:
这样,就避免了一些不必要的重复计算,从而减少了电路面积。 有上面了这些块
p
,
g
p, g
p,g 信号对后,就能直接获得加法器每位的输出
s
i
s_i
si 了:
如果不需要最低位进位输入
c
−
1
c_{-1}
c−1 ,可以直接在上式中去掉相应的部分。
或者,也可以将 c − 1 c_{-1} c−1 表示为 g − 1 , p − 1 g_{-1}, p_{-1} g−1,p−1 ,然后加入到每个待求块信号的计算当中:
1、
c
−
1
=
0
c_{-1}=0
c−1=0时,
(
g
−
1
,
p
−
1
)
=
(
0
,
0
)
(g_{-1}, p_{-1})=(0,0)
(g−1,p−1)=(0,0)
2、
c
−
1
=
1
c_{-1}=1
c−1=1时,
(
g
−
1
,
p
−
1
)
=
(
1
,
0
)
(g_{-1}, p_{-1})=(1,0)
(g−1,p−1)=(1,0)
相当于将整数加法器的最低位进位看作是小数位个位的进位输出。
上例方案的结构如下图所示:
我们把上图这种图叫做并行前缀图(Parallel Prefix Network),可以通过这种图表示法来直观地表示各种不同并行前缀进位网络的设计。例如4bits的并行前缀进位链还可以设计成这样:
就相当于一个行波进位加法器。
下一节中,我们就会通过这种图表示法来了解各种不同的并行前缀进位网络结构,它们在延迟与面积、扇入扇出、布线结构等方面上各有不同的权衡(trade-off)。
不同的并行前缀进位网络设计
介绍几种不同的并行前缀进位网络设计,它们的一般公式表示都相对麻烦,但是用“并行前缀图”来表示的话就非常直观。
Kogge-Stone(KS)结构
KS结构的并行前缀网络如上图所示。它的特点是,逻辑级数和扇出都非常小,但节点数量非常高,且因此到了后面长距互联导线会有些多。
它的构造思路大概是,从图中最上面的输入开始,第1层将所有线上信号转发给它左边第1个线并合并、第2层将所有线上信号转发给它左边第2个线、第3层转发给左边第4根线… 以此类推直至合成出所有待求信号。
KS结构增加了大量的节点,并且将扇出平均地分布到了每个节点上,而不是像LF结构那样,让少量节点承担大量扇出。
Brent-Kung(BK)结构
BK结构的并行前缀网络如上图所示。它的特点是扇出非常小,节点也较少,但逻辑级数更多。BK结构是通过增加额外的逻辑级数来缓解扇出压力的。
混合并行前缀网络与其它的并行前缀网络设计(Han-Carlson结构)
并行前缀网络也可以是多种“纯”方案的混合,例如上图就展示了一种混合方案,将KS结构的头尾替换为了BK结构,它与前面所介绍的3种结构相比表现又有所不同,介于纯BK结构与纯KS结构之间。
改进版Han-Carlson结构
优化方案:第一步计算奇数位的进位,第一级保持不变,第二级开始每一级都减少二分之一的pg 单元,这样就得出了奇数位的进位; 第二步是再使用一级将奇数位的进位传递到偶数位. 优化后Han-Carlson结构的级数是
l
o
g
2
N
+
2
log_2N+2
log2N+2,其中
N
N
N 是操作位数. 如上图是优化后的Han-Carlson 结构的并行前缀计算图.(参考文献:基于 Han-Carlson 结构的加法器优化设计)
三种结构的复杂度比较
并行结构 | Level | 所需 U U U操作个数 |
---|---|---|
Brent-Kung | 2logN - 2 | 2N - logN - 2 |
Kogge-Stone | logN | Nlog(N/2) + 1 OR NlogN - N + 1 |
Han-Carlson | logN +1 | N/2 * logN |
Han-Carlson advanced | logN+2 | 3N/4 - 1 + N/4 * logN |
其中所有的logN均为 l o g 2 N log_2N log2N
参考连接:
https://zhuanlan.zhihu.com/p/387639241