返回列表 回复 发帖

缓存之争,1MB比512KB强多少

目前AMD平台的CPU可以说是五花八门,Sempron和Athlon 64兼而有之,让不少朋友在选择时无所适从。比如是AMD Opteron 144与Athlon 64 3000+ (Venice),除了L2缓存不一样(Opteron 144的L2为1MB,而Athlon64 3000+为512KB),两者几乎算得了是孪生兄弟,两者频率、功能、封装一样,也是采用90nm制程的新版本核心,而两者的差价却高达200元(Opteron144的售价为1460元,Athlon64 3000+为1260元)。那么,用200元来换取高一倍L2缓存,对性能会有多大的提升呢?为了解决这一疑问,我们就要对CPU的缓存作一个深入的了解,明白L2缓存对CPU性能有多大影响。
什么是处理器的缓存
    CPU处理的数据来自于硬盘和内存,但随着CPU技术的发展,CPU的处理、运算能力已经大大超过了存储系统的供应能力,于是CPU必须在存储系统提供足够的数据前等待,而且每当CPU的频率提升,这样的差距就更明显。那么在CPU等待期,硬盘、内存所准备供CPU处理的数据存放在那里呢?其实,所有待处理的数据都暂时存在CPU的缓存之内(图1)。

处理器构架原理
    如果将CPU比作一个城里的家具厂,而将存储系统比作郊区的木料厂,那么实际情况就是木料厂离家具厂越来越远,即使使用更大的卡车来运送木料,家具厂也得停工来等待木料送来。在这样的情况下,一种解决方法是在市区建立一个小型仓库,在里面放置一些家具厂最常用到的木料。这个仓库实际上就是家具厂的“Cache”,家具厂就可以从仓库不停地及时运送需要的木料。当然,仓库越大,存放的木料越多,效果就越好,因为这样即使是些不常用的东西也可以在仓库里找到。如果我们需要的木料仓库里没有,就要从城外的木料厂里继续找,而家具厂就得等着了。从上面的比喻来看,仓库就是相当于缓存的概念,可以CPU进行及时的快速读写,其内部数据主要存放的是CPU最常用的代码和数据(图2)。

缓存:处理器和内存间的“仓库”
    目前台式处理器的缓存分二级:L1(一级缓存)和L2(二级缓存),当处理器要读取数据时,首先要在L1缓存中查找,其次才是L2缓存,最后才是系统内存。每一级缓存中的数据都是下面一级数据的一部分,即L1缓存中的数据在L2缓存、系统内存、页文件中都有。由于CPU首先读取L1缓存中的数据,因此内置的L1高速缓存的容量和结构对中央处理器的性能影响较大,容量越大,性能也相对会提高不少。这也正是一些公司力争加大L1级高速缓冲存储器容量的原因。
    不过高速缓冲存储器均由静态随机存贮器组成,结构较复杂(L1缓存采用了速度更高的SRAM,这种内存单晶元使用四到六个晶体管,比我们常见的内存芯片中的要复杂多了),受处理器内核面积、制程的限制,L1缓存的容量不可能做得太大。而且当L1缓存增大到一定程度性能便难以明显提高,因为CPU等待数据期间存在一个临界点——在处理器工作时,停滞时间长短保持为一个常量。在权衡成本和系统性能提升后,最好的方法应该是为L1缓存附加—级L2缓存。L2缓存位于L1缓存和系统内存之间,通常存储L1缓存中数据的扩充部分,而L1则主要存放的是CPU最常用代码和数据(因此L1又分L1指令缓存、L1数据缓存),可以这么说L1缓存是L2缓存的子集。目前新一代CPU产品都在往大缓存方向发展:目前主流台式CPU的L2缓存已经提升到1MB,比如Prescott、Athon 64处理器,而双核心处理器的缓存容量提升到了2MB。此外,鉴于缓存对CPU性能影响较大,目前缓存已经成为CPU厂商用来划分CPU等级的一个标准。
    然而,在缓存架构设计上,不同的芯片生产商也是存在差异的,不同的缓存设计也造成了缓存容量对处理器性能影响程度各不相同的。下面让我们来了解一下AMD、Intel两种品牌缓存设计的原理和不同之处。
