并行存储器知识总结

并行存储器知识总结

CPU与存储之间的速度常常是不匹配的,数据存取常常成为计算瓶颈。解决这个问题一方面可以通过提高速度来解决,另一个方面可以通过优化存储结构来解决。

存储优化途径

存储优化有三个途径:

途径1: 并行存储器
双端口存储器
多存储器并行存储
途径 2: 设置各种缓冲器
通用寄存器
途径 3: 采用分层的存储系统
cache
虚拟存储系统

对于第一种并行存储器,根据并行维度的不同,可以分为两种:

空间并行
双端口存储器
时间并行
多存储模块并行存储

这里讨论的是最后一种,多存储模块并行存储。这种存储器由多个模块组成,每个模块称为一个存储体。存储器的地址码包括存储体的体内地址和存储体号两部分。这种存储器又叫做LVM(local vector memory)

并行存储器

并行存储器有两种增加访问数据量的方法由两种:
增加存储器字长:并行访问存储器
增加存储体个数:交叉访问存储器,无冲突访问存储器

并行访问存储器

把地址码分成两个部分,其中一部分仍作为存储器的地址去访问存储器(因为存储器的字数减少了,因此访问存储器的地址码可以缩短),而另一部分则去控制一个多路选择器,从同时读出的n个数据中选择一个数据输出。
并行访问存储器的主要优点是实现非常简单、容易。主要缺点是访问的冲突比较大。
并行访问存储器的冲突主要来自如下几个方面:
  (1)取指令冲突。在遇到转移指令,而且转移成功时,同一个存储周期中读出的n条指令,在转移指令后面的指令将无用。
  (2)读操作数冲突。一次同时读出的n个操作数,不一定都有用。换一种说法,需要的多个操作数不一定正好都存放在同一个存储字中。
  (3)写数据冲突。这种并行访问的存储器,必须凑齐了n个数之后才能一起写入存储器。如果只写一个字,必须先把属于同一个存储字的n个数据都读到数据寄存器中,然后在地址码的控制下修改其中的一个字,最后再把整个存储字写回存储器中。
  (4)读写冲突。当要读出的一个字和要写入存储器的一个字处在同一个存储字内时,无法在一个存储周期内完成。
  在这4种冲突中,第1种冲突的概率比较小,因为,程序在大多数情况下是顺序执行的。第2种冲突的概率比较大,因为操作数的随机性比程序要大。第3和第4种冲突,解决起来有一定困难,需要专门的控制电路。
  分析发生这些冲突的原因,从存储器本身来看,主要是因为地址寄存器和控制逻辑只有一套。如果有n个独立的地址寄存器和n套独立的读写控制逻辑,那么,上述第3和第4种两种冲突也就自然解决了,第1和第2种冲突也有所缓解(减少位宽,增加存储体个数)。
并行访问存储器

交叉访问存储器

交叉访问存储器根据交叉位的不同,可以分为低位交叉高位交叉

高位交叉

访问地址按顺序分配给各个模块,某个模块工作的时候其他模块不工作。
编码格式:
假设有n个存储体,每个存储体容量为m个存储单元,则编码格式为

logn2 l o g 2 n logm2 l o g 2 m

高位选模块,低位选块内地址
高位交叉

低位交叉

交叉访问并行存储器连续地址分布在相邻的不同模块中,可以实现多模块并行存取,提高存储器带宽
编码格式:
假设有n个存储体,每个存储体容量为m个存储单元,则编码格式为

logm2 l o g 2 m logn2 l o g 2 n

低位选模块,高位选块内地址
定义:
j:每个存储体的体内地址,j=0,1,2,…,m-1。
k:存储体的体号,k=0,1,2,…,n-1。
则这个存储器的地址A的计算公式为:A=n×j+k;
如果已知这个存储器的地址为A,可以计算出对应存储体的体号和它的体内地址:
存储器的体内地址Aj的计算公式: AjA/n A j = ⌊ A / n ⌋
存储器的体号Ak的计算公式。 AkAmod(n) A k = A m o d ( n )

低位交叉

交叉访问存储器

分时启动

在一个存储器周期Tm内,n个存储体必须分时启动,启动的时间关系如图4.15所示。
  如果每个存储体的访问周期为Tm,则由n个存储体构成的主存储器,各存储体的启动间隔t为:t= 。
  从图4.15看到,采用交叉方式工作的存储器,实际上是一种采用流水线方式工作的并行存储器系统。在连续工作的情况下,在仍然保持每个存储体的访问速度不变的情况下,而整个存储器的访问速度可望提高n倍。
  在图4.15中,每个存储体的访问周期为Tm,而整个存储器的访问周期缩短到t。
