手机个人网站制作教程,直播平台app开发,云南人才招聘网,南京定制网站建设怎么收费三种Cache写入方式原理简介 在386以上档次的微机中#xff0c;为了提高系统效率#xff0c;普遍采用Cache#xff08;高速缓冲存储器#xff09;#xff0c;现在的系统甚至可以拥有多级Cache。Cache实际上是位于CPU与DRAM主存储器之间少量超高速的静态存储器#xff08;S…三种Cache写入方式原理简介 在386以上档次的微机中为了提高系统效率普遍采用Cache高速缓冲存储器现在的系统甚至可以拥有多级Cache。Cache实际上是位于CPU与DRAM主存储器之间少量超高速的静态存储器SRAM通常的大小为8KB~512KB。 对Cache的工作原理可以进行如下描述具有Cache的计算机当CPU需要进行存储器存取时首先检查所需数据是否在Cache中。如果存在则可以直接存取其中的数据而不必插入任何等待状态这是最佳情况称为高速命中。当CPU所需信息不在Cache中时则需切换存取主储器由于速度较慢需 要插入等待这种情况称高速未命中。在CPU存取主存储器的时候按照最优化原则将存储信息同时写入到Cache中以保证下次可能的高速命中。因此同一数据可能同时存储在主存储器和Cache中同样按照优化算法可以淘汰Cache中的一些不常使用的数据。 所以提高高速命中率的最好方法是尽量使Cache存放CPU最近一直在使用的指令与数据当 Cache 装满后可将相对长期不用的数据删除提高 Cache的使用效率。为保持 Cache 中数据与主存储器中数据的一致性避免CPU在读写过程中将Cache中的新数据遗失造成错误的读数据确保Cache 中更新过程的数据不会因覆盖而消失必须将 Cache 中的数据更新及时准确地反映到主存储器中这是一个写入过程通常采用的处理方法有直写式、缓冲直写式与回写式三种。 1直写式系统 CPU对Cache写入时将数据同时写入到主存储器中这样可保证Cache中的内容与主存储器的内容完全一致。这种方式比较直观而且简单、可靠但由于每次对Cache更新时都要对主存储器进行写操作而这必须通过系统总线来完成因此总线工作频繁系统运行速度就会受到影响。 2缓冲直写式系统为解决直写式系统对总线速度的影响问题在主存储器的数据写入时增加缓冲器区。当要写入主存储器的数据被缓冲器锁存后CPU 便可执行下一个周期的操作不必等待数据写入主存储器 。 这相对于给主存储器增加了一个单向单次高速缓存。比如在写入周期之后可以紧接着一个数据已存在于Cache中的读取周期这样就可避免直写式系统造成的 操作延时。但这个缓冲器只能存储一次写入的数据当连续两次写操作发生时CPU仍需等待。 3回写式系统以前的两种写入方式系统都是在 写Cache的同时对主存储器进行写操作。实际上这不仅是对总线带宽的占用浪费了宝贵的执行时间而且对于有的情况是不必要的可以通过增加额外的标准来判断是否有必要更新数据。回写式系统就是通过在Cache中的每一数据块的标志字段中加入一更新位解决主存储器不必要的写操作。比如若Cache 中的数据曾被CPU更新过但还未同时更新主存储器则该更新位被置1。每次CPU将一块新内容写入Cache时首先检查Cache中该数据块的更新 位若更新位为0则将数据直接写入Cache反之,若更新位为1则先将 Cache 中的该项内容写入到主存储器中相应的位置再将新数据写回到Cache中。 与直写式系统相比,回写式系统可省下一些不必要的立即回写操作而在许多情况下这是很频繁出现的。即使一个Cache被更新若未被新的数据所取代则 没有必要立刻进行主存储器的写操作。也就是说实际写入主存储器的次数可能少于CPU实际所执行的写入周期的次数但回写式系统的结构较复杂 Cache也必须用额外的容量用来存储标志。 由于回写系统的高效率现代的Cache大多采取这种方式进行操作。 由上面的介绍可以看出写透上述直写式和写回上述回写式有着截然不同的操作在不同的场合不同的内存块使用不同的回写策略如果你的系统可以实现的话要比使用一种策略要高效得多。具体一点对于反复存取的内存块置成写回而把一次写入而很长时间以后再使用的内存置为写透可以大大提高 cache的效率。 第一点很容易理解第二点就需要琢磨一下了由于写透的操作是当缓存有该地址的数据时同时更新缓存和主存当缓存没有该地址数据直接写主存忽略缓存。当该地址的数据很长时间后才被使用到那么在使用的时候该数据肯定不在cache中被替换了所以不如直接写入主存来得直接
相反如果使用写回操作当cache中有该地址数据需要更新该数据设置dirty位很长时间后再使用该数据或被替换的时候才将其刷进主存这有占了茅坑不拉屎的嫌疑而当cache没有该地址数据时情况更糟糕首先需要将相应的主存数据一个cache line导入cache再更新数据设置dirty位再等待被刷回内存这种情况不仅占用了cache的空间还多一次从主存中导入数据的过程同样占据总线开销很大。至于为什么要先从主存中导入数据是因为cache往主存回写数据时是按照一个cache line 单位来写的但被更新的数据可能没有一个cache line这么多所以为了保证数据一致性必须先把数据导入cache更新后再刷回来。
对于很多视频解码来说帧写入过程是一个一次性的动作只有在下一次作为参考帧时才会被使用到所以帧缓冲内存可以设置为写透操作而下一次使用它的时候很可能是作为参考帧来使用而作为参考帧不需要反复的存取只需一次读操作就可以了所以效率并不会因为不经过cache而降低。实验证明该方法可以使mpeg4 sp解码提高20-30%的效率。 相似的内容cache操作的小技巧还有prefetch操作prefetch操作是将主存的数据导入cache而期间cpu不需要等待继续下一 条指令的执行如果下一条指令也是总线的操作那么就必须等待prefetch完成以后再开始。所以在使用该指令时在prefetch指令后面插入尽 可能大于一次缓存不命中所需要的clock数对应的指令那么prefetch与其后面的指令可以并行执行从而省去了等待的过程相当于抵消缓存不命中 的损失。当然如果插入的指令太多而cache太小有可能prefetch的数据进入cache后又被替换掉了所以这需要自己去评估。