CPU在缓存中找到有用的数据被称为命中 , 当缓存中没有CPU所需的数据时(这时称为未命中) , CPU才访问内存 。 从理论上讲 , 在一颗拥有二级缓存的CPU中 , 读取一级缓存的命中率为80% 。 也就是说CPU一级缓存中找到的有用数据占数据总量的80% , 剩下的20%从二级缓存中读取 。 由于不能准确预测将要执行的数据 , 读取二级缓存的命中率也在80%左右(从二级缓存读到有用的数据占总数据的16%) 。 那么还有的数据就不得不从内存调用 , 但这已经是一个相当小的比例了 。 目前的较高端的CPU中 , 还会带有三级缓存 , 它是为读取二级缓存后未命中的数据设计的—种缓存 , 在拥有三级缓存的CPU中 , 只有约5%的数据需要从内存中调用 , 这进一步提高了CPU的效率 。
为了保证CPU访问时有较高的命中率 , 缓存中的内容应该按一定的算法替换 。 一种较常用的算法是“最近最少使用算法”(LRU算法) , 它是将最近一段时间内最少被访问过的行淘汰出局 。 因此需要为每行设置一个计数器 , LRU算法是把命中行的计数器清零 , 其他各行计数器加1 。 当需要替换时淘汰行计数器计数值最大的数据行出局 。 这是一种高效、科学的算法 , 其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出缓存 , 提高缓存的利用率 。
CPU产品中 , 一级缓存的容量基本在4KB到64KB之间 , 二级缓存的容量则分为128KB、256KB、512KB、1MB、2MB等 。 一级缓存容量各产品之间相差不大 , 而二级缓存容量则是提高CPU性能的关键 。 二级缓存容量的提升是由CPU制造工艺所决定的 , 容量增大必然导致CPU内部晶体管数的增加 , 要在有限的CPU面积上集成更大的缓存 , 对制造工艺的要求也就越高 。
双核心CPU的二级缓存比较特殊 , 和以前的单核心CPU相比 , 最重要的就是两个内核的缓存所保存的数据要保持一致 , 否则就会出现错误 , 为了解决这个问题不同的CPU使用了不同的办法:
Intel双核心处理器的二级缓存
目前Intel的双核心CPU主要有Pentium D、Pentium EE、Core Duo三种 , 其中Pentium D、Pentium EE的二级缓存方式完全相同 。 Pentium D和Pentium EE的二级缓存都是CPU内部两个内核具有互相独立的二级缓存 , 其中 , 8xx系列的Smithfield核心CPU为每核心1MB , 而9xx系列的Presler核心CPU为每核心2MB 。 这种CPU内部的两个内核之间的缓存数据同步是依靠位于主板北桥芯片上的仲裁单元通过前端总线在两个核心之间传输来实现的 , 所以其数据延迟问题比较严重 , 性能并不尽如人意 。
Core Duo使用的核心为Yonah , 它的二级缓存则是两个核心共享2MB的二级缓存 , 共享式的二级缓存配合Intel的“Smart cache”共享缓存技术 , 实现了真正意义上的缓存数据同步 , 大幅度降低了数据延迟 , 减少了对前端总线的占用 , 性能表现不错 , 是目前双核心处理器上最先进的二级缓存架构 。 今后Intel的双核心处理器的二级缓存都会采用这种两个内核共享二级缓存的“Smart cache”共享缓存技术 。
AMD双核心处理器的二级缓存
Athlon 64 X2 CPU的核心主要有Manchester和Toledo两种 , 他们的二级缓存都是CPU内部两个内核具有互相独立的二级缓存 , 其中 , Manchester核心为每核心512KB , 而Toledo核心为每核心1MB 。 处理器内部的两个内核之间的缓存数据同步是依靠CPU内置的System Request Interface(系统请求接口 , SRI)控制 , 传输在CPU内部即可实现 。 这样一来 , 不但CPU资源占用很小 , 而且不必占用内存总线资源 , 数据延迟也比Intel的Smithfield核心和Presler核心大为减少 , 协作效率明显胜过这两种核心 。 不过 , 由于这种方式仍然是两个内核的缓存相互独立 , 从架构上来看也明显不如以Yonah核心为代表的Intel的共享缓存技术Smart Cache 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
