1.提高访存速度的措施

1.采用高速器件

2.采用层次结构:Cache -主存

3.调整主存结构

1)单体多字系统  增加存储器单次访问位宽

单体多字系统的特点是存储器中只有一个存储体,每个存储单元存储m个字总线宽度也为m个字。一次并行读出m个字,地址必须顺序排列并处于同一存储单元。

​ 单体多字系统在一个存取周期内,从同一地址取出m条指令,然后将指令逐条送至CPU执行,即每隔1/m存取周期,CPU向主存取一条指令。这显然提高了单体存储器的工作速度。

​ 缺点:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或操作数不能连续存放,这种方法的效果就不明显。

2) 多体并行系统

高位交叉  实际上是顺序存储

各存储体顺序编址

 

高位地址表示体号,低位地址为体内地址。如图所示,存储器共有4个模块M0~M3,每个模块有n个单元,各模块的地址范围如图中所示。

特点:

  • 高位交叉方式下,总是把低位的体内地址送到由高位体号确定的模块内进行译码。
  • 顺序串行存取。访问一个连续主存块时,总是先在一个模块内访问,等到该模块访问完才转到下一个模块访问,CPU总是按顺序访问存储模块,各模块不能被并行访问,因而不能提高存储器的吞吐率。

 

低位交叉 各存储体交叉编址

 

在不改变存取周期的前提下,增加存储器带宽 

 

​ 低位地址为体号,高位地址为体内地址

​ 每个模块按“模m”交叉编址,模块号=单元地址%m,假定有m个模块,每个模块有k个单元,则0,m,…,(k-1)m单元位于M0;第1,m+1,…,(k-1)m+1单元位于M1;以此类推。

特点:

  • 低位交叉方式下,总是把高位的体内地址送到由低位体号确定的模块内进行译码。
  • 程序连续存放在相邻模块中,因此称采用此编址方式的存储器为交叉存储器
  • 采用低位交叉编址后,可在不改变每个模块存取周期的前提下,采用流水线的方式并行存取,提高存储器的带宽。

​ 设模块字长等于数据总线宽度,模块存取一个字的存取周期为T,总线传送周期为r,为实现流水线方式存取,存储器交叉模块数应大于等于m=T/r
                                     
​ 式中,m称为交叉存取度。每经过时间延迟后启动下一个模块,交叉存储器要求其模块数必须大于等于m,以保证启动某模块后经过m×r的时间后再次启动该模块时,其上次的存取操作已经完成(即流水线不间断)。这样,连续存取m个字所需的时间为t_{1}=T+(m-1)*r
                                  
而顺序方式连续读取m个字所需的时间为t_{2}=m*r。可见低位交叉存储器的带宽大大提高。

 

2. 双端口RAM

双端口顾名思义就是存储器芯片提供两个端口给两个CPU进行访问。

 

两个端口对同一主存操作有以下4种情况:

  • 1.两个端口不同时对同一地址单元存取数据。成功。
  • 2.两个端口同时对同一地址单元读出数据。成功
  • 3.两个端口同时对同一地址单元写入数据。写入错误
  • 4.两个端口同时对局一地址单完,二个写入数据,另一不读出数据。读出错误

解决办法:

​ 置“忙”信号为0,由判断逻辑决定暂时关闭一个端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问

3.习题常用

1.四体交叉存储器地址冲突

当给定的访存地址在相邻的四次访问中出现在同一个bank内,就会发生防存冲突。

例:某计算机使用4 体交叉编址存储器,假定在存储器总线上出现的主存地址(十进制)序列为8005,8006,8007,8008,8001,8002,8003,8004,8000,则可能发生访存冲突的 地址对是 (D)。

  • 8004 和 8008
  • 8002 和 8007
  • 8001 和 8008
  • 8000 和 8004

四个模4同余的bank中,只有8000和8004在同一bank内且在一次连续的四次访问内。

2. 流水线示意图

若机器采用四体低位交叉存储器,现分别执行下述操作:第一(读取6个连续地址单元中存放的存储字,重复80次);第二(读取8个连续地址单元中存放的存储字,重复60次)则第一种、第二种所花费的时间之比为(C)

  A.1:1                              B. 2:1                               C.4:3                               D.3:4

 绘制时间图如下 

1:由于采用的是四体低位交叉存储器,所以在第一轮读取连续6个地址单元的时候,花费6×T4𝑇4时间,但开始第二轮的时候,由于M1模块还在占用中,需要再经历T2𝑇2时间,才能进行下一轮新的读取(再次进入下一轮的时候不需要第6个字读取结束,第5个读取结束,M1就空出来了,即可马上进入下一轮),中间的每一轮都不需要等待,最后一轮后读取完第二个M2后,还有半个T2𝑇2时间,所以答案是(80-1)×2T(前79轮按周期来算)+最后一轮的2T+最后一轮M2剩余的T2等于(80-1)×2T+2.25T=160.25T

2:每轮读取8个存储字刚好经过2T时间,每轮结束后,最近访问的M1刚好经过了时间T,此时可以立即开始下一轮的读取。前59次可以按照周期2T来算,最后一次为周期2T加上红色的三块时间(M4剩余的存储周期),所以答案是(69-1)×2T+(2T+0.75T)=120.75T

 

 

3. 低位交叉编址问题

某计算机主存按字节编址,由 4 个 64M×8 位的 DRAM 芯片采用交叉编址方式构成,并与宽度为 32 位的存 储器总线相连,主存每次最多读写 32 位数据。若 double 型变量 x 的主存地址为 804 001AH,则读取 x 需要的存储周期数是

A.1
B.2
C.3 (正确答案)
D.4

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