缓存的工作原理及差异
    AMD采用的一级缓存设计属于传统的“实数据读写缓存”设计。基于该架构的一级数据缓存主要用于存储CPU最先读取的数据;而更多的读取数据则分别存储在L2缓存和系统内存当中。做个简单的假设,假如处理器需要读取“AMD Athlon 64 3000+ IS GOOD”这一串数据,系统将按顺序将数据分为若干段,然后按优先读取顺序分别将数据存到L1、L2缓存:比如首先要被读取的“AMDATHL”将被存储在L1数据缓存中,而余下的“ON643000+ISGOOD”则被分别存储在L2缓存和系统内存当中(图3)。

AMD处理器缓存工作原理:L1缓存、L2缓存和内存组成一个数据存储梯度链,数据不需要经过转换
    小提示:以上假设只是对AMD处理器一级数据缓存的一个抽象描述,一级数据缓存和L2缓存所能存储的数据长度完全由缓存容量的大小决定,而绝非以上假设中的几个字节。AMD处理器这种实数据读写缓存的优点是数据读取直接快速,但这也需要一级数据缓存具有一定的容量,增加了处理器的制造难度。
    与AMD处理器不同,Intel自P4时代开始就采用全新的“数据代码指令追踪缓存”设计。基于这种架构的一级数据缓存不再存储实际的数据,而是存储这些数据在L2缓存中的指令代码(即数据在L2缓存中存储的起始地址)。假设处理器需要读取“INTEL P4 IS GOOD”这一串数据,系统将为按顺序分为若干段调用。代码指令缓存的工作原理并不是把分段数据直接按顺序存放到L1数据缓存、L2缓存当中,而是直接把分段数据放到L2缓存中,之后每段数据的头尾两个数据被转换为代码存储在L1数据缓存中(图4)。

Intel处理器缓存工作原理:内存数据写入L2缓存转换成数据代码指令,L1缓存根据代码的首尾特征读取L2中的数据,所以L2缓存的容量大小就决定了处理器和内存间所能交换数据的大小,对L2缓存容量依赖大
    由于L1数据缓存不再存储实际数据,因此“数据代码指令追踪缓存”设计能够极大地降低CPU对一级数据缓存容量的要求,降低处理器的生产难度。但这种设计的弊端在于写入或读取数据时要经过一个数据代码转换过程,这样数据读取效率较AMD的实数据读写缓存设计低,而且对L2缓存容量的依赖性非常大,比如赛扬D 336(2.8GHz,256KB L2缓存)与P4 511(2.8GHz,1MB L2缓存)性能上的巨大差距就很好地证明了这一点。
    对于采用实数据读写缓存设计的AMD Athlon 64、Sempron处理器而言,由于它们已经具备了64KB一级指令缓存和64KB一级数据缓存,只要处理器的L2缓存容量大于等于128KB就能够存储足够的数据和指令,因此它们对L2缓存的依赖性并不像Intel处理器那么大。
总结
    理论上,L2缓存越大处理器的性能越好,但这并不是说L2缓存容量加倍就能够为处理器带来成倍的性能增长,有时候甚至看不到太明显的差别。目前CPU处理的绝大部分数据的大小都在0~256KB之间,小部分数据的大小在256KB~512KB之间,只有极少数数据的大小超过512KB。所以只要处理器可用的L1、L2缓存容量达到256KB以上,那就能够应付正常的应用,512KB容量的L2缓存已经足够满足绝大多数应用的需求。
    如果您是狂热的游戏发烧友,从性价比角度出发选择AMD核心的产品时,那么你并没有必要过多地考虑L2缓存的差异,比如开始我们所提到的AMD Opteron 144与Athlon 64 3000+,选择后者更具性价比。如果你是Intel Fans的话,在同等条件下,你可以多考虑缓存大的产品
不懂
实际上就是多了两个256的内存条
一直用1G的,爽
返回列表