本文主要是介绍体系结构复习-Part 3-互连网络 + 向量处理机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
体系结构复习-Part 3-互连网络 + 向量处理机
- 体系结构复习-Part 3-互连网络 + 向量处理机
- 1. 互连网络(Interconnection)
- 1.1 定义
- 1.2 基本参数
- 1.3 静态网络
- 1.3.1 线性阵列
- 1.3.2 环
- 1.3.3 带弦环
- 1.3.4 链接
- 1.3.5 树形
- 1.3.6 星形
- 1.3.7 网格形和环网形
- 1.3.8 立方体
- 1.3.9 带环立方体
- 1.3.10 k元n-立方体
- 1.4 动态网络
- 1.4.1 恒等函数
- 1.4.2 方体函数
- 1.4.3 洗牌函数(循环左移1位)
- 1.4.4 逆洗牌函数(循环右移1位)
- 1.4.5 碟式函数(对称函数,逆序函数)
- 1.4.6 PM2i函数(Plus Minus 2i函数,加减2i函数)
- 1.5 多级互连网络
- 1.6 交叉开关(Crossbar)与总线互连
- 1.6.1 Crossbar网络
- 1.6.2 总线互连
- 1.7 交换传输方式
- 1.7.1 传输延时与吞吐量
- 1.7.2 线路交换
- 1.7.3 分组交换
- 1.7.4 寻径算法
- 1.7.5 播送方式
- 1.8 虚拟通道与通信死锁
- 1.9 包冲突
- 1.10 寻径效率
- 1.11 Active Message
- 2. SIMD与MISD处理机
- 2.1 SIMD与向量处理机
- 2.1.1 SIMD
- 2.1.2 向量处理类型
- 2.1.3 向量处理机
- 2.2 脉动阵列(Systolic Arrays)
- 2.2.1 几种脉动阵列类型
- 2.2.2 脉动阵列优劣
- 2.2.3 TPU
体系结构复习-Part 3-互连网络 + 向量处理机
1. 互连网络(Interconnection)
1.1 定义
由交换(开关)元件按照一定的拓扑结构和控制方式构成的网络实现计算机系统内部多个处理机或功能部件的相互连接
1.2 基本参数
- 节点度:与节点相连接的边数,表示节点所需要的I/O端口数。进一步的节点度 = 入度 + 出度
- 距离:与两个节点之间相连的最少边数
- 网络直径:网络中任意两个节点间距离的最大值
- 网络规模:网络中节点数,表示该网络功能连接部件的多少
- 等分宽度:对剖,至少需要切开的边数
- 节点间的线长:两个节点间的线的长度
- 对称性:从任何节点看,拓扑结构都一样
1.3 静态网络
1.3.1 线性阵列
设网络规模为N
,则:
-
具有
N-1
条链路 -
直径为
N-1
(首尾节点的距离) -
非端节点度为
2
-
不对称
-
等分宽度为1
当N
很大时,线性阵列通信效率较低
线性阵列与总线区别
总线只能同时有两个节点工作,而线性阵列允许多对节点并行工作
1.3.2 环
设网络规模为N
,则:
- 若为单向环
- 链路数
N
- 直径为
N - 1
- 度为
2
- 对称
- 等分宽度为
2
- 链路数
- 若为双向环
- 链路数
N
- 直径为
|N/2」
- 度为
2
- 对称
- 等分宽度为
2
- 链路数
1.3.3 带弦环
- 左图
- 规模
12
- 节点度
3
- 链路数
18
- 不对称
- 直径
4
- 等分宽度
2
- 规模
- 右图
- 规模
12
- 节点度
4
- 链路数
24
- 对称
- 直径
3
- 等分宽度
8
- 规模
1.3.4 链接
全连接
- 规模
8
- 节点度
7
- 链路数
28
- 对称
- 直径
1
- 等分宽度
16 = 28 - 12
1.3.5 树形
- 网络规模为
15
- 最大节点度为
3
- 直径为
6
(2(|log2N|(向上取整)-1)) - 不对称
- 等分宽度为
1
1.3.6 星形
- 网络规模为
N
- 直径为
2
- 最大节点度为
N-1
- 非对称
- 等分宽度为
1
1.3.7 网格形和环网形
- 2D网孔
-
网络规模为
N
,设r = √N
-
节点最大度为
4
-
链路数
每个节点都伸出两条边,共
2N
有两个边的节点只伸出一条边,共
2r = r+r
故链路数为
2N-2r
-
直径为
2(r-1)
-
非对称
-
等分宽度为
r
-
illiac网孔
以2D网孔为基础,在垂直方向上带环绕,水平方向呈蛇状环绕
-
网络规模为
N
,设r = √N
-
节点度为
4
-
链路数
每个节点都伸出两条边,共
2N
有两个边的节点只伸出一条边,共
2r = r+r
横向多出
r
条链路,纵向多出r
条链路故链路数为
2N-2r+r+r = 2N
-
直径为
r-1
-
非对称
-
2D环绕
以2D网孔为基础,在垂直方向上带环绕,水平方向呈环绕
-
网络规模为
N
,设r = √N
-
节点度为
4
-
链路数
每个节点都伸出两条边,共
2N
有两个边的节点只伸出一条边,共
2r = r+r
横向多出
r
条链路,纵向多出r
条链路故链路数为
2N-2r+r+r = 2N
-
直径为
2|r/2|
,横向最大距离为|r/2|
,纵向最大距离同样为|r/2|
-
非对称
1.3.8 立方体
-
一个n-立方体由
N=2^n
个顶点构成 -
节点度为
n
-
网络直径为
n
-
等分宽度为
N/2
-
对称
1.3.9 带环立方体
增加环后,端点处的通信压力被分摊了下来,不得不感叹先辈的智慧
假设有一个带环n-立方体,则
- 网络规模为
n2^n
- 节点度为
n
- 网络直径为
2n
,对角线对称即可 - 对称
- 等分宽度为
2^(n-1)
1.3.10 k元n-立方体
对于一个k元n-立方体(每个面有k*k个元素)
- 网络规模为
N = k^n
传统环网等价于4元2-立方体
1.4 动态网络
由Switch构成,可动态改变连接方式
1.4.1 恒等函数
f e ( X n − 1 X n − 2 . . . X k . . . X 0 ) = X n − 1 X n − 2 . . . X k . . . X 0 f_e(X_{n-1}X_{n-2}...X_k...X_0)=X_{n-1}X_{n-2}...X_k...X_0 fe(Xn−1Xn−2...Xk...X0)=Xn−1Xn−2...Xk...X0
其中…Xi…通常是二进制表示,取n=2,则恒等函数可表示为
(X1 X0)
00 --- 00
01 --- 01
10 --- 10
11 --- 11
1.4.2 方体函数
c u b e k ( X n − 1 X n − 2 . . . X k . . . X 0 ) = X n − 1 X n − 2 . . . X k ‾ . . . X 0 cube_k(X_{n-1}X_{n-2}...X_k...X_0) = X_{n-1}X_{n-2}...\overline{X_k}...X_0 cubek(Xn−1Xn−2...Xk...X0)=Xn−1Xn−2...Xk...X0
即,cubek为第k位取反
1.4.3 洗牌函数(循环左移1位)
首尾不变,前三隔一,后三插空
洗牌函数变形
- 均匀洗牌(洗牌 + Cube0)
第k个子洗牌
最低k位循环左移1位
第k个超洗牌
最高k-1位循环左移1位
1.4.4 逆洗牌函数(循环右移1位)
1.4.5 碟式函数(对称函数,逆序函数)
000 -- 000
001 -- 100
010 -- 010
011 -- 110
100 -- 001
101 -- 101
110 -- 011
111 -- 111
1.4.6 PM2i函数(Plus Minus 2i函数,加减2i函数)
P M 2 + i ( j ) = j + 2 i m o d N P M 2 − i ( j ) = j − 2 i m o d N 其中, 0 ≤ j ≤ N − 1 , 0 ≤ i ≤ n − 1 , n = l o g 2 N , n 为位数,共 2 n 个互连函数 PM2_{+i}(j)=j+2^i mod \ N\\ PM2_{-i}(j)=j-2^i mod \ N\\ 其中,0\le j \le N-1, 0 \le i \le n-1, n = log_2N, n为位数,共2n个互连函数 PM2+i(j)=j+2imod NPM2−i(j)=j−2imod N其中,0≤j≤N−1,0≤i≤n−1,n=log2N,n为位数,共2n个互连函数
上图为illiac网络。其中,第一个PM函数代表正向蛇形,第二个PM函数代表逆向蛇形,如此一来蛇形部分便可全部表示;而第三个PM函数表示了中间蓝色箭头的连线;
1.5 多级互连网络
由多个Switch级联起来
三要素:
-
开关单元
对于2x2开关单元,有如下4种类型
-
级间互连模式
一堆连接方式
-
控制方式
控制开关单元的传播路线
- 级控制:每级只有一个控制信号
- 单元控制:每个开关有一个控制信号
- 部分级控制:几个开关合用一个控制信号
示例:
-
Omega网络
N
个输入端log2N
级
注意到各级拓扑结构相同,都为洗牌置换
1.6 交叉开关(Crossbar)与总线互连
1.6.1 Crossbar网络
- 无阻塞(不会产生冲突)
- 单极网络
- 贵
1.6.2 总线互连
- 带宽低,容易阻塞(容易产生冲突)
- 结构简单
解决方案:
- 解决冲突
- 设置静态优先级
- 时间片轮转
- 动态优先级(LRU等)
- FIFS(先来先服务)
- 增大带宽
- 多总线结构
- 层次总线结构
- 多维总线结构
1.7 交换传输方式
1.7.1 传输延时与吞吐量
-
消息的传输延时:从它在源节点进行发送到它在目的节点被完整接收所消耗的时间
-
网络的传输延时:在一定条件下发送消息的平均延时
-
网络的吞吐量:单位时间内网络所能传输消息数目或长度
-
公式:
T = T s + T n + T b T = T_s + T_n + T_b T=Ts+Tn+Tb-
Ts
:建立延时(Setup)
T s = T s s t a r t + T s d e s t i n a t i o n T_s = T_{s\ start} + T_{s\ destination} Ts=Ts start+Ts destination
包括源节点与目的节点的处理时间 -
Tn
:网络延时(Network)网络时延……
-
Tb
:阻塞延时(Blocking)排队时延……
-
-
传输时延的参数
- 启动时间
ts
:包括打包、执行选路算法和建立通信界面的时间 - 节点延迟时间
th
:包头穿越网络中两直接相连?? - 字传输时间
tw
:传输每个字的时间,是带宽的倒数 - 链路长度
l
- 信包长度
m
- 节点个数
p
- 启动时间
1.7.2 线路交换
需要预约物理资源
- FDM(频分复用)
- TDM(时分复用)
线路交换网络时延公式如下:
T n = T p × ( D + 1 ) + L B = L c B × ( D + 1 ) + L B = L c × ( D + 1 ) + L B T_n = T_p \times (D + 1) + \frac{L}{B} = \frac{L_c}{B}\times (D + 1) + \frac{L}{B} = \frac{L_c \times (D + 1) +L}{B} Tn=Tp×(D+1)+BL=BLc×(D+1)+BL=BLc×(D+1)+L
Lc
:建立物理通路所传递的控制信息的长度D
:中间节点个数(不算两端节点)L
:信息长度B
:带宽
这个公式与计算机网络中的线路交换用到的公式不同在于
- 建立时无需收到ACK
- 忽略了传播时延
注:建立物理通路的数据包时应该采用转发方式,因为此时还没有通路,因此耗时Tp(D + 1)
1.7.3 分组交换
-
直通传输(Cut Through)
收到消息头就开始转发,不必等待整个消息都到达
直通方式延时为:
t c o m m ( C T ) = t s + t w × m + t h × l t_{comm}(CT) = t_s + t_w \times m + t_h \times l tcomm(CT)=ts+tw×m+th×l
th
可以理解为建立物理连接带来的每段链路的开销时间,所以这种方法又可被称为虚拟直通
-
存储转发(Store and Forward)
存储转发延时为:
t c o m m ( S F ) = t s + ( m t w + t h ) × l t_{comm}(SF) = t_s + (mt_w + t_h) \times l tcomm(SF)=ts+(mtw+th)×l -
虫蚀方式
将消息包进一步切片,可解决存储转发需要大容量缓存这一问题。
在存储转发方式下,若发生网络阻塞,则节点需要缓存一个数据包;
而在虫蚀方式下,若发生网络阻塞,则节点只需缓存一个数据片,不过由于该数据包包含很多数据片,后续数据片也需要被所在节点缓存,因此节点数开销增大;
其传输延时公式为:
T n = T p × D + L B = L f B × D + L B T_n = T_p \times D + \frac{L}{B} = \frac{L_f}{B} \times D + \frac{L}{B} Tn=Tp×D+BL=BLf×D+BL
Lf
为片长
上述三种方式非常混乱,这里我自己特意研究了一下,并总结了各种方式的示意图,以便大家理解,(这里再次批评清华出版社,真的拉跨,写书人和编辑就不明白学生理解力到底如何,图也不画清晰,给个公式就跑,是要干嘛?不要因为某些章节不重要就不详细写好吧)
-
传统分组交换
在传统计算机网络中,分组交换是以如下方式进行:
每个数据包按照流水的方式发送。但这里,上述章节讨论的所有方式都是基于单一数据包传输延时的,也就是说,上述提到的所有方式都是为了优化单一
Pack
的传输速率,这个过程如下图所示
为了将我们的故事讲好,我们按照教材上的说明再次给出参数含义:
D
:中间节点数L
:包长度B
:链路带宽
后面的讲述中,我们假设D = 1
,所有节点数为3
,链路数为2
,并且忽略链路传播延时
-
存储转发
与优化前无区别,如下图所示
显然,该包的传输延时为
T n = L B × ( D + 1 ) = L B × ( 1 + 1 ) = 2 L B T_n = \frac{L}{B} \times (D + 1) = \frac{L}{B} \times (1 + 1) = \frac{2L}{B} Tn=BL×(D+1)=BL×(1+1)=B2L
-
直通传输
直通传输收到包头就转发,而不必收到整个Pack,这里书上将包长度解释为数据长度,而将包头长度用变量
Lh
重新表示,因此,传输过程如下图所示
于是,该包的传输延时为
T n = L B + L h B + D × L h B = L B + ( D + 1 ) × L h B = L B + 2 L h B T_n = \frac{L}{B} + \frac{L_h}{B} + D \times \frac{L_h}{B} = \frac{L}{B} + (D + 1) \times \frac{L_h}{B} = \frac{L}{B} + \frac{2L_h}{B} Tn=BL+BLh+D×BLh=BL+(D+1)×BLh=BL+B2Lh
这里存个疑,因为PPT上的一种说法是,Lh
仍然包括在L
中,个人认为这也是最合理的,因此传输延时为
T n = L B + D × L h B = L B + D × L h B T_n =\frac{L}{B}+ D \times \frac{L_h}{B} = \frac{L}{B} + D\times \frac{L_h}{B} Tn=BL+D×BLh=BL+D×BLh
-
虫蚀方式
虫蚀方式对直通传输进行进一步改进。它将每个Pack划分为片(Slice,长度用
Lf
表示),于是在微观上每个数据包的转发方式都成了分组转发,如下图所示
此时,该包的传输时延为
T n = L B + L f B × D = L + D × L f B = L + 1 × L f B T_n = \frac{L}{B} + \frac{L_f}{B} \times D = \frac{L+D\times L_f}{B} = \frac{L + 1\times L_f}{B} Tn=BL+BLf×D=BL+D×Lf=BL+1×Lf
由此我们可以看到虫蚀方式与直通方式其实很相似,但虫蚀方式将包分成了更多的片,使得在网络拥塞时对于节点缓冲区的大小要求没有直通方式那么高。
我相信,看到这里也就基本明白了三种传输方式与计网的差别与联系了。
1.7.4 寻径算法
- X-Y寻径算法
- 先找X后找Y
- 距离为:
d = |x1 - x2| + |y1 - y2|
- E-立方寻径
- S ⊕ D = R
- if Ri = 1, then go to V ⊕ 2^(i-1)
1.7.5 播送方式
本节主要讨论基于直通传输和存储转发的播送方式,另外,我们需要考虑setup时间以及节点延迟时间,因此我们分别采用公式:
直通传输: t c o m m ( C T ) = t s + m t w + t h × l 存储转发: t c o m m ( S F ) = t S + ( m t w + t h ) × l 直通传输:t_{comm}(CT) = t_s + mt_w + t_h \times l \\ 存储转发:t_{comm}(SF) = t_S + (mt_w + t_h) \times l 直通传输:tcomm(CT)=ts+mtw+th×l存储转发:tcomm(SF)=tS+(mtw+th)×l
-
单播模式(Unicast)
单点通信套公式即可,例如对于环状网络,有
l ≤ N / 2
,忽略th
,则- 存储转发(SF):
T S F ≤ t s + m × N 2 T_{SF} \le t_s + m\times \frac{N}{2} TSF≤ts+m×2N
- 直通传输(CT):
T C T ≤ t s + m × N 2 T_{CT} \le t_s + m \times \frac{N}{2} TCT≤ts+m×2N
可见,当信息包足够大,大到我们能够忽略
th
时,直通传输与存储转发的时延几乎一致 -
多播模式(Multicast)
-
广播模式(Broadcast)
-
环(使用CT)
广播算法为:先发送包到
N/2
处,再由接收到的包的节点发送到N/4
处,以此类推- 0发送包到4
- 0和4发送包到2和6
- 0、2、4、6发送包到1、3、5、7
通信时间为
T C T = ∑ i = 1 l o g 2 N ( t s + m × t w + N 2 i × t h ) = t s l o g 2 N + m × t w l o g 2 N + t h × ( N − 1 ) T_{CT} = \sum_{i = 1}^{log_2N} (t_s + m\times t_w + \frac{N}{2^i}\times t_h) = t_slog_2N + m\times t_wlog_2N + t_h\times (N - 1) TCT=i=1∑log2N(ts+m×tw+2iN×th)=tslog2N+m×twlog2N+th×(N−1) -
2D网孔(使用CT)
广播算法为:先广播横向,再有横向处理器广播纵向
- 0发送包至8
- 0、8发送包至4、12
- 0、8、4、12发送包至2、6、10、14
- 0、8、4、12、2、6、10、14发送包至1、5、9、13、3、7、11、15
通信时间为
T C T 1 = ∑ i = 1 l o g 2 N ( t s + m × t w + N 2 i × t h ) (横向处理时间) T C T 2 = ∑ i = 1 l o g 2 N ( t s + m × t w + N 2 i × t h ) (纵向处理时间) T C T = T C T 1 + T C T 2 = t s l o g 2 N + m × t w l o g 2 N + 2 t h × ( N − 1 ) T_{CT1} = \sum_{i = 1}^{log_2\sqrt N} (t_s + m\times t_w + \frac{\sqrt N}{2^i}\times t_h) (横向处理时间)\\ T_{CT2} = \sum_{i = 1}^{log_2\sqrt N} (t_s + m\times t_w + \frac{\sqrt N}{2^i}\times t_h) (纵向处理时间)\\ T_{CT} = T_{CT1} + T_{CT2} = t_slog_2N + m\times t_wlog_2N + 2t_h\times (\sqrt N - 1) TCT1=i=1∑log2N(ts+m×tw+2iN×th)(横向处理时间)TCT2=i=1∑log2N(ts+m×tw+2iN×th)(纵向处理时间)TCT=TCT1+TCT2=tslog2N+m×twlog2N+2th×(N−1)
-
-
会议模式(Conference)
多对多通信
-
环(使用SF)
会议算法:每个处理器通向传递最新收到的消息,重复循环
N-1
次即可保证所有节点消息都一致通信时间为
T S F = ( t s + ( m t w + t h ) × 1 ) × ( N − 1 ) ≈ ( t s + m t w ) × ( N − 1 ) T_{SF} = (t_s + (mt_w + t_h) \times 1) \times (N-1) \approx (t_s + mt_w)\times (N-1) TSF=(ts+(mtw+th)×1)×(N−1)≈(ts+mtw)×(N−1) -
环绕网孔(使用SF)
会议算法:先给行开会(上图a),再给列开会(上图b),注意消息长度变化了哦!!!
通信时间为:
T S F r o w ≈ ( t s + m t w ) × ( N − 1 ) T S F c o l ≈ ( t s + ( m × N ) t w ) × ( N − 1 ) T S F ≈ 2 t s ( N − 1 ) + m t w ( N − 1 ) T_{SF \ row} \approx (t_s + mt_w)\times (\sqrt N-1) \\ T_{SF \ col} \approx (t_s + (m \times \sqrt N)t_w)\times (\sqrt N-1)\\ T_{SF} \approx 2t_s(\sqrt N -1) + mt_w (N-1) TSF row≈(ts+mtw)×(N−1)TSF col≈(ts+(m×N)tw)×(N−1)TSF≈2ts(N−1)+mtw(N−1) -
超立方
会议算法:相邻对成对交换数据,信息加倍
对于SF:
T S F = ∑ i = 1 l o g 2 N [ t s + ( 2 i − 1 × m × t w + t h ) × 1 ] ≈ t s l o g 2 N + m t w × ( N − 1 ) (忽略 t h ) T_{SF} = \sum_{i=1}^{log_2N}[t_s + (2^{i-1}\times m\times t_w + t_h)\times 1] \approx t_slog_2N + mt_w\times (N-1)(忽略t_h) TSF=i=1∑log2N[ts+(2i−1×m×tw+th)×1]≈tslog2N+mtw×(N−1)(忽略th)
对于CT:
T C T = ∑ i = 1 l o g 2 N [ t s + 2 i − 1 × m × t w + t h × 1 ] ≈ t s l o g 2 N + m t w × ( N − 1 ) (忽略 t h ) T_{CT} = \sum_{i=1}^{log_2N}[t_s + 2^{i-1}\times m\times t_w + t_h\times 1] \approx t_slog_2N + mt_w\times (N-1)(忽略t_h) TCT=i=1∑log2N[ts+2i−1×m×tw+th×1]≈tslog2N+mtw×(N−1)(忽略th)
需要说明的是,无论如何并行,会议模式下的通信下界为
T = m t w ( N − 1 ) T = mt_w(N-1) T=mtw(N−1)
因为每个节点都要收到其他节点发送的消息 -
1.8 虚拟通道与通信死锁
-
虚拟通道
-
SF死锁
包缓冲区满,循环等待
-
虫蚀死锁
消息片循环等待
-
死锁的避免
增设虚拟通道
-
死锁避免的运用
对于2D网孔,同时向东和向西传输消息可能会引起通道死锁
为了解决这个问题,我们可以在垂直方向上增加虚拟通道,如下图所示
如此一来就能够避免死锁
1.9 包冲突
-
增设缓冲区
-
阻塞流控制(虫蚀方式)
即第二个包被阻塞不再前进,但没有被丢弃
-
丢弃并重发
-
阻塞后绕道
被阻塞后被转发到其他的节点上去
1.10 寻径效率
- 关键参数
- 通信流量:用传输有关消息所使用的通道数表示
- 通信时延:用包的最长传输时间表示
1.11 Active Message
消息包到达后,目的节点不必停下去处理,而是自动调用目标函数。Active Message的定义如下:
2. SIMD与MISD处理机
2.1 SIMD与向量处理机
2.1.1 SIMD
单指令多数据,一般是向量处理,例如:
LV V1, R1
LV V2, R2
ADDV V3, V1, V2
-
指令1、2一次性Load了一个向量;
-
指令3用一条指令实现了向量加法;
2.1.2 向量处理类型
以计算表达式:
D = A × ( B − C ) 其中, D = ( d 1 , d 2 , . . . , d N ) A = ( a 1 , a 2 , . . . , a N ) B = ( b 1 , b 2 , . . . , b N ) C = ( c 1 , c 2 , . . . , c N ) D = A \times (B - C)\\ 其中,\\ D = (d_1, d_2, ... , d_N)\\ A = (a_1, a_2, ... , a_N)\\ B = (b_1, b_2, ... , b_N)\\ C = (c_1, c_2, ... , c_N) D=A×(B−C)其中,D=(d1,d2,...,dN)A=(a1,a2,...,aN)B=(b1,b2,...,bN)C=(c1,c2,...,cN)
为例。
-
横向处理
b i − c i → ∗ m i a i × ∗ m i → d i b_i-c_i \rightarrow *m_i\\ a_i \times *m_i\rightarrow d_i bi−ci→∗miai×∗mi→di
mi
发生RAW冲突,因此,这种方法不适合向量处理因为执行N次循环会发生
N
次数据冲突,并带来2N
次功能切换 -
纵向处理
b 1 − c 1 → m 1 b 2 − c 2 → m 2 . . . b n − c n → m n − − − − − − − a 1 × m 1 → d 1 a 2 × m 2 → d 2 . . . a n × m n → d n b_1 - c_1 \rightarrow m_1\\ b_2 - c_2 \rightarrow m_2\\ ...\\ b_n - c_n \rightarrow m_n\\ -------\\ a_1 \times m_1 \rightarrow d_1\\ a_2 \times m_2 \rightarrow d_2\\ ...\\ a_n \times m_n \rightarrow d_n\\ b1−c1→m1b2−c2→m2...bn−cn→mn−−−−−−−a1×m1→d1a2×m2→d2...an×mn→dn
执行N
次循环,仅会发生1
次数据冲突,仅带来1
次功能切换 -
纵横处理
结合横向处理与纵向处理方式,把向量分组,每组大小为
s
b 1 − c 1 → m 1 , . . . , b s − c s → m s a 1 × m 1 → d 1 , . . . , a s × m s → d s − − − − − − − − − − − − − − − − − − − − − − − b s + 1 − c s + 1 → m s + 1 , . . . , b 2 s − c 2 s → m 2 s a s + 1 × m s + 1 → d s + 1 , . . . , a 2 s × m 2 s → d 2 s − − − − − − − − − − − − − − − − − − − − − − − . . . b_1-c_1\rightarrow m_1,...,b_s-c_s\rightarrow m_s\\ a_1 \times m_1 \rightarrow d_1,...,a_s \times m_s \rightarrow d_s\\ -----------------------\\ b_{s+1}-c_{s+1}\rightarrow m_{s+1},...,b_{2s}-c_{2s}\rightarrow m_{2s}\\ a_{s+1} \times m_{s+1} \rightarrow d_{s+1},...,a_{2s} \times m_{2s} \rightarrow d_{2s}\\ -----------------------\\ ... b1−c1→m1,...,bs−cs→msa1×m1→d1,...,as×ms→ds−−−−−−−−−−−−−−−−−−−−−−−bs+1−cs+1→ms+1,...,b2s−c2s→m2sas+1×ms+1→ds+1,...,a2s×m2s→d2s−−−−−−−−−−−−−−−−−−−−−−−...
执行N
次循环,每组均发生1
次数据冲突,以及2
次功能切换
2.1.3 向量处理机
有两种类型,分别是存储器 - 存储器类型与寄存器 - 寄存器类型
-
存储器 - 存储器
其结构如下图所示
向量直接用存储器保存,因此可以支持非常长的向量,因此适合采用纵向处理方式
为了加速存储系统带宽,可采用多体并行交叉存储器以及缓冲技术
-
寄存器 - 寄存器
每个向量寄存器大小相同
-
提高向量处理及的常用技术
- 多功能部件并行
- 向量链接技术,不必等待上一条指令完全运行完毕
- 循环开采技术
- 编队技术
- 多处理系统
-
冲突类型
-
指令不相关
V1 = V2 + V3 V4 = V5 * V6
-
功能部件冲突
V1 = V2 + V3 V4 = V5 + V6
若只有一个加法器,则加法器发生冲突
-
源寄存器冲突
V1 = *V2 + V3 V4 = *V2 * V6
不能保证两个表达式中向量V2的长度保持一致,因此难以同时处理两个指令
-
结果寄存器冲突
V1 = V2 + V3 V1 = V4 * V6
-
-
链接(Chain)技术
只能发生于RAW情况,且无其他冲突,如下:
*V3 = v1 + V2 V4 = *V3 * V5
-
向量处理机性能评价
-
一条向量执行周期
T v p = [ T s + T e + ( N − 1 ) ] T_{vp} = [T_s + T_e + (N - 1)] Tvp=[Ts+Te+(N−1)]
忽略Ts
,并令Tstart = Te - 1
,则公式表示为:
T v p = T s t a r t + N T_{vp} = T_{start} + N Tvp=Tstart+N
称Tstart
为启动时间,Te
为通过时间(即一次完整运行的时间) -
一组向量执行周期
T a l l = ∑ i = 1 m T v p ( i ) T_{all} = \sum_{i=1}^m T_{vp}^{(i)} Tall=i=1∑mTvp(i)
其中,m
代表编队数,每个编队为可并行或可链接
T a l l = ∑ i = 1 m ( T s t a r t ( i ) + N ) = T s t a r t + m N T_{all} = \sum_{i=1}^m (T_{start}^{(i)} + N) = T_{start} + mN Tall=i=1∑m(Tstart(i)+N)=Tstart+mN -
分段开采一组向量指令执行周期
设向量寄存器最大长度为
MVL
,假设N/MVL = p
,余数为q
,并假设有m
个编队,另外,每次由计算剩余次数带来的额外时钟周期为Tloop
则,最后一次执行周期为
T l a s t = T s t a r t + T l o o p + m q T_{last} = T_{start} + T_{loop} + mq Tlast=Tstart+Tloop+mq
其他执行周期为
T s t e p = T s t a r t + T l o o p + m ∗ M V L T_{step} = T_{start} + T_{loop} + m * MVL Tstep=Tstart+Tloop+m∗MVL
则
T a l l = T l a s t + p ∗ T s t e p = ⌈ N M V L ⌉ ( T s t a r t + T l o o p ) + m N T_{all} = T_{last} + p * T_{step} = \lceil \frac{N}{MVL}\rceil (T_{start} + T_{loop}) + mN Tall=Tlast+p∗Tstep=⌈MVLN⌉(Tstart+Tloop)+mN
即在一组向量执行周期基础上对Tstart + Tloop乘上开采轮数,N/MVL并向上取整 -
最大性能和半性能向量长度
最大性能亦称为峰值性能,公式如下:
R ∞ = l i m n → ∞ 向量指令序列中浮点运算次数 × 时钟频率 向量指令序列执行所需要的时钟周期数 R_{\infty} = lim_{n\rightarrow \infty} \frac{向量指令序列中浮点运算次数 \times 时钟频率}{向量指令序列执行所需要的时钟周期数} R∞=limn→∞向量指令序列执行所需要的时钟周期数向量指令序列中浮点运算次数×时钟频率
理解为每秒最大浮点运算次数半性能长度即是达到R∞一半时所需向量长度
-
向量长度临界值
由于穿行标量计算的最小向量长度nv
-
2.2 脉动阵列(Systolic Arrays)
本质:多处理单元,精心设计的数据流动方案
2.2.1 几种脉动阵列类型
以卷积运算为例
设权重:
w = { w 1 , w 2 . . . w k } w = \{w_1,w_2...w_k \} w={w1,w2...wk}
则卷积结果可表示为:
y i = w 1 x i + w 2 x i + 1 + w 3 x i + 2 + . . . + w k x i + k y_i = w_1x_i + w_2x_{i+1} + w_3x_{i+2} + ... + w_kx_{i+k} yi=w1xi+w2xi+1+w3xi+2+...+wkxi+k
-
输入广播、结果动、权重不动
- 第一拍:y1 = x1 * w1
- 第二拍:y1 = x1 * w1 + x2 * w2;y2 = x2 * w1
- 第三拍:y1 = x1 * w1 + x2 * w2 + x3 * w3;y2 = x2 * w1 + x3 * w2;y3 = x3 * w1
- ……
-
输入广播、权重动、结果不动
- 第一拍:y1 = x1 * w1;
- 第二拍:y1 = x1 * w1 + x2 * w2;y2 = x2 * w1;
- 第三拍:y1 = x1 * w1 + x2 * w2 + x3 * w3;y2 = x2 * w1 + x3 * w2;y3 = x3 * w3
- ……
-
扇入结果、移动输入、权重不动
- 第一拍:y1 = x1 * w1 + x2 * w2 + x3 * w3;
- 第二拍: y2 = x2 * w1 + x3 * w2 + x4 * w3;
- ……
这种方法很容易理解,每一轮就会计算出一个结果,但是硬件开销大
-
结果不动、输入和权重向着相反方向移动(均间隔1拍)
- 第一拍:y1 = x1 * w1;
- 第二拍:y2 = x2 * w1;
- 第三拍:y1 = x1 * w1 + x2 * w2;y3 = x3 * w1;
- 第四拍:y1 = x3 * w2 + x2 * w1;
- ……
这种方法虽然相对前述方法慢一点,但是不需要广播了
-
结果不动、输入和权重向着相同的方向移动但是速度不同(权重更慢)
- 第一拍:y1 = x1 * w1;
- 第二拍:y1 = x1 * w1 + x2 * w2;
- 第三拍:y1 = x1 * w1 + x2 * w2 + x3 * w3;y2 = x2 * w1;
- ……
-
权重不动、输入和结果向着相反方向移动
- 第一拍:y1 = x1 * w1;
- 第二拍:y1 = x1 * w1 + x2 * w2;
- 第三拍:y1 = x1 * w1 + x2 * w2 + x3 * w3;y2 = x2 * w1;
- ……
-
权重不动、输入和结果向着相同的方向移动但是速度不同(结果停留更久)
- 第一拍:y1 = x3 * w3;
- 第二拍:y1 = x3 * w3 + x2 * w2; y2 = x4 * w3;
- 第三拍:y1 = x3 * w3 + x2 * w2 + x1 * w1;y2 = x4 * w3 + x3 * w2;y3 = x5 * w3;
- ……
这种方法同样优秀,相比结果不动,另外两个同方向动要优秀一点
2.2.2 脉动阵列优劣
事实上,脉动阵列属于MISD,即多指令单数据,事实上正是如此,脉动阵列每次脉动每个单元将处理一条指令,而同一个数据在脉动阵列中传送,因此,每个数据都被多条指令进行了处理
- 优点
- 每个数据被充分使用了起来,减少了Load时延
- 高并发性
- 缺点
- 仅适用于有规律可循的程序,例如:卷积算法
- 相对而言,脉动阵列是为了某个特定目标而设计,通用性不太好
2.2.3 TPU
TPU(Tensor Process Unit)就是基于脉动阵列设计的
其每瓦特性能凌驾于GPU之上,功耗也较低,主要利用脉动阵列来降低I/O开销
这篇关于体系结构复习-Part 3-互连网络 + 向量处理机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!