Cache 简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5) cache lock & unlock


lock: 由于cache size < mem(L3) size,因此总会有不 够用替换的时候,但是某些应用场景下,我们不希望 某些读入cache的line被替换掉,引入了lock命令(通常 是tag的1 bit) 被lock的行不会在执行替换的时候被别人替换掉。 unlock: 清除lock 位 lock_en (在 lock_en=1---lock_en=0期间读入的 line_fill lock bit=1) lockdown by way (这个一般用于配合lock_en缩小line fill way选择的范围,比如16个way (0-15)的情况,如 果 lock_down了0-6,那么新的 line_fill 只会放在7-15 的way里面)
6. 多级Cache系统


大部分的处理器都使用了Cache,一般这些 Caches是集成在处理器内部的,为了填补处理 器高时钟频率以及访问DRAM相对较长时间之 间的差距,会选择增加一级高速缓存(L2 cache),一般是处理器外部的单独SRAM,L1 cache缺失时会访问它。如果L2 Cache 命中, 那么缺失损失就是L2 cache的访问时间,比访 问主存的时间小的多。 引入原因:1)价格 2)速度
4) cache clean & invalidate





顾名思义,是cache clean 和 cache invalidate 的合体 在将dirty data line更新到L3并取消dirty bit的 同时也清除掉valid bit. 即cache data更新到 L3(下一级)的同时清除cache的数据。 clean & invalidate by way clean & invalidate line by PA clean & invalidate line by way & index.
典型多级Cache
1) L1/L2 cache 结构



L1 和 L2 Cache的设计思想区别很大,这是因为L2 Cache的存在与单级Cache相比改变了最佳选择,偏重 有所不同。 两极的Cache结构使得L1 Cache致力于减少命中时间以 获得较短的时钟周期。同时让L2 Cache致力于降低缺 失率以减少访问主存的大量缺失损失。 L1 Cache可以小一点,缺失率高一点也没有关系,L2 Cache由于仅仅影响L1 Cache的缺失损失,而不影响L1 Cache的命中时间和CPU的频率,他的访问时间不再特 别重要,L2 Cache一般比单级Cache要大,块容量也可 以做很大


它是直接映像与全相联映像的折衷方案.它将 把Cache存储器分为若干个组,每组包含若干 个行.组间采用直接映像,而组内的则采用全 相联映像。主存的某一块可以映像到CACHE指 定组内的任意行中。 将CACHE分为u组,则每组的行数=m/u=v行 映像函数: k = j mod u 其中,k是Cache的组号,j是主存的块号, u为CACHE的组数,即主存的第j块可以映像到 CACHE的第k组中的任意一行中。
2)近期最少使用(LRU)算法
LRU算法将近期内长久未被访问 过的行换出。(Least recently used) 每行也设置一个计数器,cache每 命中一次,命中行计数器清零,其它 各行计数器增1。当需要替换时,将 计数值最大的行换出。 这种算法保护了刚拷贝到cache中 的新数据行,有较高的命中率。
1) 读命中策略


Cacheable:如果定义了Cacheable,那 么需要从Cache中读出命中的数据 No Cacheable:如果不定义Cacheable, 那么直接从下级Cache/主存进行数据读 取
2) 读缺失策略


Read allocate:读缺失的时候,从下级 Cache/主存读回数据的同时将该缺失数 据放入(Line fill)缺失Cache No Read allocate:读缺失的时候,直接 从下级Cache/主存中读回数据,此数据 不进去缺失Cache
2. Cache 地址映射



地址映像:应用某种函数把主存地址映像 到Cache中定位,称作地址映像。这些函 数通常称做映像函数。 地址变换:将主存地址变换成CACHE地址, 这个变换过程叫做地址变换。 地址映像方式有直接映像、全相联映像 和组相联映像等。
(1)全相联映像方式


全相联映像方式允许将主存中的每一个 块映像到Cache的任何一个行。 特点:非常灵活,但由于速度太慢且成 本太高,比较器电路难于设计和实现 (需要进行全部 cache标志和地址的比 较),只适合于小容量CACHE采用。
4. 替换策略
cache工作原理要求它尽量保存最新数据,必 然要产生替换。 • 对直接映射的cache来说,只要把此特定 位置上的原主存块换出cache即可。 • 对全相联和组相联cache来说, 就要从允 许存放新主存块的若干特定行中选取一行换出。 •常见替换算法:LRU LFU FIFO 随机 • write back下的替换是替换dirty的数据 (被修改过的)
Cache 简介
ChangYan 2010 04 (last modified: 2011-03)
1. Cache基本原理


cache是介于处理器和主存之间的小容量存储器,存 取速度比主存快。它能高速地向处理器提供指令和数 据,加快程序的执行速度。它是为了解决处理器和主 存之间速度不匹配而采用的一项重要技术 CPU与cache之间的数据交换是以字为单位,而 cache与主存之间的数据交换是以块为单位。一个块 由若干定长字组成的。当CPU读取主存中一个字时, 便发出此字的内存地址到cache和主存。此时cache 控制逻辑依据地址判断此字当前是否在 cache中:若 是,此字立即传送给CPU;若非,则用主存读周期把 此字从主存读出送到CPU,与此同时,把含有这个字 的整个数据块从主存读出送到cache中
4) 写缺失策略


