精华内容
下载资源
问答
  • 访问cache效率、平均访问时间的计算公式

    万次阅读 多人点赞 2019-03-10 08:46:27
    题目条件:假设CPU执行某段程序时,共访问Cache命中2000次,访问主存50次。...cache 主存系统的平均访问时间 ta = h *tc + (1-h) *tm 访问效率 其中tc指命中时间的cache访问时间, tm为未命中时的主存访...

    题目条件:假设CPU执行某段程序时,共访问Cache命中2000次,访问主存50次。已知:Cache的存取周期为50ns,主存的存取周期为200ns。求Cache-主存系统的命中率。

    Nc = 2000, Nm= 50  

    h = \frac{Nc}{Nc+Nm}

    h = \frac{2000}{2000+50} = 0.97

    cache 主存系统的平均访问时间

    ta = h *tc + (1-h) *tm

    访问效率 e = \frac{tc}{ta} * 100 = \frac{tc}{h*tc + (1-h)*tm} * 100

    其中tc指命中时间的cache访问时间, tm为未命中时的主存访问时间,1-h为未命中率

     

    分析:由于题设条件中并没有提到平均访问时间,而且平均访问时间需要自己求取。所以只能通过题目的其他条件来进行运算。题目中提到,主存的存取周期为200ns,cache的存取周期为50ns。从这个条件可以看出访问主存的时间是访问cache时间的4倍(主存存取周期200ns/cache存取周期50ns=4)。设访问cache的时间为t,则平均访问时间可以用h*t+(1-h)*4t来表示。将数据代入公式很容易就知道t作为一个不确定的变量,是能够直接约掉的。

     

    e = \tfrac{t}{0.97*t + (1-0.97)* 4t} * 100 = 91.7

    ta = h*tc + (1-h)*tm = 0.97*50ns +(1 - 0.97) * 200ns = 54.5ns

     

    展开全文
  • 存储器的性能直接影响到CPU的性能评价,定义存储器停顿周期数为CPU等待存储器访问而停顿的时钟周期数,由此有CPU执行时间有: 因此需要存储器停顿时钟周期数越小越好,对于这一变量有公式如下: 其中,缺失率表示...

    首发于个人博客

    存储器性能评价指标

    存储器停顿周期数

    存储器的性能直接影响到CPU的性能评价,定义存储器停顿周期数为CPU等待存储器访问而停顿的时钟周期数,由此有CPU执行时间有:
    CPU执行时间=(CPU时钟周期数+存储器停顿时钟周期数) \times 时钟周期时间
    因此需要存储器停顿时钟周期数越小越好,对于这一变量有公式如下:
    存储器停顿周期数 = 缺失数量 \times 缺失代价 = 指令数 \times \frac{产生缺失指令数量}{指令数} \times 缺失代价 \\ = 指令数 \times \frac{存储器访问指令数}{指令总数} \times 缺失率 \times 缺失代价
    其中,缺失率表示存储器访问指令中会产生cache缺失的百分比;缺失代价表示发生cache缺失后为了解决缺失需要消耗的平均时钟周期数。另一种度量指标与时钟周期无关,即为每条指令的平均缺失数:
    平均缺失数=\frac{产生访存缺失的指令数}{指令总数} = 缺失率 \times \frac{存储器访问指令数}{指令总数}
    上述公式与缺失代价无关,缺失率的定义与上文相同

    存储器平均访问时间

    缓存性能比较好的度量为存储器平均访问时间,即对于每次存储器访问而言需要的平均时间,公式如下:
    存储器平均访问时间 = 命中时间 + 缺失时间 \times 缺失代价
    需要注意的是这一指标仅针对存储器访问指令,因此这是一个间接度量,考虑以下情况:

    参数数据
    16KB指令缓存缺失数(每千条指令)3.82
    16KB数据缓存缺失数(每千条指令)40.9
    32KB统一缓存缺失数(每千条指令)43.3
    统一缓存数据访问额外需要时钟周期数1
    存储器访问中指令引用占比74%
    命中周期数/缺失代价1/100
    指令中数据传输指令占比36%

    需要注意的是,缺失数指的是对于所有指令而言产生存储器缺失的次数,而缺失率为相对于所有存储器访问产生缺失的比例。对于16KB的指令缓存,每条指令都会产生一次指令访问,缺失率为:
    缺失率_{指令} = \frac{3.82}{1000 \times 1} = 0.004
    对于16KB的数据缓存,有36%的指令会产生一次存储器访问,因此有:
    缺失率_{数据} = \frac{40.9 }{0.36 \times 1000} = 0.114
    有74%的存储器访问为指令访问,因此总体的缺失率为:
    缺失率_{分裂} = 0.74 \times 0.004 + 0.26 \times 0.114 = 0.0326
    考虑存储器平均访问时间,有:
    存储器平均访问时间_{分裂} = 0.74 \times (1+0.004 \times 200) + 0.26 \times (1 + 0.114\times 200) = 7.52
    对于32KB统一缓存而言,1000条指令一共产生1000次指令访存,其中36%的指令会产生数据访存,如下所示:
    缺失率_{统一} = \frac{43.3}{1000 + 1000 \times 0.36} = 0.0318
    对于统一缓存而言,数据访存指令会产生两种存储器访问,一次指令访问和一次数据访问,而统一缓存仅有端口,因此数据访问需要等待一个时钟周期,因此存储器平均访问时间:
    存储器平均访问时间_{统一} = 0.74 \times (1+0.0318 \times 200) + 0.26 \times (1 + 1 + 0.0318 \times 200) = 7.62

    对CPU性能影响

    对于CPU性能而言,有以下公式:
    CPU执行时间=(CPU时钟周期数+存储器停顿时钟周期数) \times 时钟周期时间
    一般认为缓存命中时间作为CPU执行时钟周期数的一个部分,考虑一个以下参数的缓存:

    参数数值
    CPU执行周期数1
    缺失代价200
    平均缺失率2%
    每条指令的存储器引用数1.5
    平均缓存缺失数(千条指令)30

    对于以上参数,每千条指令产生的存储访问数为1000 \times 1.5 = 150,存储器访问的缺失率为2%,即千条指令产生的存储器缺失数量为150 \times 2\%=30,与给出的平均缓存缺失数一致。使用缺失数计算CPU执行时间:
    CPU执行时间 = IC \times (1 + \frac{存储器停顿周期数}{IC}) \times 时钟周期 \\= IC \times (1 + \frac{停顿数}{IC} \times 缺失代价) \times 时钟周期 = IC \times (1+\frac{30}{1000} \times 200) \times 时钟周期 \\ = 7 \times IC \times 时钟周期
    上述分析均对于顺序存储器而言,其每次存储器缺失都会暴露为缺失代价。对于乱序处理器而言,其存储器缺失可能被乱序执行的其他指令掩盖,即有:
    存储器停顿周期 = 缺失数 \times (总缺失代价 - 重叠缺失延迟)
    对于乱序执行的CPU而言,分析比较复杂,若一个时钟周期该CPU没有提交最大可能数目的指令,则认为该CPU发生的了存储器访问缺失。

    存储器层次结构

    存储器之间的关于存储器层次结构,需要解决以下四个问题:

    • 块的放置:一个块可以放在这一级的什么位置
    • 块的识别:如何找到放置在这一级中的一个块
    • 块的替换:在缺失时应当替换哪个块
    • 块的写入:写入时发生什么

    块的放置

    首先定义的概念,一个组是存储器中的一段连续空间,可以容纳多个(整数个)块。取一个存储器中组的数量为m,每个组可以容纳的块的数量为n,有以下关系:
    存储器容量 = m \times n \times 块大小
    任何来自某个地址的块只能被放置在一个特定的组中,这种方法被称为组相联,一个组中可以容纳n个块,即为n-路组相联。块首先被映射到组,组编号为:
    组编号 = 块地址 \% m
    随后,这个块可以被放置在这个组中的任意块地址位置。即对于一个块地址为A的块而言,对应的组编号为G = A\%m,其可以被放置在这个编号为G的组中的任意有效的块起始地址位置。如下图所示:

    7241055-17de56655196a5f6.png
    ch2_cache_group.png

    对于组相联,有两种特殊情况:

    • 直接映射:每个块只能存储在一个固定的位置,有存储地址=块地址 \% m,可认为时n=1的1-组相联
    • 全相联:一个块可以放置在任意位置,可认为时m=1的n-路组相联(缓存中仅有一个组)

    块的识别

    块的识别通过标签识别实现,每个存储器中的块对应一个标签,标签中包括一部分地址信息和有效性信号。对于一个块中的一个数据而言,其地址分为以下几个部分:

    • 标志部分:地址的高位部分,判断块时需要比对的部分
    • 索引部分:地址的中间部分,标记这个块若存在于存储器中,应当存在于哪个组中,这个部分不用于判断
    • 块偏移:地址的低位部分,标记这个数据相对于块起始地址的偏移量

    识别块时,首先根据索引部分查找到对应的组,再对比组内所有块的标志部分和要查找的块的标签部分是否相同,同时判断有效性。若标志部分相同且有效,则这个块为待识别的块,否则无识别的块,过程如下所示:

    7241055-e151333d2bbb11d8.png
    ch2_cache_hit.png

    首先提供查找地址,根据其中的索引查找到可能保存这个块的组,随后比对组内的所有标志和有效位,当有有效位置高且标志匹配的块,则命中,查找到该块。对于要查找的数据,根据偏移量从块中获取数据。

    块的替换

    当块发生缺失且对应的组中没有空闲的位置时,需要从已有的块中选择一个丢弃,块的替换算法决定丢弃哪个块,替换算法有以下几种:

    • 随机:随机选择一个块丢弃
    • 最近最少使用(LRU):丢弃掉未使用时间最久的块
    • 先入先出(FIFO):丢弃掉进入存储器最久的块

    最近最少使用算法的记录比较困难,常见的替换方法为伪LRU算法,为每一个块设置一个bit。每次对一个块的访问会使这个bit置位为1,当一次访问后所有的bit均为高时,所有bit拉低,仅当前访问的块对应的bit拉高。当需要替换块时,随机从该bit为低的块中选择一个替换

    块的写入

    块的写入和读取最大的差别在于读取操作可以“任意进行”,因为对任何空间的读取不会对该该空间中的数据产生影响,而写入操作必须“精准执行”,因为写入操作对存储空间中的数据产生影响。对于这一级存储器中任何一个块的写入会产生一致性问题,即当前级的数据与上一级的数据不同,为了解决这一问题,有两种解决方法:

    • 直写:写入这一级存储的同时写入上一级存储
    • 写回:仅写入这一级存储,当被写入的块被替换时写回上一级存储器

    直写策略容易实现,能保证数据的一致性,这上一级存储器中的数据永远时清洁的(即一致的),缺点是时间消耗大。而写回策略延迟低,但是实现复杂。当写回上一级存储器时,往往先将块放入写入缓冲器以减小延迟。另外,当需要对一个地址进行写入时,可能这个地址对应的块不在这一级存储器中,有两种策略:

    • 写入分派:首先执行命中操作,将块调入缓存,再进行写入
    • 无写入分派:不将对应块调入,直接写入上一级存储器,直写策略下常常使用

    举例:Opteron缓存

    AMD的Opteron处理器缓存组织方式如下图所示

    7241055-60c277cf750a0df1.png
    opteron_cache.png

    进入缓存的地址位宽为40bit,该缓存的容量为64KB,块大小为64B,使用两路组相联缓存。即由上可知,组内偏移量为6bit,缓存内共\frac{64KB}{64}=1024个块,使用两路组相联即有\frac{1024}{2} = 512个组,由此组索引位宽为9bit,地址位宽40bit,因此标志位宽为48-9-6=25bit。

    该缓存使用最少替代(LRU)策略和写回/写入分派策略,对于一次缓存访问过程,过程如下:

    1. CPU给出40bit物理地址,分为标记、索引和偏移量三个部分(对应图中标号1)
    2. 根据索引部分找到可能存放这个块的组,读取组中两个块中的标记部分(对应图中标号2)
    3. 将两个标记与地址的标志部分比较,同时检查有效位是否为拉高:若有一个标记有效且与地址的标记相同,则缓存命中,使用二选一选择器将对应的数据数据输出;否则缓存未命中,需要进行访问低级存储器获取这个块(对应图中标志3)
    4. 若缓存未命中,则根据最少替代策略选择一个块,并将这个块送入牺牲块缓冲区,再由牺牲块缓冲区写回低级存储器,同时从低级存储器调入需要访问的块(对应图中标志4)

    由于这一缓存使用LRU和写回策略,因此对于每一个块,除了有效位以外,还需要设置LRU位和脏位设置标记,脏位用于表示该块是否与低级存储器中的块相同。当每次访问(无论读写)这个块时,都需要根据LRU算法对LRU位进行设置;当写一个块时,就将脏位拉高,因为只要块被写入,就认为其与低级缓存不同。

    缓存性能优化

    缺失模型

    对于缓存优化,首先根据缺失类型将其分为3类:

    • 强制缺失:第一次访问一个块时,这个块一定不在内存中,产生缺失成为强制缺失
    • 容量缺失:缓存无法容纳所有的块,当缓存容量满后,再载入块时必然放弃原有的块,再次访问由于容量不足被放弃的块产生的缺失为容量缺失
    • 冲突缺失:对于组相联结构,每个组中的块有限,当一个组满且另一个属于这个组的块被调入时,组中的某个块必然被放弃,再次访问由于块内冲突被放弃的块产生的缺失为冲突缺失

    优化原理

    优化目标为缩短存储器平均访问时间,有公式:
    存储器平均访问时间 = 命中时间+缺失率\times 缺失代价
    因此缩短存储器平均访问时间,有以下几种优化方法:

    • 缩短命中时间:索引时避免地址转换、提前读取
    • 降低缺失率:使用较大的块、较大的缓存和较高的关联度
    • 降低缺失代价:多级缓存、使读取操作设定高于写入操作

    基础优化方法

    下图是优化方法及其影响的汇总表

    名称命中时间缺失代价缺失率硬件复杂度备注
    增大块大小无影响增大降低无影响需要合理设计大小
    较大缓存大小延长无影响降低增加广泛应用
    提高组相联度延长无影响降低增加广泛应用
    多级缓存无影响降低无影响大幅度增加广泛应用
    提高读取缺失优先级无影响降低无影响增加广泛应用
    使用虚拟地址降低无影响无影响增加广泛应用

    增加块大小

    由于空间局域性原理(一个被用到的数据附近的数据可能被用到),增大块大小可以减少强制缺失,由此降低缺失率。但是较大的块会增加缺失代价,即一个块的尺寸变大,产生访问缺失时,需要花费更多的时钟周期从低级存储器中获取这个较大的块。因此选取块的大小需要综合考虑这两个因素。对于一个16K存储器,缺失率、缺失代价与块大小有以下表所示的关系:

    块大小缺失率缺失代价
    321.35%80+32 \times \frac{2}{16} = 84
    641.06%80 + 64 \times \frac{2}{16} = 88
    1281.02%80 + 128 \times \frac{2}{16} = 96

    缺失代价为无论块大小,都首先消耗80个时钟周期,随后每2个时钟周期载入16个数据。由存储器平均访问时间的公式,假设命中时间为1个时钟周期,有:
    存储器平均访问时间_{32} = 1 + 0.0135 \times 84 = 2.134 \\ 存储器平均访问时间_{64} = 1 + 0.0106 \times 88 = 1.933 \\ 存储器平均访问时间_{128} = 1+0.0102 \times 96 = 1.979
    由上,尺寸为64的块最适合该系统。选取块的大小需要考虑低级存储器的带宽,这一参数决定缺失代价相对于块大小的上升速度。对于高带宽的系统而言,可以选择较大的块,因为此时缺失代价的上升速度低于缺失率的下降速度。

    增大缓存大小

    增大缓存大小可以减小容量缺失进而降低缺失率,但对应的可能增加命中时间和硬件复杂度

    提高组相联度

    提高组相联度可以降低冲突缺失进而降低缺失率,对于组相联度有以下两条经验公式:

    • 对于降低冲突缺失率而言,八路组相联的效果基本等同于全相联
    • 2:1经验规律:大小为N的直接映射缓存与大小为N/2的2路组相联缓存大致具有相同的缺失率

    对应的,提高组相联度会使硬件的命中部分变得复杂,提高了命中时间。

    使用多级缓存

    多级缓存降低了缺失代价,二级缓存(L2)指再一级缓存(L1)和主存储器之间的缓存。当一级缓存发生缺失时,访问二级缓存查找数据;若二级缓存缺失,则由二级缓存到主存中找到数据。使用二级缓存后有:
    缺失代价_{L1} = 存储器平局访问时间_{L2} = 命中时间_{L2} + 缺失率_{L2} \times 缺失代价_{L2}
    代入一级缓存的存储器平均访问时间公式有:
    存储器平局访问时间_{L1} = 命中时间_{L1} + 缺失率_{L1} \times (命中时间_{L2} + 缺失率_{L2} \times 缺失代价_{L2})
    由于使用了二级缓存,对缺失率的定义细化如下:

    • 局部缺失率:\frac{缓存中的产生的缺失数}{对该缓存进行存储器访问的总数},即对于L1缓存为缺失率_{L1},对L2缓存为缺失率_{L2}
    • 全局缺失率:\frac{该缓存中产生的缺失数}{处理访问缓存总数},对于L1缓存为缺失率_{L1},对L2缓存为缺失率_{L1} \times 缺失率_{L2}

    对于二级缓存,停顿周期参数如下所示:
    每条指令平均存储器停顿周期 = 缺失数_{L1} \times 缺失代价_{L1} + 缺失数_{L2} \times 缺失代价_{L2}
    即对于一条指令而言,若产生缺失,则要么这一数据在L2缓存中,要么这一数据在L2缓存也缺失。对于第一种情况,这一指令的缺失仅计入缺失数_{L1}中;对于第二种情况,这一指令的缺失同时计入缺失数_{L1}缺失数_{L2}。现在考虑一个以下参数的缓存系统:

    参数数据
    第一级缓存缺失(千次引用)40
    第二级缓存缺失(千次引用)20
    每条指令存储引用数1.5
    L1命中时间1
    L2命中时间10
    L2缺失代价200

    有缺失率如下所示:
    全局缺失率_{L1} = 局部缺失率_{L1} = \frac{40}{1000} = 4\% \\ 局部缺失率_{L2} = \frac{20}{40} = 50\% \\ 全局缺失率_{L2} = \frac{20}{1000} = 2\%
    由此计算存储器平均访问时间:
    存储器平局访问时间 = 1 + 0.04 \times (10 + 0.5 \times 200) = 5.4个时钟周期
    若要计算每条指令的平均停顿时间,首先要计算缺失数:
    缺失数_{L1} = \frac{40}{\frac{1000}{1.5}} = 0.06 \\ 缺失数_{L2} = \frac{20}{\frac{1000}{1.5}} = 0.03

    随后根据缺失代价和缺失数计算每条指令的平均停顿时间:
    每条指令平均停顿时间 = 缺失数_{L1} \times 缺失代价_{L1} + 缺失数_{L2} \times 缺失代价_{L2} \\ = 0.06 \times 10 + 0.03 \times 200 = 6.6
    对于两个指标,有如下关系:
    (存储器平均访问时间 - 命中时间) \times 每条指令存储访问数量 = (5.4- 1)\times 1.5 = 6.6 = 每条指令平均停顿时间
    对于二级缓存的设计,有两个需要注意的点:

    • 第二级缓存如果足够大(远大于一级缓存),则二级缓存的局部缺失率与全局缺失率非常相似
    • 二级缓存的主要评价指标是缓存全局缺失率

    对于二级缓存而言,首先需要考虑的是容量问题,一般来说二级缓存的容量应当略大于一级缓存;随后二级缓存使用组相联可以有效提高缺失代价;最后需要根据实际情况选择多级包含和多级互斥的策略:

    • 多级包含:二级缓存需要包含一级缓存中包含的所有块,实现简单,但是需要在多级之间使用相同的块大小,可能降低缓存的性能
    • 多级互斥:一级缓存中的块一定不会出现在二级缓存中,一级缓存从二级缓存中调入块的过程复杂化为一二级缓存块的交换,优点是仅需要二级缓存略大于一级缓存

    提高读取缺失优先级

    考虑缓存向存储器写入的情况,一般使用一个写缓冲区,当进行写入时,首先将数据写入写缓冲区中,此时认为写入完成,之后再由写缓冲区将数据写回主存。此时会有一个问题,即写缓冲块中可能有某次读请求需要的数据的最新副本(已经执行写入指令但尚未写入到主存中),具有两种解决方法:

    • 等待:每次读请求都等待写缓冲区清空再读取,实现简单,效率很低
    • 访问:每次读请求首先从写缓冲区查找数据,再执行缓存命中,为目前的通用方法

    为了降低产生缺失的缺失代价,可以设置读取优先级高于写入优先级。若读取优先级未高于写入优先级,若当写缓冲区正在写入主存时产生读取缺失,首先需要等待写入完成再进行块读取,即:
    缺失代价 = 写入时间 + 块读取时间
    若读缺失优先级高于写入缺失,无论写缓冲区是否执行写入,读缺失都会立刻处理(若有写操作则打断),缺失代价即直接为块读取时间。

    使用虚拟地址

    虚拟地址为操作系统分配个每个进程的存储空间的地址。对于使用物理地址的缓存,则首先需要将CPU给出的虚拟地址转换为物理地址,然后使用物理地址对缓存进行命中。这样操作的缓存设计简单,但命中过程中涉及虚拟和物理地址的转换,因此延长了命中时间,即:
    虚拟地址命中时间 = 地址转换时间 + 物理地址命中时间
    为了降低命中时间,可以使用基于虚拟地址的缓存,即缓存中使用虚拟地址。但使用虚拟地址会产生一系列问题:

    • 保护问题:虚拟地址转为物理地址时需要检查页级保护,解决方法为在缺失时从主存中复制保护信息保存到缓存中,每次访问都进行检查
    • 切换进程:每个进程都有自己的虚拟地址空间,可能出现两个进程的相同虚拟地址对应不同的物理地址,因此每次切换进程是需要刷新缓存,产生大量的强制缺失。解决方法是在标签中添加PID(进程识别标识符)字段,标记这个缓存的块属于哪一个进程,命中时进行检查。
    • 别名地址:对于一个进程,可能给一个物理地址赋予多个不同的虚拟地址,因此可能出现一个物理块在缓存中有多个副本,若对一个副本进行写入,则会出现多个块不一致的问题。解决方法是别名消去,即要求每个缓存块必须拥有一个独一无二的物理地址。其中一种方案是检查所有块,例如一个两路组相联的64KB缓存(地址位宽16bit),块尺寸为4KB(偏移量地址12bit),标签位宽为3bit(16-12-1),则当发生缺失时,检查所有可能的块地址共八个,若有匹配,则使其无效。
    • I/O交换:I/O一般使用物理地址,映射到虚拟地址涉及地址转换

    一种折中的方案是仍然使用物理地址,但是当命中开始时直接使用块内偏移地址进行数据访问,同时并行的执行虚拟地址向物理地址的转换(虚拟地址和物理地址的块内偏移量相同),匹配使用物理地址匹配;即使用数据访问和地址转换并行掩盖地址转换时间。

    高级优化方法

    名称命中时间带宽缺失代价缺失率硬件复杂度
    使用小而简单的L1缓存降低--增大-
    路预测降低---略微增加
    缓存访问流水化延长增大--略微增加
    无阻塞缓存-增大降低-大幅度增加
    分组缓存-增大--略微增加
    关键字优先与提前启动--降低-增加
    合并写缓冲区--降低-略微增加
    编译器优化---降低-
    --降低降低大幅度增加

    使用小而简单的L1缓存

    使用小而简单的L1缓存主要用于降低命中时间,命中时间包括以下三个部分:

    • 使用地址中的索引字段确定组地址
    • 读取组中的多个标记与地址中的标记字段进行比较
    • 设置多路选择器选择正确的数据项

    若增大L1缓存的大小,则会增长第一个部分的时间,因此不会考虑大量增加L1缓存的大小。但是会考虑增加L1缓存的组相联度,原因如下所示:

    • 很多处理器访问缓存需要两个时钟周期,因此对命中时间不敏感
    • 引入多线程后,冲突缺失增加,提高组相联度对于降低冲突缺失更友好

    路预测

    路预测也是降低命中时间的一种方法,其在缓存中保存一些额外的位,用于预测下一次缓存访问这个组时可能调用的块,即将设置多路选择器和比较标记并行执行。若预测结果与比较结果相同,则节省了设置多路器的时间;若预测结果与比较结果不同,则重新设置多路选择器,无性能损失。

    缓存访问流水化

    该方法也为了降低命中时间,其将命中时间分散到多个时钟周期中,缩短了时钟周期并提高了带宽(时钟周期提高),但是增加了发出载入指令到获取到数据的时钟周期数,增加了分支预测错误代价。

    无阻塞缓存

    无阻塞缓存指在产生缓存缺失后仍然允许进行缓存命中操作。对于阻塞缓存而言,若访问地址A产生缺失,则需要等待缺失处理完成并获取到对应数据DA后才能进行地址B的访问;对于无阻塞缓存,访问地址A产生缺失后,仍可以立刻对地址B进行访问,若地址B未缺失,可以立刻提供对应数据DB。这种方式可以将缺失代价用后续缓存访问掩盖,降低了缺失代价。

    多组缓存

    将一整块缓存分为多组,不同组之间可以并行访问,提高了缓存的带宽

    关键字优先与提前启动

    这种优化用于降低缺失代价,即对于某个地址的访问缺失后,传统的流程是将这个地址所属的块整个调入缓存后再提供数据,这两种优化方法的操作方式如下所示:

    • 关键字优先:从需要提取的地址开始将块载入,当提取到CPU请求的数据后立刻将其返回给CPU,随后块中剩下的数据以回卷的方式读入缓存
    • 提前启动:仍然从块的起始地址开始载入块,当提取到CPU请求的数据后立刻将其返回给CPU,随后继续载入块

    这两种方法的核心思想都是通过尽快获取CPU请求的数据,随后再考虑块的载入的方法降低缺失代价

    合并写缓冲区

    合并写缓冲区用于降低写操作产生的缺失代价,对于写操作而言,一般通过写缓冲区进行,当进行块的写回操作时,将数据写回写缓冲区,此时缓存认为写操作已经完成。若写缓冲区满,则写操作必须等待写缓冲区非满时才继续进行,此时产生写操作的时间代价。

    合并写缓冲区指在将数据写回写缓冲区时,查询写缓冲区已有的数据,若有相同地址的数据,直接覆盖;若有连续地址,可以将其合并为一个写操作,充分利用写带宽资源。如上图所示,上方为未执行写合并时的情况,连续的四个写访问将写缓冲区填满,引起写操作阻塞;下方为写合并的情况,将四个连续地址的写入合并,不仅充分利用了写缓冲区空间,还充分利用了写带宽。需要注意的是,对于某些对IO访问,不可使用写合并(写连续的控制和数据流),需要使用标记标明其不可合并。

    编译器优化

    不改变硬件而通过软件的优化充分利用数据的局部性以降低缺失率,其核心思想为尽量将连续访问的数据人工的置于一个数据块中,常见的优化有以下两种:

    • 循环交换:假设对于一个数组a[100][200],按先y后x的顺序访问(a[0][0]a[1][0],....)下为每次步幅为200的访问,此时每次访问都可能产生依次缓存缺失。若按先x后y的顺序访问(a[0][0]a[0][1],...)则为每次步幅为1的访问,此时访问块开头的数据产生缓存缺失,块内的数据均不产生缺失,充分利用了数据局部性降低了缺失率
    • 分块:对于大型矩阵,将其分为若干个小矩阵(可以放进一个块中)循环处理可以降低缺失率,因为每次访问一个小矩阵仅产生依次缓存缺失

    预取数据

    根据数据的局部性,一个数据被用到后,其附近的数据也很有可能被用到。以此为原理,可以使用数据预取的方式降低缺失率,数据预取有两种分类:

    • 硬件预取:使用硬件预取数据,额外设置一个数据读入缓冲区。当发生缺失需要调入一个块时,缺失的块调入缓存,将下一个块(缺失的块紧邻的下一个块)调入读入缓冲区。若下次发生缺失且缺失的就是读入缓冲区的块,则直接从读入缓冲区将其调入缓存;若不是读入缓冲区的块,则将读入缓冲区中的块置无效,重新从主存中读取块(也使用读缓冲区预取下一个块)
    • 软件预取:通过软件控制预取的过程(编译器在指令中将数据读入指令提前),此时需要编译器小心设计预取的时间,保证预取产生优化

    虚拟存储器

    虚拟存储器方案将物理存储器划分为块,分配给不同的进程,每个进程仅能访问属于自己的块,虚拟存储器用于自动的处理主存储器(内存)和辅助存储器(硬盘)两级存储结构。虚拟存储器提供虚拟地址,一个进程执行需要连续的虚拟地址空间,但这个连续的虚拟地址空间对应的物理地址可能是非连续的,甚至部分可能不在主存上,虚拟存储器用于自动的处理这些问题。虚拟地址和物理地址的对应关系如下所示:

    7241055-f0d3a0721c3d42a4.PNG
    vaddr.PNG

    虚拟存储器系统可根据划分方法分为三类:

    • 页式:使用大小固定的块
    • 段式:使用大小不固定的块
    • 段页式:一个段由多个大小固定的页组成,一个段包括的页数不固定(一定是整数)

    页和段的优缺点如下表所示:

    指标
    信息长度1(地址)2(地址、长度)
    可见性不可见可见
    替换块容易复杂(需要查找一个可容纳该段的空余地址)
    磁盘通信高效(每次长度相同)不一定(小的段可能仅几个字节)

    层次结构

    对于虚拟存储器,也需要考虑类似缓存的四个问题:放置、识别、替换和写入。需要注意的是,由于虚拟存储器管理的低级存储器为硬盘(磁盘或SSD),单位为页,因此缺失代价很大。所以在考虑上述问题时,优先考虑降低缺失率以提高性能:

    • 放置:为了降低缺失率,一般使用全相联的方式,即一个页或段可以放置在主存的任意位置
    • 识别:识别用页表或段表实现,即在主存中划分一部分区域,用于存储虚拟地址页号-物理起始地址的表。需要查找一个块时,需要访问两次主存:第一次访问页表获得其物理地址,第二次根据物理地址访问数据
    • 替换:为了将缺失率降低,因此采用替换最近最少使用块(LRU)的方式
    • 写入:考虑写入一个块需要消耗很多时钟周期,因此广泛使用写回的方式

    快速地址变换(优化)

    对于使用虚拟地址的系统而言,使用虚拟地址获取数据需要执行两次内存访问:第一次访问分页表获得对应的物理地址;第二次访问物理地址获取数据。为了加速这一类似缓存命中的过程,使用快速地址变换技术,即引入变换旁视缓冲区(TLB)。TLB的组织方式类似缓存,区别在于数据局域不是一个数据块而是一个物理地址。TLB结构如下图所示:

    7241055-e228cc890782c76b.PNG
    ch2_tlb.PNG

    虚拟地址包括虚拟页号和页偏移量,与缓存中的数据块偏移量相同,虚拟地址和物理地址的偏移量相同,因此这个部分不需要包含在页表或TLB中。TLB中以虚拟页号为标记(key为虚拟页号),存储一些状态位和物理地址(value为物理地址)。执行变换时,首先将虚拟页号发给TLB的每一个表项,若标记匹配(虚拟页号与标记字段相同且有效位拉高),则TLB命中,将对应表项存储的物理地址和偏移量组合为物理地址。若不匹配,则根据页偏移量访问页表,将对应的物理地址调入TLB中在执行命中操作。

    保护

    虚拟存储器一个功能是保护数据,即只让一个进程访问其对应的地址空间而不能访问其他地址空间,尤其是需要受保护的地址空间。首先每个进程具有其独有的分页表,使其仅能获取属于自己的页对应的物理地址,其次还有以下方式对内存进行保护:

    • 界限检查:在分页表或分段表中标明偏移量的上界,即提供的偏移量不可超过这个固定的值,阻止其访问超过上界的地址空间
    • 划分共享与保护空间:将地址空间划分为共享和独享两个部分,并使用不同的分页表,分页表中标记页的等级,仅有访问等级高于页的等级的访问才能进行
    • 调用门:在分页表中提供特殊的表项,其数据域中为物理地址而不为基地址,访问提供的偏移量被忽略。即强制对指定页的访问落到指定地址,即只能访问页中的指定地址。

    虚拟存储器与缓存

    对于同时具有虚拟存储器和缓存的系统,缓存具有多种选择方式,包括:

    • 逻辑索引+逻辑标记:按逻辑地址查找组,比对的标记(地址高位)为逻辑地址高位
    • 逻辑索引+物理标记:按逻辑地址查找组,比对的标记为物理地址高位
    • 物理索引+物理标记:按物理地址查找组,比对的标记位物理地址高位

    对于逻辑索引+逻辑标记这种组合,直接使用逻辑地址进行命中操作,若命中则直接获取数据,不存在物理地址变换步骤。对于物理索引+物理标记的组合,首先使用TLB进行地址变换操作,随后执行缓存命中操作。对于逻辑索引+物理标记的组合,访问的方式如下所示:

    7241055-59ceef26c3f89f44.PNG
    cache_with_tlb.PNG

    上图为一个TLB+二级缓存的系统,一级缓存为逻辑索引+物理地址,二级缓存为物理地址+物理缓存。访问过程首先CPU给出虚拟地址,以下两个步骤并行执行:

    • 缓存:根据逻辑地址中的索引字段(L1缓存索引)在L1缓存中查找到对应的组
    • TLB:使用虚拟页编号进行地址变换,将其转为物理地址

    随后,使用TLB提供的物理地址与缓存对应组中的标志(物理标志)进行比较,若匹配,则缓存命中,向CPU提供数据。若不匹配,则L1缓存缺失,使用物理地址访问L2缓存进行命中操作。

    举例:Opteron存储器管理

    Opteron虚拟存储器部分使用AMD64的虚拟存储器结构。AMD64中,64位虚拟地址被映射到52位物理地址,剩下的12位用于提供保护和使用信息。在Opteron中,使用48位虚拟地址和40位物理地址,AMD64中虚拟地址的高16位(16+48=64)为符号位扩展。AMD64为了管理64位页表使用了4级页表,Opteron中每个页表9位,偏移量12位,即有48=9+9+9+9+12,高一级页表中存储的是低一级页表的地址,如下所示:

    7241055-936b01923c782239.PNG
    tlb_example.PNG

    对于虚拟地址,首先根据高9位查询页映射表L4,获得对应页目录指针表的起始地址,再以38~30位为偏移量查询页目录指针表获取页目录表地址,依次类推查找到页表,获取对应的物理地址,和页偏移量组合产生物理地址。每个表中的表项中的数据都分为以下两个字段:

    • 数据:下一级表的物理地址
    • 保护和使用信息:数据的保护信息

    由于有四级页表,每个页表都有保护和使用信息,执行时服从最低级页表的保护和使用信息。为了实现快速地址变换,Opteron使用了4个TLB,两个用于指令访问两个用于数据访问。

    举例:Cortex-A8与I7

    Cortex A8缓存结构

    Cortex A8存储结构为一个两级缓存的结构:

    • 第一级缓存为缓存对(指令缓存和数据缓存分离),使用虚拟索引和物理标记。大小为16KB或32KB,块大小为64B,组织形式为四路组相联,使用路预测和随即替代算法。
    • 第二级缓存使用物理索引和物理标记,为8路组相联,大小为128KB~1MB,块大小为64B。

    虚拟地址和物理地址的转换使用TLB管理,TLB的容量为32项全相联,支持页面大小可变,替换算法为一种轮询算法,当发生TLB缺失时,使用硬件轮询主存页表进行处理。其整体操作方式与[虚拟存储器与缓存]中所述相同。

    I7缓存结构

    i7的缓存结构要远远比A8复杂,其具有三级缓存和两级TLB,三级缓存的信息如下所示:

    特性L1 I-cacheL1 D-cacheL2缓存L3缓存
    大小32KB32KB256KB每个核心2MB
    相联度四路八路八路十六路
    访问延迟4个周期(流水)4个周期(流水)10个周期35个周期
    替代方法伪LRU伪LRU伪LRU带有序选择算法的伪LRU
    索引虚拟索引虚拟索引物理索引物理索引
    物理标记物理标记物理标记物理标记

    同时使用两级TLB,第一级TLB指令与数据分离,如下所示:

    特性I-TLBD-TLBTLB
    大小12864512
    相联度四路四路四路
    替换算法伪LRU伪LRU伪LRU
    访问延迟1个周期1个周期6个周期
    7个周期7个周期访问页表,不确定

    存储器的整体结构如下图所示:

    7241055-457eee7b92ded7d3.PNG
    i7_memory.PNG
    展开全文
  • 【笔记】存储器(一)

    千次阅读 2018-02-19 00:26:38
    存储器分类 按存储介质分类 按存取方式分类 按在计算机中的作用分类 存储器的层次结构 二主存储器 概述 主存中存储单元地址的分配 主存的技术指标 半导体存储芯片简介 半导体存储芯片的基本结构 半导体存储...

    一、概述

    1.存储器分类

    按存储介质分类

      半导体存储器、磁表面存储器、磁芯存储器、光盘存储器。

    按存取方式分类

      1.随机存储器(RAM)
      RAM是一种可读/写存储器,特点是存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关。RAM又分为静态RAM(以触发器原理寄存信息)和动态RAM(以电容充放电原理寄存信息)。
      2.只读存储器(ROM)
      ROM是能对其存储的内容读出,而不能对其重新写入的存储器。
      3.串行访问存储器
      如果对存储单元进行读/写操作时,需按其物理位置的先后顺序寻找地址,则这种存储器称为串行访问存储器。不论信息处在哪个位置,读/写时必须从其介质的始端开始按顺序寻找,故这类串行访问的存储器又称为顺序存取存储器。前段是直接访问,后段是串行访问,称为直接存取存储器

    按在计算机中的作用分类

      存储器主要分为主存储器、辅助存储器、缓冲存储器。
      主存储器(简称主存)的主要特点是它可以和CPU直接交换信息。主存速度快、容量小、每位价格高;辅存速度慢、容量大、每位价格低。


    这里写图片描述

    存储器的层次结构

      存储器的3个主要性能指标:速度、容量、位价。
      CPU不能直接访问辅存,辅存只能和主存交换信息。
      存储系统层次结构主要体现在缓存-主存主存-辅存这两个存储层次上。CPU和缓存、主存都能直接交换信息;缓存能直接和CPU、主存交换信息;主存可以和CPU、缓存、辅存交换信息。


    这里写图片描述

      缓存-主存层次主要解决CPU和主存速度不匹配的问题。主存和缓存之间的数据调动是由硬件自动完成的。主存-辅存层次主要解决存储系统的容量问题。主存和辅存之间的数据调动是由硬件和操作系统共同完成的。

    二、主存储器

    1.概述

    主存中存储单元地址的分配

      主存各存储单元的空间位置是由单元地址号来表示的,而地址总线是用来指出存储单元地址号的,根据该地址可读出或写入一个存储字。
      通常计算机系统的既可按字寻址,也可按字节寻址

    主存的技术指标

      主存的主要技术指标是存储容量存储速度

      1.存储容量
      指在主存能存放二进制代码的总位数,即

    存储容量=存储单元个数 × × 存储字长

      2.存储速度
      由存取时间和存取周期来表示。
      存取时间又称为存储器的访问时间,是指启动一次存储器操作到完成该操作所需的全部时间。存取时间分读出时间和写入时间两种。
      存取周期是指存储器进行连续两次独立的存储器操作所需的最小间隔时间,通常存取周期大于存取时间。

      3.存储器带宽
      与存取周期密切相关的指标为存储器带宽,它表示单位时间内存储器存取的信息量,单位可用字/秒或字节/秒或位/秒表示。带宽是衡量数据传输率的重要技术指标。
      为了提高存储器的带宽,可以采用一下措施:

    1. 缩短存取周期
    2. 增加存储字长,使每个存取周期可读/写更多的二进制位数。
    3. 增加存储体。

    2.半导体存储芯片简介

    半导体存储芯片的基本结构

      存储芯片通过地址总线、数据总线和控制总线与外部连接。
      地址线是单向输入的,其位数与芯片容量有关。
      数据线是双向的,其位数与芯片可读出或写入的数据位数有关。数据线的位数与芯片容量有关。
      地址线和数据线的位数共同反映存储芯片的容量。
      控制线主要有读/写控制线与片选线两种。读/写控制线决定芯片进行读/写操作,片选线用来选择存储芯片。

    半导体存储芯片的译码驱动方式

      半导体存储芯片的译码驱动方式有两种:线选法和重合法
      由于被选单元是由X、Y两个方向的地址决定的,故称为重合法。

    3.随机存取存储器

      按照存储信息的原理不同可分为静态RAM和动态RAM两大类。

    动态RAM的刷新

      刷新的过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程。
      必须采用定时刷新的方法,它规定在一定的时间内,对动态RAM的全部基本单元电路必做一次刷新,一般取2ms,这个时间称为刷新周期,又称再生周期。通常有三种方式刷新:集中刷新、分散刷新、异步刷新

      1.集中刷新
      集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。不能进行读/写操作的时间称为“死时间”,又称访存“死区”,所占的比例称为死时间率


    这里写图片描述

      2.分散刷新
      分散刷新是指对每行存储单元的刷新分散到每个存取周期内完成。把机器的存取周期 tC t C 分成两段,前半段 tM t M 用来读/写或维持信息,后半段 tR t R 用来刷新,即 tC=tM+tR t C = t M + t R


    这里写图片描述

      3.异步刷新
      异步刷新是前两种方式的结合,它既可缩短“死时间”,又充分利用最大刷新间隔为2ms的特点。


    这里写图片描述

    动态RAM和静态RAM的比较

      动态RAM的应用比静态RAM要广泛得多:

      1.在同样大小的芯片中,动态RAM的集成度远高于静态RAM。
      2.动态RAM行、列地址按先后顺序输送,减少了芯片引脚,封装尺寸也减少。
      3.动态RAM的功耗比静态RAM小。
      4.动态RAM的价格比静态RAM的价格便宜。

      动态RAM的缺点:

      1.由于使用动态元件(电容),因此它的速度比静态RAM低。
      2.动态RAM需要再生,故需配置再生电路,也需要消耗一部分功率。

    4.只读存储器

      对半导体ROM而言,基本器件为两种:MOS型和TTL型。

    1.掩膜ROM
      用行、列交叉处是否有耦合元件MOS管,便可区分原存“1”还是存“0”。

    2.PROM
      PROM是可以实现一次性编程的只读存储器。熔断丝断或未断可区别其所存信息是“1”或“0”。

    3.EPROM
      EPROM是一种可擦除可编程只读存储器。它可以由用户对其所存信息作任意次的改写。

    5.存储器与CPU的连接

    1.存储容量的扩展

      将若干存储芯片连在一起才能组成足够容量的存储器,称为存储容量的扩展,通常有位扩展字扩展

    1.位扩展
      位扩展是指增加存储字长。

    2.字扩展
      字扩展是指增加存储器字的数量。

    3.字、位扩展
      字、位扩展是指既增加存储字的数量,又增加存储字长。

    2.存储器与CPU的连接

    1.地址线的连接
      CPU的地址数往往比存储芯片的地址线数多。通常总是将CPU地址线的低位与存储字的地址线相连。CPU地址线的高位或在存储芯片扩充时用,或做其他用途,如片选信号等。

    2.数据线的连接
      CPU的数据线数与存储芯片的数据线数也不一定相等。此时必须对存储芯片扩位,使其数据位数CPU的数据线数相等。

    3.读/写命令线的连接
      CPU读/写命令线一般可直接与存储芯片的读/写控制端相连,通常高电平为读,低电平为写。

    4.片选线的连接
      片选线的连接CPU与存储芯片正确工作的关键。片选有效信号与CPU的访存控制信号 MREQ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ M R E Q ¯ (低电平有效)有关,因为只有当CPU要求访存时,才需选择存储芯片。片选有效信号还和地址有关,因为CPU的地址线往往多于存储芯片的地址线,故那些未与存储芯片连上的高位地址必须和访存控制信号共同产生存储芯片和片选信号。

    5.合理选择存储芯片
      主要是指存储芯片类型(RAM或ROM)和数量的选择。通常选用ROM存放系统程序、标准子程序和各类常数等。RAM则是为用户编程而设置的。

    6.存储器的校验

    汉明码的组成

      任何一种编码是否具有检测能力和纠错能力,都与编码的最小距离有关。所谓编码最小距离,是指在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异。

      根据纠错理论得

    L1=D+C L − 1 = D + C
    DC D ≥ C ,即编码最小距离L越大,则其检测错误的位数D越大,纠正错误的位数C也越大,且纠错能力恒小于或等于检错能力。倘若能在信息编码中增加若干位检测位,增大L,显然便能提高检错和纠错能力。
      设欲检测的二进制代码为n位,为使其具有纠错能力,需增添k位检测位,组成n+k位的代码。为了能准确对错误定位以及指出代码没错,新增添的检测位数k应满足:
    2kn+k+1 2 k ≥ n + k + 1

      设n+k位代码自左至右一次编号为第1,2,…,n+k位,而将k为检测位记作 Ci(i=1,2,4,8,) C i ( i = 1 , 2 , 4 , 8 , … ) ,分别安插在n+k为代码编号的第 1,2,4,8,,2k1 1 , 2 , 4 , 8 , … , 2 k − 1 为上。这些检测位的位置设置是为了保证它们能分别承担n+k位信息中不同数位所组成的“小组”的奇偶检测任务,使检测位和它所负责检测的小组中1的个数为奇数或偶数。

      这种小组的划分有如下特点:

    1. 每个小组 gi g i 有且仅有一位为它所独占,这一位是其他小组所没有的,即 gi g i 小组独占第 2i1 2 i − 1 位(i=1,2,3,…)。
    2. 每两个小组 gi g i gj g j 共同占有一位是其他小组没有的,即每两小组 gi g i gj g j 共同占有第 2i1+2j1 2 i − 1 + 2 j − 1 位(i,j=1,2,…)。
    3. 每3个小组 gi g i gj g j gl g l 共同占有第 2i1+2j1+2l1 2 i − 1 + 2 j − 1 + 2 l − 1 位。

    汉明码的纠错过程

    7.提高访存速度的措施

    单体多字系统

      在一个存取周期内,从同一地址取出4条指令,然后再逐条将指令送至CPU执行,即每隔1/4存取周期,主存向CPU送一条指令。
      采用这种办法的前提是:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显。

    多体并行系统

      采用多体模块组成的存储器。并行工作即同时访问N个模块,同时启动,同时读出,完全并行地工作。

    1.高位交叉编址的多体存储器
      程序按体内地址顺序存放,故又有顺序存储之称。高位地址可表示体号,低位地址为体内地址。按这种编址方式,只要合理调动,使不同的请求源同时访问不同的体,便可实现并行工作。

    2.地位交叉编址的多体存储器
      程序连续存放在相邻体中,故又有交叉存储之称。低位地址用来表示体号,高位地址为体内地址。这种编址方法又称为模M编址(M等于模块数)。一般模块数M取2的方幂,使硬件电路比较简单。
      多体模块结构的存储器采用交叉编址后,可以在不改变每个模块存取周期的前提下,提高存储器的带宽。假设每个体的存储字长和数据总线的宽度一致,并假设低位交叉的存储器模块数为n,存取周期为T,总线传输周期为 τ τ ,那么采用流水线方式存取时,应满足 T=nτ T = n τ
      对于低位交叉的存储器,连续读取n个字所需的时间 t1 t 1

    t1=T+(n1)τ t 1 = T + ( n − 1 ) τ
      若采用高位交叉编址,组连续读取n个字所需的时间 t2 t 2
    t2=nT t 2 = n T

    3.存控
      存控具有合理安排各部件请求访问的顺序以及控制主存读/写操作的功能。一个存控基本结构包括排队器、控制线路、节拍发生器、标记触发器

      (1)排队器
      为了防止两个以上的请求源同时占用同一个存储体,并防止将代码错送到另一个请求源等各种错误的发生,在存控内需设置一个排队器,由它来确定请求源的优先级别。

    确定原则:
      1.对易发生代码丢失的请求源,应列为最高优先级。
      2.对严重影响CPU工作的请求源,给予次高优先级,否则会导致CPU工作失常。

      (2)存控标记触发器
      它用来接受排队器的输出信号,一旦响应某请求源的请求, CM C M 被置为“1”,以便启动节拍发生器工作。

      (3)节拍发生器
      用来产生固定节拍,与机器主脉冲同步,使控制线路按一定时序发出信号。

      (4)控制线路
      由它将排队器给出的信号与节拍发生器提供的节拍信号配合,向存储器各部件发出各种控制信号,用以实现对总线控制及完成存储器读/写操作,并向请求源发出回答信号,表示存储器已响应了请求等。

    高性能存储芯片

      (1)SDRAM
      SDRAM与常用的DRAM不同,它与处理器的数据交换同步于系统的时钟信号,并且处理器-存储器总线的最高速度运行,而不需要插入等待状态。

      (2)RDRAM
      RDRAM采用专门的DRAM和高新能的芯片接口取代现有的存储器接口。

      (3)带Cache的DRAM(CDRAM)
      带cache的DRAM是在通常的DRAM芯片内又集成了一个小的SRAM,又称增强型的DRAM(EDRAM)。

    展开全文
  • 访问cache效率与平均访问时间问题

    千次阅读 2019-06-26 01:16:51
    CPU执行一段程序时,cache完成存储的次数为3000次,主存完成存储的次数为400次,已知cache存取周期为50ns,主存存取周期为250ns,求cache/主存系统的效率和平均访问时间? 思路:cache,中译名高速缓冲存储器,其...

    我们先来看一道例题:
    CPU执行一段程序时,cache完成存储的次数为3000次,主存完成存储的次数为400次,已知cache存取周期为50ns,主存存取周期为250ns,求cache/主存系统的效率和平均访问时间?

    思路:cache,中译名高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU访问主存的次数。简单地说,CPU正在访问的指令和数据,其可能会被以后多次访问到,或者是该指令和数据附近的内存区域,也可能会被多次访问。因此,第一次访问这一块区域时,将其复制到cache中,以后访问该区域的指令或者数据时,就不用再从主存中取出。
    现在回到开始的问题:当CPU发出读请求时,如果cache命中,就直接对cache进行读操作,与主存无关;如果cache中没有需要的信息,则需要访问主存并把该块信息从主存中调到cache中,再次访问cache获取需要的信息。

    所以:⑴命中率:CPU欲访问的信息已经在Cache中的比率称之为命中率。
    设执行程序时,cache访问次数Nc,访问主存次数Nm,则

    h= N c N c + N m \frac{Nc}{Nc+Nm} Nc+NmNc=0.882

    ⑵平均访问时间:设Tc为命中时cache访问时间,Tm为未命中时主存访问时间
    则Ta=h*Tc+(1-h)*Tm=73.6 ns

    ⑶访问cache效率:e= T c T a \frac{Tc}{Ta} TaTc*100%= T c h ∗ T c + ( 1 − h ) ∗ T m \frac{Tc}{h*Tc+(1-h)*Tm} hTc+(1h)TmTc*100%=0.679

    展开全文
  • 最近学计组,学到cache-主存访问系统的平均访问时间ta的计算那一段感觉特别疑惑。 课本上只给出了一个公式,和几句描述描述,如下, h=Nc/(Nc+Nm) ta=htc+(1-h)tm ta:cache-主存系统的平均访问时间 h:命中率 ...
  • 解决办法就是对存储器分层,这是一种折中的办法,利用部分高速度而低容量的存储器和低速度而高容量的存储器互相配合,从而组成了具有大容量和高速度优点的存储器.  打个比方来说,如果我们需要去图...
  • 平均访问时间: ta:cache/主存系统的平均访问时间 tc:命中时cache的访问时间(即cache存取周期) tm:未命中时主存的访问时间(包括访问cache未命中的时间和未命中后访问主存的时间,即主存存取周期) e=tcta=1htc+(1...
  • 磁盘平均存取时间

    千次阅读 2019-12-15 14:34:47
    平均存取时间 = 寻道时间 + 旋转延迟时间(磁头定位到所在扇区的时间)+ 传输时间 平均寻道时间平均旋转延迟时间之和称为平均存取时间(average access time) 扇区 磁盘上的每个磁道被等分为若干个弧段,这些弧段...
  • 存储器

    2020-03-29 14:51:47
    存储器概述存储器分类按存储介质分类按存取方式分类按在计算机中的作用分类存储器的层次结构存储器三个主要特征的关系2. 缓存 主存层次和主存 辅存层次主存储器概述主存的基本组成主存和CPU的关系主存中存储单元地址...
  • 访问内存的有效时间

    千次阅读 2018-11-07 21:42:20
    三、虚拟存储管理下访问内存的有效时间 λ为访问快表的时间/更新快表的时间 t为访问内存的时间 ε为缺页中断处理时间 请求分页管理方式下,存在三种方式的内存访问: 1.页在内存,且快表检索命中 EAT= λ + t 2.页在...
  • 有效访问时间【EAT】
  • 平均存取时间 = 寻道时间 + 旋转延迟时间(磁头定位到所在扇区的时间)+ 传输时间 但是他在计算旋转延迟时间的时候需要将旋转一圈的时间 / 2,书上也没有解释为什么,于是我查了一下相关资料,给出如下解答。 ...
  • 内部存储器——①静态存储器

    千次阅读 2020-03-20 16:04:12
    在现代计算机中,存储器处于全机中心地位,其原因是: (1) 当前计算机正在执行的程序和数据(除了暂存于CPU寄存器的)均存放在存储器中。CPU直接从存储器取指令或存取数据。 (2) 计算机系统中输入输出设备数量增多,...
  • 存储器知识要点

    2019-11-07 13:06:31
    主存的技术指标: 存储容量:能存放二进制代码的总位数 ...写入时间:从存储器接收有效地址开始,到数据写入被选中单元所需要的全部时间 存储周期:两次独立的存储操作所需要的最小间隔(存储周期大于存...
  • 文章目录3.1 概述3.2 SRAM3.3 DRAM3.4 并行存储器3.5 Cache存储器(重点) 3.1 概述 存储器是计算机系统中的记忆设备,主要用来存放程序和数据。 构成存储器的存储介质,目前主要是半导体器件和磁性材料。 存储位元...
  • TensorFlow入门

    千次阅读 多人点赞 2019-04-23 10:09:29
    它还与计算机的其他单元(例如存储器,输入和输出)交互,用于执行来自存储器的指令,这是接口也是CPU的关键部分的原因。I / O接口有时包含在控制单元中。 它提供地址、数据和控制信号,同时接收在系统总线的帮助...
  • 存储器——Cache

    2020-04-26 01:38:45
    2、Cache是COU和内存之间设置的一个小容量存储器,保存的内容是主存内容的子集 3、Cache用SRAM实现,存取速度比主存快 4、可采用两级或多级Cache 5、Cache功能全由硬件调度,对用户透明,运行过程无需软件设置和参与...
  • 虚拟存储器

    千次阅读 2018-11-15 22:50:51
    一、虚拟存储器的基本概念 在虚存管理中,虚拟地址空间是指逻辑地址空间,实地址空间是指物理地址空间;前者的大小受机器的指令地址长度的限制,而后者的大小受物理内存大小的限制。 常规存储器管理不足的原因: ...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    c. 该程序要有顾客购票,查询班机起飞降落时间,班机订票情况等3个功能,并实现菜单选项 5、 用C++编写一个简单的行编辑器,每个结点保存一行文本,程序以E file开始,然后显示行数和提示符,如果输入I,后面...
  • 可见,引入快表后的内存有效访问时间分为查找到逻辑页对应的页表项的平均时间 а × λ + (t + λ)(1  -  а) ,以及对应实际物理地址的内存访问时间 t 。假设对快表的访问时间 λ 为 20 ns( 纳秒 ) ,对...
  • 存储器

    千次阅读 多人点赞 2018-11-16 22:36:56
    存储器层次结构 缓存-主存层次,主存-辅存层次 缓存的功率大于主存,速度高于主存,缓存和主存之间,通过硬件技术进行连接,为了解决CPU和主存速度的不匹配问题,使用硬件技术 提升速度。主存辅存之间通过软...
  • 大容量和高速度:开发存储器层次结构
  • 文章目录一、虚拟存储器概述1. 常规存储管理方式的特征和局部性原理2. 虚拟存储器的定义和特征3. 虚拟存储器的实现方法二、请求分页存储管理方式1. 请求分页的硬件支持2. 请求分页中的内存分配3. 页面调入策略三、...
  • 基于不同存储技术访问时间的差异很大,我们能够得到下图所示的存储器层次结构: 往上访问速度快的技术成本更高,其存储容量更小,像CPU寄存器,一级缓存二级缓存等等; 往下访问速度越慢成本低,存储容量越大,像...
  • 存储器Main Memory/Storage(内存,主存)CPU可以直接访问,存放当前运行的程序和数据 辅存储器Secondary Memory/Storage(外存,辅存)CPU不能直接访问,存放当前不参加运行的程序和数据 高速缓冲存储器...
  • 内部存储器——③主存储器

    千次阅读 2020-03-20 16:36:26
    一、只读存储器ROM 即使电源断电,ROM中存储的信息也不会丢失。 (一)ROM的类型 ROM工作是只能读出,不能写入。 把向ROM写入的过程称为对ROM进行编程,根据编程方法的不同,通常可分为以下几类: (1)掩膜...
  • 1、同一柱面:将一起访问的块放在同一柱面上,减少寻道时间和旋转延迟。 2、多个磁盘:将数据分隔几部分装到不同的磁盘上,而非装到同一磁盘上。这样可以让更多磁头组设备同时访问磁盘块,可增加单位时间内的磁盘块...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,744
精华内容 6,697
关键字:

平均存储器访问时间