zoukankan      html  css  js  c++  java
  • 计算机存储体系:量化分析与并行存储

    任何一个单一的存储器都难以同时完成容量大,速度快,价格便宜的需求,所以这个时候较好的方法是采用存储层次,用多种存储器构成存储器的层次结构。

    为什么可以怎么做?有两个理由

    1. 局部性原理
    2. 加快经常性事件

    思路是将经常使用的局部性程序和数据放到更快,更小,但更贵的存储器中

    这就需要用采用量化分析来判断存储系统的好坏

    存储器性能的量化

    首先,如何定量衡量一个存储器的好坏?主要是容量和速度,以及价格C

    1. 容量(S)

    存储器容量(S_M=Wlm)

    (w):存储器字长

    (l):字数

    (m):并行工作存储体的个数

    1. 速度(访问时间)

    访问时间(T_A):从接到访存读申请,到信息被读到数据总线上所需的时间

    访存周期(T_M):连续启动一个存储体所需要的间隔时间,即两次存取操作所需要的最小时间间隔

    带宽(B_m):存储器可提供的数据传送速率,单位时间内能传送二进制字节数

    如果采用最简单的单体单字的存储器

    意味着字长与CPU字长相同,每一次只能访问一个存储字,即:(B_m = frac{W}{T_m})

    并行存储系统

    怎样可以提高带宽呢?

    如果在一个访存周期内可以并行访问多个存储字,能有效提高存储器的带宽。

    单体多字存储器

    image-20200422030053550

    如图。一次可以取四个字,所以易得有(B_m=W*4/T_m)

    逻辑实现:把地址码分成两个部分

    一部分仍作为存储器的地址,另一部分负责从m个数据中选择一个数据

    这个方法并不好,会有很多问题:

    • 如果一次读取的m个指令字中有分支跳转指令,而且成功了,意味着该指令后面的指令是无用的。

    • 这一次取到的m个数据不一定都是有用的,假设当前的指令需要多个操作数,也不一定正好全部一次取到。

    • 假设这个存储周期存在对同一个存储单元的写和读,写入之后那读的操作就发生错误了。

    多体单字存储器

    由多个单体存储器构成,每个都有自己的地址寄存器以及地址译码和读/写驱动等电路

    image-20200422031605625

    存储器的每个存储单元都要给定一个地址才能被访问到。并行存储器是由多个存储体组成,并行存取可以加快存取速度,但是这和编址方法有关。

    如何编址?存储器是按顺序编址的。所以要建立一维数组与二维矩阵之间的转化

    分为高位交叉和低位交叉,也叫做按列优先编址按行优先编址

    • 高位交叉编址

    高位交叉编址是对存储单元按体内地址顺序存放,每个存储体内的地址是连续

    这种编址方法如果每次都只访问一个存储体,对单处理机而言就没有并行的效果

    • 低位交叉编址

    这种编址方法是横向的,连续的地址分布在相邻的存储体中,这样对于一个存储体,地址不是连续的,对于单处理及可以并行存取。

    分时启动

    m个存储体分时启动,实际上是一种采用流水线方式工作的并行存储器。

    在每个存储周期内,分时启动m个存储体,如果每个存储体的访问周期是(T_M),则时间间隔是(t=frac{T_M}{m})

    那么是不是(m)越多越好,并不是。

    原因:
    1)模m越高,存贮器数据总线越长,导致传输延迟增加;
    2)系统效率问题,对于顺序取指,效率可以提高m倍,但遇到转移指令,效率就会下降。

    存储系统的量化分析

    上文总结了单一存储器的量化分析,现在来分析一下对于整个存储系统,如何量化判断?

    多级层次结构

    首先简单了解一下存储系统的多级层次结构

    image-20200504154215100

    容量:

    (S_1<S_2<S_3<S_n)

    速度:

    (M_1>M_2>M_3>M_4)

    这个存储系统要达到的目标,从CPU看,存储系统的速度接近于(M_1),而容量接近于(M_n)

    大部分的访问要尽量在(M_1)完成

    存储系统的性能参数

    为了简化分析,我们从两级存储系统进行考虑

    • 每位价格(C)

    (C=frac{C_1S_1+C_2S_2}{S_1+S_2})

    (S_1<<S_2),(C)约等于(C_2)

    • 命中率(H)与不命中率(F)

    命中率就CPU访问存储系统时,在(M_1)中找到所需信息的概率

    (N_1)代表在(M_1)找到信息的次数

    (H=frac{N_1}{N_1+N_2})

    (F=1-H)

    • 等效访问时间

    可以分两种情况考虑:

    • 命中(T_1):访问时间为(T_1),命中的概率为(H)
    • 不命中(T_M):从(M_2)发出访问请求到整个数据块装入(M_1)所需要的时间:(T_2+T_B)

    (T_B)是传送一个信息块的时间。

    还需要再加上(T_1)

    所以等效访问时间:

    [T_A = HT1+(1-H)(T_1+T_M)=T_1+(1-H)T_M ]

    [T_A = T_1+FT_M ]

    根据等效时间得出访问效率:

    [e=frac{T_1}{T_A}=frac{HT_1}{HT_1+(1-H)T_M}=frac{1}{H+(1-H)r} ]

    (r)是指相邻两级的访问时间比(frac{T1}{T_2}),不考虑传送时间的情况下。

    这个式子证明若要提高访问效率,要提高命中率(H),但是命中率(H)与程序和其他方面有关,比较难提高,通过系统结构解决的方法是降低访问时间比(r)

    通过下面的方法来实现:

    • 减小相邻两级的访问速度差距

    • 减小相邻两级存贮器的容量差

    这也证明了cache与主存访问速度不能差距太大

    来源

    [1] 计算机系统结构课本

    [2] 计算机系统结构 华中科技大学 中国大学MOOC

  • 相关阅读:
    MySQL表的完整性约束
    MySQL支持的数据类型
    MySQL表操作
    MySQL存储引擎概述
    onblur和onkeyup事件
    Web控件LinkButton
    jQuery防止中文乱码
    jQuery 动态添加、删除css样式
    VS2012生成Web时报未能找到元数据文件xxx.dll
    单击EasyUI的datagrid行时不选中
  • 原文地址:https://www.cnblogs.com/smallocean/p/12828056.html
Copyright © 2011-2022 走看看