`
peng_wp
  • 浏览: 42106 次
社区版块
存档分类
最新评论

cache的若干问题

阅读更多
   前面发现自己对cache的概念模糊了,又拿起《计算机组成与设计:软硬件接口》这本经典之作温习了一下。
   cache的存在是为了解决CPU处理速度比memory范围速度快得多的问题。如果没有CPU与memory速度上的差异,cache不需要存在。
   采用cache技术,需要关注一下几个问题:1.如何知道数据在cache中 2.如何定位一个数据 3.如何处理cache和memory数据一致性的问题。如何知道数据是否在cache中与如何定位数据往往息息相关。一般是定位好数据之后通过一个valid bit来确定是否这个数据是否有效。

   简单的cache,查询数据过程为:通过对地址取模定位到cache的一行,然后通过cache中tag位来校验是否是该地址的数据,最后通过valid bit来确定数据是否真的有效。
   上述过程是一个直接映射的过程,即:memory中的一个位置,只能唯一地映射到cache中的一个位置。
   为降低memory中数据对cache同一存储位置竞争的可能性,同时提高cache的利用率,产生了新的组织cache的方法。主要有3种,分别是:1.直接映射(direct mapped cache)2.组关联(set-associative cache)3.全关联(fully associative cache)。
   1.直接映射即memory中的一个位置,只能唯一地映射到cache中的一个位置。
   2.组关联即memory中的一个位置,只能唯一地映射到cache中的某n个位置,相应的名字即为n路组关联。
   3.全关联即memory中的一个位置,可以映射到cache中的任意位置。
   组关联、全关联往往会采用并行比较来确定数据所在位置。
   有实验表明:当关联度有1路提高到2路时,有效缺失率减少了大约15%,但是继续提高关联度,缺失率没有改善。

   还有就是通过多级cache来提高数据访问的性能。
   多级cache设计与单级cache的设计理念有比较大的不同。例如二级cache的结构中,一级cache主要需要解决访问时间的问题;而二级cache主要需要解决缺失率的问题。这样带来的影响是:一级cache往往小一点,块的容量也会小一点,而二级cache刚好相反。

   处理cache与memory数据一致性问题,主要有方法:写通过(write through)与写回(write back)。
   写通过就是写操作穿透cache,直接到memory。
   写回则是延迟写,只有当该cache块要被替代时,才将其刷到memory中。
   写回效率会高点,当然也会复杂很多。

   连接cache与memory的总线(bus)也会成为性能瓶颈,所以也会采用做一些优化。一种方法是增加总线带宽,另一种技术是交叉存取(interleaving),具体做法是:由于总线速度比memory快,可以将存储器组织若干块,实现交叉存取。

   cache的一些思考:cache的主要思想有两个:将数据数据放到更快的地方;将数据放到离使用更近的地方。在实际应用中,如果有出现访问有速度上的差异,我们可能就要考虑使用cahce了。
  有的时候为了快速响应,会把从数据库中取出的数据直接放到应用服务器就是一个例子,这样做还有一点好处是降低数据库的访问压力。
分享到:
评论

相关推荐

    网格Cache若干问题分析.pdf

    网格Cache是针对网格计算环境的一种缓存技术,旨在解决由于网格中资源能力的不均衡和异构特性导致的系统瓶颈和客户端延迟问题。网格计算是一种分布式计算模型,它通过整合不同地理位置、不同类型的计算资源(如超级...

    Cache的存储结构

    Cache通常被划分为多个区,每个区内包含若干个存储块。这样的设计可以减少冲突的几率,因为不同地址的数据可能映射到不同的区。替换策略,如最近最久未使用(LRU)、随机替换(RAND)、先进先出(FIFO)等,决定了...

    Cache与主存地址映像计算例题[文].pdf

    Cache与主存都被分成若干个大小相等的块,每块由若干个字节组成,主存和Cache的数据交换是以块为单位,需要考虑二者地址的逻辑关系。 一、全相连映像 全相连映像是Cache与主存地址映射的一种方式,主存中任何一个...

    计算机体系结构Cache模拟python.zip

    这些存储块被组织成若干个组,每组内有相同数量的存储块。常见的组织方式有直接映射、组相联和全相联映射。 2. **直接映射**:在这种映射方式中,主存地址的某个部分(高位或低位)直接决定了Cache的哪一行会被选择...

    Cache实验报告

    主存储器被逻辑上划分为若干行,每行又被进一步划分为若干组,每组包含多个字节。高速存储器同样按行和列划分,且与主存储器的列数和组大小相同,但行数较少。 - **联想存储器的作用**:当主存储器中的某个存储单元...

    cache 设计资料

    4. 组关联映射(Set associative):是直接映射和全关联映射的折中方案,将cache分为若干组,每组内可以存放多个块。组关联cache提高了灵活性,减少了冲突缺失的可能性。 5. 替换策略(Replacement policy):当...

    共享cache空间划分

    2. **组相联缓存的应用**:组相联缓存是一种介于直接映射缓存和全相联缓存之间的设计,它将主存分成若干组,每组内的块可以被任意一个缓存槽所存放。这种结构提供了一种平衡的折衷方案,在空间利用率和访问速度之间...

    cache_code.rar_cache_cache命中率_cache映射_cache模拟_cache模拟器

    - **组关联映射(Set Associative Mapping)**:将缓存分为若干组,每组内的多个位置可以存放来自同一组主存块的数据。这样可以减少冲突未命中的概率,但增加了查找复杂度。 - **全关联映射(Fully Associative ...

    cache参数测量程序

    缓存被划分为多个组(Sets),每个组内部又包含若干条路(Ways)。这种方式称为组关联或组相联映射。`cacheway.cpp` 和 `way1.cpp` 可能处理的是路数的测量,而 `matrix_mul.cpp` 可能用于处理复杂计算任务,以测试...

    Cache的工作原理4.docx

    3. 组相联Cache:是前两者的一种折衷,它将Cache划分为若干组,每个组内采用直接映像,组间采用全相联。这种方法既减少了查找时间,又能提高命中率。 Cache的容量设计至关重要,它直接影响命中率和成本。通常,...

    Cache的工作原理4.pdf

    为了解决这个问题,Cache被引入到计算机系统中。 Cache的工作原理基于程序访问的局部性原理。简单来说,程序在执行过程中,大部分时间会集中在一小部分内存地址上进行操作,例如,连续的指令地址、循环和子程序的...

    多核处理器平台资源管理的若干问题研究.pdf

    共享Cache管理是多核处理器中的一个重要问题,因为它直接影响到数据访问效率和系统性能。Cache一致性协议确保了多个核心之间缓存数据的一致性,防止因数据冲突导致的错误。此外,如何有效地分配Cache空间,以及在...

    计算机体系与结构 直接相联映射全相联映射组相联映射 Cache映射机制与逻辑实现 计算机机体系与结构课程设计

    cache的硬件组成通常为SROM,容量通常为主存的1/2的若干次方倍。存储机制,取存时,通过特定的算法,将指定的块区全部移到cache中,取存时,若主存区号与cache相同,则命中;否则,则不命中,通过算法决定是否更新...

    L3Cache-源码.rar

    3. **一致性协议**:在多核系统中,L3 Cache的共享需要解决一致性问题。如MESI(Modified、Exclusive、Shared、Invalidated)协议,确保了在多个核心之间,同一数据的缓存状态的一致性。 4. **预取技术**:预取技术...

    cache-3-associativity-handout.pdf

    多路组相联缓存解决了直接映射中的冲突问题,它将缓存分割为多个“组”(Set),每个组由若干个缓存行组成,允许单个内存块映射到一组中的任何一个位置。因此,它结合了直接映射的简单性和全相联的灵活性。在多路组...

    基于32位微处理器系统架构的Cache设计.pdf

    3. 组相联映射(Set-Associative Mapping):介于两者之间,将Cache划分为若干组,每组内的行可以全关联映射。这种方式兼顾了冲突概率和查找效率。 三、行大小与命中率的关系 Cache行大小直接影响命中率。较大的行...

    oracle 的若干问题

    2. **ORACLE9IAS WEB CACHE**:默认的Web Cache管理员用户和密码是: - administrator/administrator 3. **创建数据库**: - 在Oracle 8.0.5中,使用orainst工具,如果有Motif界面,可以使用orainst /m。 - ...

    ARM9指令cache的verilog代码

    1. **块大小(Block Size)**:Cache被划分为若干个大小固定的存储单元,称为块。每个块通常包含32或64字节的数据,对应于处理器的一次访存操作。 2. **行地址(Line Address)**:每个块由一个唯一的行地址标识,这...

Global site tag (gtag.js) - Google Analytics