图 4.15 交叉访问存储器的分时启动
交叉访问存储器分时启动
目前的计算机系统一般都存在主存储器速度远远低于CPU速度的问题,在多处理机系统中这个问题尤为突出。除了采用多级高速Cache之外,采用交叉访问存储器也是一种很好的方法。
  采用交叉访问方式能够大幅度提高主存储器的速度,目前已经在共享主存储器的多处理机系统中得到广泛应用。许多高速的单处理机也采用了交叉访问方式的存储器作为主存储器。
  直观地看,增加存储体个数,能够提高主存储器的速度,但是,主存储器的速度不是随存储体个数的增加而线性提高的。例如,在有的大型计算机中采用32个存储体低位交叉来构成主存储器,但是主存储器的速度只比单个存储体高10倍左右,其根本原因是存在有访问冲突。

并行无冲突访问存储器

采用交叉访问方式,一个由n个存储体构成的主存储器,它的速度实际上并不能提高n倍,其根本原因是存在有访问冲突。产生访问冲突的根源主要有两个,一是程序中有转移指令,二是数据的随机性。从上面的分析结果看,后一个问题更为严重。
  下面,介绍一维和二维数组的无冲突访问存储器。

一维数组的无冲突访问存储器

一维数组的存储方案
一维数组存储方案

如果按连续地址访问,没有冲突。
如果按位移量为2的变址方式访问,频带宽度降低一半,即可能有一半地址是冲突的。造成冲突的原因是传统的交叉访问存储器的存储体个数n为2的整数幂,因此变址位移量正好是n的约数。解决这一问题的方法是把存储体的个数n选为质数,且n≥向量长度,变址位移量就必然与n互质,一维数组的访问冲突自然也就不存在了
例如:Burroughs公司巨型机BSP,存储体个数为17
我国研制的银河巨型计算机,存储体的个数为37

二维数组的无冲突访问存储器之一

要求:一个n×n的二维数组,按行、列、对角线和反对角线访问,并且在不同的变址位移量情况下,都能实现无冲突访问。
顺序存储:按行、对角线访问没有冲突,但按列访问每次冲突
顺序存储

错位存储:按行、按列访问无冲突,按对角线访问有冲突
错位存储

P·Budnik和D·J·Kuck提出了一种能够实现n×n的二维数组无冲突访问的存储方案。
规则:
(1)并行存储分体数m大于每次要访问的元素个数n,并为质数;
(2)行、列方向上采用不同的错开距离。
符号:
δ1:列上的错开距离。
δ2:行上的错开距离。
m22p1 m = 2 2 p + 1 (p为任意自然数)。
无冲突访问的充分条件为δ1=2p,δ2=1。
nxn二维数组中的任意一个元素 aij a i j 存放地址为:
体号地址:y=(iδ1+jδ2+c)mod m
体内地址:x=i
其中,0≤j≤m-1,0≤i≤n-1,c为元素a00起始体号地址,m为并行存储体个数。

例子:4×4二维数组按行、列、对角线和反对角线访问都不冲突的存储方案为:
例子

主要缺点:
浪费存储单元
在n×n二维数组的存储方案中,有(m-n)/m个存储单元浪费,
主要优点:
实现简单
列元素按地址顺序存储,行元素按地址取模顺序存储。

二维数组的无冲突访问存储器之二

如果不要求同一行中的数组元素按地址顺序存储,则n×n的二维数组实际上只需要用n个并行存储体就能实现按行、列、对角线和反对角线的无冲突访问。这时,并行存储器的利用率最高,没有浪费的存储单元。

规则:
对于任意一个n×n的二维数组,如果能够找到满足 n22P n = 2 2 P 关系的任意自然数p,则这个二维数组就能够使用n个并行存储体实现按行、列、对角线和反对角线的无冲突访问。
4×4数组用4个存储体的无访问冲突存储方案
例子
实现方法:
假设aij是4×4二维数组中的任意一个元素,其中的下标i和j都可以用两位二进制数表示,假设i和j的高位和低位分别为iH、iL、jH和jL,则aij在无冲突并行存储器中的体号地址和体内地址可以通过如下公式计算:
体号地址: 2iLjHiHiLjL 2 ( i L ⊕ j H ) + ( i H ⊕ i L ⊕ j L )
体内地址:j
其中,0≤i≤3,0≤j≤3,iH、iL、jH、jL均为0或1。
当数组的维数n大于4时,可以把数组划分成多个4×4的子阵。例如,可以把一个16×16二维数组划分成4个4×4子阵。实际上,在图4.20中的每个2×2子阵也都能实现按行、列、对角线和反对角线的无冲突访问。
主要优点:没有浪费的存储单元,
主要缺点:在执行并行读和写操作时需要借助比较复杂的对准网络。

参考文献

https://wenku.baidu.com/view/8179063783c4bb4cf7ecd1d9.html
http://staff.ustc.edu.cn/~hdrq/jsjzcyl/text/chapter4/sec5/part1/index1.htm
http://kjwy.5any.com/jsjxtjg/content/06/060108.htm

  • 12
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值