Write allocate(写分配):在发生写缺 失的时候,在直接写下级Cache/主存的 同时,还将该缺失数据写入本级Cache, 此策略一般和Write Back一起使用 No Write allocate:在发生写缺失的时候, 只将数据写入下级Cache/主存,而不更 新缺失数据的Cache,此策略一般和 Write through一起使用


优点是实现简单,只需利用主存地址按 某些字段直接判断,就可确定所需块是 否已在Cache中。 缺点是不够灵活。因为主存的2t个组(t 为CACHE标记的位数)只能对应于唯一的 Cache存储器行,即使Cache中有许多地 址空着也不能占用,因而使Cache存储空 间得不到充分利用。
(3)组相联映像方式
1)最不经常使用(LFU)算法
LFU算法将一段时间内被访问次数 最少的那行数据换出。 每行设置一个计数器。从0开始计 数,每访问一次, 被访行的计数器增1。 当需要替换时,将计数值最小的行换出, 同时将这些行的计数器都清零。 这种算法将计数周期限定在对这些 特定行两次替换之间的间隔时间内,不 能严格反映近期访问情况。
标记此行为主存中哪一块,标记的位 数t=LOG2(主存的块数)= LOG2(n)
主存不分组
其中块号的位数=CACHE的标记位数t =LOG2(主存的块数), 字的位数=b =LOG2(每块的字数)=LOG2(K)
(2)直接映像方式


主存中的每一块只能映像到CACHE中的一 个固定行的位置。 直接映像函数可定义为: i= j mod m 其中,i是Cache的行号,j是主存的 块号,m为CACHE的行数。
i: k
g位
◆ 上述的j 和k 通常称为索引

n 路(way)组相联:每组中有n 个块(n=M/G ) n 称为相联度。
相联度越高,Cache空间的利用率就越高, 块冲突概率就越低,失效率也就越低。
全相联 直接映象 组相联
n (路数) M
1
G (组数)
1
M
1<n<M
1<G<M
主 存 组
Cache组
3) 写命中策略



Write Back(写回):在写得时候如果发生命 中,那么只是更新Cache之中命中的数据,而 不更新下级Cache/主存的数据。 Write Through(写穿透):在写得时候如果 发生命中,那么在更新Cache数据的同时,也 需要更新下级Cache/主存的数据。 还有和写回法类似的写一次法:基本策略和写 回法相同,不过在第一次命中的时候同时更新 Cache和下级的内容。
cache cache cache cache cache
sync invalidate clean invalidate & clean lock & unlock
1) cacheFra Baidu biblioteksync


一般cache会一些buffer(类似store buffer, eviction buffer等)用于数据merge、暂存以及 一些hazard的判定,这些buffer中的数据通常 不会实时的更新到 L3或者本cache的ram中。 cache sync的作用就是强制清空这些buffer, 例 如store buffer的数据写入L3/cache,evication buffer的数据写入L3,来确保cache接收到的传 输都不在buffer中了
3) (伪)随机替换算法



随机替换策略从特定的行位置中随机地 选取一行换出。 在硬件上容易实现,且速度也比前两种 策略快。 缺点是降低了命中率和cache工作效率。
4) 其他算法

对于直接映射/组相联映射,有些cache 设计上采用了行轮循优先的算法。
5. Cache常见命令

其中tag的位数=CACHE的标记位数t,组号的位数= LOG2 (CACHE的组数u),字的位数=b
3 Cache读写策略


对于cache来说,不论读写,都有两种结 果:命中(hit) 缺失(miss) 命中属于比较理想的状态。 当发生缺失的时候,考虑到最近访问的 数据被再次访问的几率比较高,需要采 用相应的策略对数据进行存取,以保证 Cache内部数据的命中率。
3) cache clean


clean和invalidate命令不同, clean命令用于清除tag中 标志为dirty的位。同时并把dirty对应的data line更新到 L3.但是并不影响tag中的valid位。因此只有write back 之后的操作才需要clean (write through不会产生dirty) clean for dirty, dirty for wb. clean line by PA clean by Way(这个way的dirty都会clean) clean line by way & index 由于clean不影响valid bit,因此by line的情况即使错误 并不会破坏cache内的数据比对。
标记此行为主存中哪一组(64 组)的相应块,标记的位数 t=LOG2(主存的组数)

主存的组数= (主存的块数n/CACHE的组 数u)=256/4=64组
◆ 组的选择常采用位选择算法
若主存第i 块映象到第k 组,则:
k=i mod(G) (G为Cache的组数) 设G=2g,则当表示为二进制数时,k 实 际上就是i 的低 g 位:
2) cache invalidate



当认为cache中的数据无用的时候,我们调用invalidate 命令 invalidate会把cache对应行的tag中的valid bit 清除, 代表此行可用 invalidate by way(按way清除) invalidate by PA (按照物理地址) invalidate by line (way & index,很少见) 常用的是by way和by PA(因为Line的替换L1/Master并 不一定全部了解,而invalidate又涉及tag的valid bit, 使用不当会导致cache数据丢失)
主存的组数= (主存的块数/CACHE的行 数)=256/8=32组
标记此行为主存中哪一组 (32组)的相应块,标记的 位数t=LOG2(主存的组数)
其中tag的位数=CACHE的标记位数t,行号的位数= LOG2 (CACHE的行数m)=c,字的位数=b
(组内的块) 位置
直接映像优缺点
相关文档
最新文档