体系结构复习-Part 3-互连网络 + 向量处理机

体系结构复习-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(Xn1Xn2...Xk...X0)=Xn1Xn2...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(Xn1Xn2...Xk...X0)=Xn1Xn2...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 NPM2i(j)=j2imod N其中,0jN1,0in1,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} TSFts+m×2N

    • 直通传输(CT):

    T C T ≤ t s + m × N 2 T_{CT} \le t_s + m \times \frac{N}{2} TCTts+m×2N

    可见,当信息包足够大,大到我们能够忽略th时,直通传输与存储转发的时延几乎一致

  • 多播模式(Multicast)

  • 广播模式(Broadcast)

    • 环(使用CT

      在这里插入图片描述

      广播算法为:先发送包到N/2处,再由接收到的包的节点发送到N/4处,以此类推

      1. 0发送包到4
      2. 0和4发送包到2和6
      3. 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=1log2N(ts+m×tw+2iN×th)=tslog2N+m×twlog2N+th×(N1)

    • 2D网孔(使用CT
      在这里插入图片描述

      广播算法为:先广播横向,再有横向处理器广播纵向

      1. 0发送包至8
      2. 0、8发送包至4、12
      3. 0、8、4、12发送包至2、6、10、14
      4. 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=1log2N (ts+m×tw+2iN ×th)(横向处理时间)TCT2=i=1log2N (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)×(N1)(ts+mtw)×(N1)

    • 环绕网孔(使用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)TSF2ts(N 1)+mtw(N1)

    • 超立方

      在这里插入图片描述

      会议算法:相邻对成对交换数据,信息加倍

      对于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=1log2N[ts+(2i1×m×tw+th)×1]tslog2N+mtw×(N1)(忽略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=1log2N[ts+2i1×m×tw+th×1]tslog2N+mtw×(N1)(忽略th

    需要说明的是,无论如何并行,会议模式下的通信下界为
    T = m t w ( N − 1 ) T = mt_w(N-1) T=mtw(N1)
    因为每个节点都要收到其他节点发送的消息

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. 指令1、2一次性Load了一个向量;

  2. 指令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×(BC)其中,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 bicimiai×midi
    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\\ b1c1m1b2c2m2...bncnmna1×m1d1a2×m2d2...an×mndn
    执行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}\\ -----------------------\\ ... b1c1m1,...,bscsmsa1×m1d1,...,as×msdsbs+1cs+1ms+1,...,b2sc2sm2sas+1×ms+1ds+1,...,a2s×m2sd2s...
    执行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+(N1)]
      忽略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=1mTvp(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=1m(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+mMVL

      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+pTstep=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开销

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值