[已到期] [未解决]
计算机组成原理问题
提问人:孟传良  回答:3  浏览:2254  提问时间:2010/9/5 22:32:33  到期时间:2010/9/8 22:32:33  悬赏分:5+5+20
组相联高速缓存(set-ass ociative cache)的优化问题?
补充问题 我来回答
此问题的回答(3)
冯荣俊
呵呵,还真不清楚。
回答者:冯荣俊  2010/9/6 12:24:01
工业
在现代处理器设计中, Cache有效地解决了处理速度和存储速度之间的匹配问题,从而成为RISC技术成功的一项重要的支撑技术。现代计算机几乎没有不含Cache的。在很多机器中,还采用了多级Cache结构。可以说,Cache和流水线共同构成了RISC成功的两大支柱。本文将详细讨论Cache设计中的一些重要问题。

    Cache设计中的四大基本问题

    映射方式

    相对于主存来说,Cache是一个小存储器。因此主存的块到Cache的行的映射是一种多到一映射。通常有三种映射策略:

    a)直接映射

    主存的一个块只能对应Cache的某一特定行。该方案中Cache被分为若干行,主存块号i对应的Cache行号为i对Cache行数的模。

    b)全相连映射

    主存的一个块可以存放在Cache中的任何行。

    c)组相连映射

    Cache行被分为M组,每组包含N行。主存的一个块和一个特定的组相对应,可存放在该组的任何一行。主存块号I映射成Cache的组号为I对Cache组数M的模。其中每组的行数N常被称为Cache的路数。

    不难看到,直接映射和全相联可以看作是组相联方案的特殊形式。全相联命中率最高,但实现最复杂;直接映射实现最简单,但命中率较低。采用组相联是一种折衷方式,在总容量一定后,考虑组数M,路数N,及行中字节数L之间的配合关系。

    映射机构

    这是映射方式的实现问题。在Cache中为每个行设置了一个标志以指明该行对应的主存块地址。每个Cache行的标志中可包含一些特定信息,根据这些特定信息可以检测它们是否和来自CPU的块地址相匹配。由于速度对Cache至关重要,所以应该对所有可能的标志行并行查找。

    另外,我们必需判断出Cache中的块中是否存放着有效信息。通用解决方法是在标志上增加一个有效位,以指明该标志是否包含有效地址。若有效位未设置,则不能对其进行匹配。由于每个Cache行都需要一个标志,所以增大行的大小对减小标志存储器占Cache总成本的比例是有益的。

    替换策略

    对于直接映射方式,在失效时只能对一个块进行替换,是最为简单的。但是对全相联和组相联方式,出现失效时需要在多个块中进行选择。这是我们有如下三种基本替换策略:

    a)随机替换策略

    这种策略就是随机的在候选块中选择一个进行替换。由于纯粹的随机选择会给硬件调试带来很大的困难,所以在一些系统中实际采用一种具有可再现能力的伪随机策略。

    b)最近最少使用策略(LRU)

    为了减少替换出最近可能使用的信息的机会,可以对块的访问情况进行记录。在发生Cache失效时,利用访问的时间局部性现象,替换出候选块中最近最少被访问的存储块。

    c)先进先出策略(FIFO)

    这种策略在Cache失效时,替换掉存放在Cache中时间最长的候选存储块。

    试验数据证明随机替换策略一般比先进先出策略性能要好,而实现也更简单。所以我们只对随机替换策略和LRU策略进行比较分析。随机策略的一个重要性质就是易于硬件实现。随着可记录块数的增多,LRU策略的实现成本迅速增加,而性能改进一般并不十分明显。表1显示了LRU策略和随机策略在实效率方面的一些情况。可以看出,LRU在较小的Cache中比在较大的Cache中起着更重要的作用。

    存储器的写策略

    对Cache主要进行的是读操作,统计数据表明通常程序的读操作至少是写操作的两倍。但Amdahl定律提醒我们面向高性能的设计绝不能忽视写操作的速度。对于写命中情况,有两种基本的写策略:

    a)写透策略

    信息将被同时写到Cache行和低级存储器的相应存储块中。

    b)写回策略

    信息仅被写到Cache的相应行中,当被改变的行被替换出Cache时,其内容才被写回到主存相应的块。

    这两种写策略各有利弊。对于写回策略,写操作能以Cache的速度来进行,而且在一个块内进行多次写操作仅需要一次对低级存储器的写动作,有益于降低对存储器的带宽要求,使其在多处理器系统中备受重视。对于写透策略,读失效不会导致必须对低级存储器进行写操作,而且写透操作更容易实现。写透策略的另一优点是主存中总是保存着最新数据,这对于多处理器系统和I/O设计都是非常重要的。

    对于写失效情况,也有两种选择:

    a)装入写

    将块装入Cache,接着进行和命中情况相同的操作。

    b)绕写

    对低级存储器的相应内容进行改写,但不装入Cache。

    上述两种写失效策略对写透和写回策略都适用,但对于写回方式,一般采用装入写策略,便于该存储块能被Cache继续利用;对于写透方式,由于后续对该存储块的写操作仍需写到主存中,故以绕写策略为好。

    Cache的性能分析

    之前本文介绍的各种技术的目的是减少平均访存时间。但是,设计Cache的最终目的是减少CPU的执行时间。CPU时间可以分为CPU执行时间和访存等待时间,即:

    CPU时间=(CPU执行时钟数+访存等待时钟数)×时钟周期

    由于Cache失效是访存等待的最重要原因,我们假设访存等待都是有Cache失

    效产生的,以简化分析。

    访存等待时钟数=(存储器访问数/程序)×失效率×失效损失

    将指令总数IC提取出来单独考虑,可得:

    CPU时间=IC×(CPI执行+(访存数/指令)×失效率×失效损失)×时钟周期长度

    可见,对于越小CPI的处理器,设置Cache对CPI的影响程度越大。由于计算CPI时,Cache失效的损失以CPU时钟周期为单位进行衡量,所以较高的CPU时钟频率将导致较大的失效损失。

    根据CPU时间公式,可得采用Cache会增大处理器的CPI,但它可以有效减少平均访存等待的周期数,所以它是有益于提高CPU性能的。对于CPI较小,特别是RISC处理器,Cache失效对CPI的影响很严重,在设计这种处理器的时候,必须降低Cache的失效率。

    Cache失效原因的分析

    导致Cache失效的主要原因有以下三种:

    a)突发失效

    对某存储块进行第一次访问时,由于该块不在Cache中,所以必须首先将存储块取到Cache中。这种情况又称为冷启失效。

    b)容量失效

    如果Cache不能容纳某一程序执行过程中的所有存储块,那么当程序又需使用某一曾在Cache中,但现在已替换出的存储块时,就会出现容量失效。

    c)冲突失效

    在采用组相联或直接映射替换策略的Cache中,许多块都必须映射到Cache中的某一块中,由于这种原因使得当程序又需要使用某一曾在Cache中,但现在已被替换出的存储块时,就会出现冲突失效。

    全相联Cache中没有冲突失效,但增加相联度在意味着增加成本,而且可能延长访问时间,这样就会降低处理器的整体性能。要减少容量失效,就要增加 Cache的容量。上层存储器容量太小,就会频繁产生抖动现象,这意味着机器将以接近低级存储器的速度运行。增加存储块的大小可以减小突发失效的数目,但这又会增加冲突失效的可能。这就需要在Cache的设计工作中,综合考虑三种失效情况,确定折衷的设计方案。

    结束语

    在现代处理器设计中,Cache有效地解决了处理速度和存储速度之间的匹配问题,从而成为现代处理器不可缺少的核心技术之一。在设计中应充分考虑各种条件的制约,权衡各种因素,才能充分提高系统的性能。
回答者:工业  2010/9/6 14:36:52
zhangzhe
这个,真不知道
回答者:zhangzhe  2010/9/6 19:01:55
同类快到期问题