当前位置: 首页 >> 程序设计 >> cache和代码优化(2)
 

cache和代码优化(2)

作者:      来源:xyiceberg.cublog.cn     发表时间:2007-11-19     浏览次数:      字号:    

3. 替换策略
    Cache失效原因Cache包括以下几个失效原因:义务失效(Compulsory),冲突失效(Conflict),容量失效(Capacity),一致性失效(Coherence),无效失效。
   
义务失效是由于第一次访问某一内存造成的失效。
   
冲突失效是由于不同的存储位置映射到同一Cache索引造成的失效。冲突失效的解决办法有增大Cache容量;增加相联读,对同一Cache索引可以有多个信息项。全相联,完全不要索引,并行比较所有的标签,对于全相联Cache,冲突失效=0
   
容量失效是由于Cache不能保证程序访问需要的所有的数据块造成的失效。容量失效可以通过增大Cache容量解决。
   
Cache失效后替换时,对于直接映射Cache,每个存储器位置只能映射到唯一一个Cache位置,定位时不需要任何判断,当前的信息项替换掉Cache中该位置上的前一个信息项。对于N路相联Cache,每个存储器位置可以选择NCache位置之一。对于全相联Cache,每个Memory可以存放在任意Cache位置。
   
CPU发出读操作命令时,根据它产生的主存地址分为两种情形:一种是需要的数据已在Cache中,那么只需直接访问Cache,从对应单元中读取信息到数据总线;另一种是需要的数据尚未装入CacheCPU需从主存中读取信息的同时,Cache替换部件把该地址所在的那块存储内容从主存拷贝到Cache中;若Cache中相应位置已被字块占满,就必须去掉旧的字块。常见的替换策略有四种:
   
随机替换策略:硬件随机选择一个Cache数据块替换出去。优点:简单,易于实现。缺点:没有考虑Cache块的使用历史,反应程序的局部性较差,失效率较高。
   
先进先出策略FIFOFIFOFirst In First Out)策略总是把最先调入的Cache字块替换出去,它不需要随时记录各个字块的使用情况,较容易实现;缺点是经常使用的块,如一个包含循环程序的块也可能由于它是最早的块而被替换掉。
   
最近最少使用策略LRU)(Least Recently Used)策略是把当前近期Cache中使用次数最少的那块信息块替换出去,这种替换算法需要随时记录Cache中字块的使用情况。LRU的平均命中率比FIFO高,在组相联映像方式中,当分组容量加大时,LRU的命中率也会提高。缺点:实现复杂,硬件实现困难。
    PLRU:基于一个二叉树来淘汰,减少比较的次数。
   
相联度高,失效率较低;Cache容量较大,失效率较低;LRU Cache容量较小时,失效率较低;随着Cache容量的加大,Random的失效率在降低。

    CPU发出写操作命令时,也要根据它产生的主存地址分为两种情形:一种是命中时,这时会遇到如何保持Cache与主存的一致性问题,通常有两种处理方式:
   
直写式write through)即CPU在向Cache写入数据的同时,也把数据写入主存以保证Cache和主存中相应单元数据的一致性,其特点是简单可靠,但由于CPU每次更新时都要对主存写入,速度必然受影响。
   
回写式write back)即CPU只向Cache写入,并用标记加以注明,直到Cache中被写过的块要被进入的信息块取代时,才一次写入主存。这种方式考虑到写入的往往是中间结果,每次写入主存速度慢而且不必要。其特点是速度快,避免了不必要的冗余写操作,但结构上较复杂。
   
这两种写策略各有利弊。对于回写策略,写操作能以Cache的速度来进行,而且在一个块内进行多次写操作仅需要一次对低级存储器的写动作,有益于降低对存储器的带宽要求,使其在多处理器系统中备受重视。对于直写,主存中总是保存着最新数据,这对于多处理器系统和I/O设计都是非常重要的。

4. cache工作流程 -
处理器中的MESIMEI协议
   
MESIModified Exclusive Shared Invalid的第一个字母。因为在一个多核CPU系统里包含多个拥有CACHECPU,而这些CPU又共用同一主存,为了确保这些CACHE和主存之间数据的一致性,引入MESI协议。
   
MModified。指该CACHE行包含的数据相对于主存是被修改过的。
   
EExclusive。指该CACHE行里的数据在整个系统的CACHE里是独有的,且未被修改过。
   
SShared。指该CACHE行里的数据在其他CACHE里也存在,但不能断定其他CACHE行的数据是S还是M
   
I:该CACHE行无效。
   
MEIMESI的基础上删除了Shared状态,禁止数据在处理器的Dcache内共享。
    状态迁移图(略)

以上都是一些cache的原理,理解是cpu芯片选型,以及代码性能优化的基础。

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •