我们知道AMD在K8上的成功,很大程度上是大胆的采用了集成内存控制器的做法,不过在Barcelona中它的性能又有了加强。
在Intel Xeon服务器的FB-DIMM内存架构中,可以同时执行读和写命令到AMB,而在标准的DDR2内存中,你只能同时进行一个操作,而且读和写的切换会有非常大的损失。如果是一连串的随机混合执行的话,将会带来非常严重的资源浪费,而如果是先全部读然后再转换到写的话,就可以避免性能的损失。K8内存控制器就采用读取优先于写的策略来提高运行效率,但是Barcelona则更加智能化。
但是读取的数据会被先存放在buffer中,而不采用先直接执行写,但当它的容量达到了极限就会溢出,为了避免这种情况,在此之前才对读写之间进行切换,同时可以带来带宽和延迟方面效率的提高。
K8核心配备的是128-bits宽度的单内存控制器,但是在Barcelona中,AMD把它分割成两个64-bit,每个控制器可以独立的进行操作,因此它可以带来效率上的不小提升,尤其是在四核执行的环境下,每个核心可以独立占有内存访问资源。
Barcelonas中集成的北桥部分(注意不是主板北桥)也被设计成更高的带宽,更深的buffers将允许更高的带宽利用率,同时北桥自身已经可以使用未来的内存技术,比如DDR3。
新的预取器
预取在很多领域的更多部件中都被广泛采用,当NVIDIA发布nForce2的时候,它就强调了智能预取的能力,来充分利用好128-bit内存总线的性能,而更近的Intel的Core 2处理器中被重点强调的每核心三预取器(prefetchers)可以明显减少内存的延迟。
而K8核心每个核心拥有两个预取器,一个是指令,另一个是数据,Barcelona核心仍然保留同样的数目,但是对他们进行了加强,最大的改变是数据预取器,现在可以把数据传到L1数据Cache中,而不是K8核心的L2 Cache。AMD认识到K8预取器的先进性,所以他们只做了上面的处理,同时AMD也提升了L1指令缓存的灵活性,来配合这两个高效请求的工作。
综合来看,似乎Intel的prefetchers在规格方面更有优势,Core 2处理器的每个核心带有两个数据和一个指令prefetchers,加上额外的两个L2 cache prefetchers,可以说是更为可观,但是不一样的设计,最终的性能胜负还不得而知。
Barcelona核心内部拥有自己的数据和指令prefetchers,但是最主要的改进是DRAM prefetcher(内存prefetcher),它位于内存控制器里面,在此前AMD从来没有使用过这样的逻辑设计,这个新的DRAM prefetcher掌管了所有的内存请求和动作,由于DRAM prefetcher要协调四个核心,它就掌控了整个芯片的性能的发挥,同时它不占用L2、L3 caches,它拥有自己独立的buffer来解决数据溢出问题,这个buffer拥有20 - 30个cache线路,其实这个buffer已经在前面提到过。