CPU中的大小与多少

硬件周刊

  CPU(Central Processing Unit,中央处理器)是一台电脑的核心,它在方寸之间集成了数千万乃至上亿个晶体管,内部结构复杂程度不可谓不高。对于CPU结构原理的分析文章很多,但对CPU中大与小、多与少的问题大家有时候也会犯迷糊,下面我们就来辨析一下两个常见说法。

  CPU缓存到底谁大谁小

  缓存大小一直是很多用户衡量一款CPU性能高低的标准之一,对于主流CPU缓存的大小,有一定硬件知识的用户都可以随口道来。关于缓存大小最常见的说法是:Athlon XP的一级缓存比Pentium4大,而Pentium4的二级缓存更大一些。

  1.不同单位也可以相加

  如果要更深入更详细地了解,对于主流桌面处理器就有这些数据:Athlon XP系列产品的L1(第一级)缓存大小是64KB的数据缓存加64KB的指令缓存,一共128KB;L2(第二级)缓存大小是256KB(Barton核心版本为512KB);Pentium4的L1缓存是12KB的指令缓存(或者叫做寻迹缓存)加上8KB的数据缓存,一共20KB;在L2缓存方面,Willamette核心为256KB,从Northwood核心开始就是512KB,到了Prescott核心就是1MB。

  但是对这种说法你如果仔细推敲就会发现有问题,更麻烦的是这种有问题的说法却在用户中被广为流传。先来看看图1和图2,这是著名测试软件WCPUID读取Northwood核心Pentium4和Thoroughbred-B0核心Athlon XP处理器信息的结果。我们会看到图1中Pentium4的L1寻迹缓存的单位并不是“字节”而是“μOps”,图2中AthlonXP L1缓存两部分的单位倒都是“字节”。对于Athlon XP处理器,L1缓存两部分数据的单位相同,将两部分加起来在数学上是可行的;而图1中针对Pentium4而言,两个不同单位的数据也能直接相加,这岂不是有问题?不过很遗憾,随便在网上用搜索引擎一查,找到的这种直接相加的错误竟然比正确的还多。

  2.统一单位后的计算结果

  把问题往深处想一下,12K μOps的缓存是不是在数值上等于12KB呢?

  仔细查阅Intel官方的资料就可以知道,Level 1 ETC(Execution Trace Cache,即L1指令缓存)存储的是解码以后的微指令(micro-ops)。L1的ETC大小为12K μOps就意味着可以存储12K条解码后的微指令。对于Pentium4微指令长度现在还不清楚,但可以类比的是在Pentium Ⅲ架构下微指令长度是118bit。PentiumⅢ、Pentium 4包括K7架构从原理上来说都是披着CISC外衣的RISC处理器,每条CISC指令都会被解码为1-3条等长的微指令,Pentium4的微指令长度和PentiumⅢ应该出入不大。由此看来简单估算Pentium4的L1指令缓存大小,即使Pentium4的微指令长度向Itanium处理器靠拢,比PentiumⅢ有所缩短,也应当在100KB上下。

  不同核心的Pentium4一级缓存在数量上可能略有差异,比如Prescott核心的Pentium4处理器从Northwood核心的12K μOps上升为16K μOps,这可不是4KB存储空间的变化,而是增大了存储4千多条微指令需要的空间。虽说不同内核微指令长度有些不同,不能简单地用微指令的数目来比较指令缓存的大小,但Pentium4数据缓存和指令缓存加起来在100KB出头的样子,这应该是比较合理的估计。这个数目和AthlonXP的128KB合计数目就础同一个级别了。那么我们此时可以得出一个和常见说法大相径庭的初步结论:Pentium4的一级缓存与AthlonXP相比差不多。

  但问题还不是那么简单。我们这里再来看看图3和图4,图3是Pentium4架构的示意图,图4是K7架构的示意图。

  对比图3和图4我们可以很清楚地发现,在AthlonXP核心里面的指令缓存和Pentium4的ETC完全不是处于同一类别的位置,有着比较明显的差异。我们再把Pentium Ⅲ架构图,也就是图5拿来和图3进行对比就更明白了。

  显然在PentiumⅢ架构里面,被解码的微指令是放置在“Reservation Station”里面的,可以这样理解: PentiumⅢ架构里面的“Reservation Station”在Pentium4架构里面被强化,然后被赋予新的名称“ETC”。而PentiumⅢ架构里面的“Instruction Cache”在Pentium4里面已经被部分L2 Cache和另外一些单元所替代,而在AthlonXP架构里面和Pentium Ⅲ一样具有类似“Reservation Station”的部分。如果我们要进行AthlonXP和Pentium4一级缓存大小的比较,采用前面通过简单相加来进行比较的方法,现在看来正确性就值得怀疑了。如果真要对比,似乎我们还得把AthlonXP“Reservation Station”部分的大小也算进去?

  3.真正的结论:统一了单位也不能相加

  我们再来看看图6和图7,这仍旧是用WCPUID软件截取Pentium4和AthlonXP缓存详细信息的图片。在这里我们可以看到,WCPUID软件认为缓存甚至还包括了相关TLB的部分。我们姑且不考虑WCPUID软件这种分类是否合适,但联系上面的分析,我们可以明确地知道CPU内部的缓存远不止“指令缓存”和“数据缓存”两种,如果要严格地在数量上比较大小,必须将相关的全部缓存进行相加才对。对于其他的存储器限于篇幅我们这里就不再讨论了,只是再次指出在相加之前要确保相加得出的结果含义一致,不然一块CPU加一把椅子你能说等于什么东西?

  至此,我们可以得出结论:在架构有一定区别的处理器对比中,很多缓存已经难以找到对应的东西,即使类似名称的缓存在设计思路和功能定义上也有区别了。比如图6、图7里面TLB部分的联合方式,Intel和AMD两家公司存在着注重大块数据还是小块数据的两种思路。此时甚至已经不能用简单的算术加法来进行对比;而在架构极为近似的处理器对比中,分别对比各种功能缓存大小才有一定的意义。而一级缓存、二级缓存这一类说法,在一些描述性的文章中还可以使用,在较为专业的场合这种称谓就显得不太严谨了。

  广大用户自Pentium Ⅱ乃至更早时期养成的对比缓存大小判断性能的习惯,现在该渐渐抛弃了,不同类型的CPU不能简单用缓存大小衡量其性能。

  CPU内存寻址到底是多少

  Athlon64/FX作为桌面级64位中央处理器,在CPU发展史上的重要性毋庸置疑。Athlon64最吸引大众目光的就是它的64bit特性,它号称能大幅度提高处理器效能并且能提供更大的内存寻址空间,但事实是这样么?

  1.并不支持64位内存空间寻址的Athlon64

  在讨论Athlon64能支持多少内存之前,我们先来看看已经辉煌多年的X86-32架构下的CPU能够支持多大的内存。这个答案很显然,32位处理器自然是能支持32位的内存寻址,也就是拥有2的32次方(也就是4GB)这么大的寻址空间,这在80386DX时代就已经被实现了。但近年来由于大型数据库、视频图像处理等这些对内存空间极度渴求的应用程序被更广泛、更大规模的使用,4GB的内存已经开始捉襟见肘。所以在Pentium Pro时代就引入PAE(Physical Address Extensions)技术,通过这类技术我们可以使物理寻址空间达到36位,也就是64GB。

  那么Athlon64能够支持多大的内存呢?查询相关的白皮书我们可以知道,Athlon64(Opteron)只能支持到40位的物理空间寻址,也就是支持1TB(1TB=1024GB),与采用PAE技术的32位处理器相比物理寻址空间增大了15倍。这个结果可能让人有些吃惊,原来Athlon64并不支持64位的物理内存寻址!但我们再次查询AMD公司X86-64架构体系的时候可以发现,X86-64现有架构实际上可以支持52位的物理寻址能力,也就是4PB(1PB=1024TB)大小,而虚拟寻址就可以达到64位。

  2.支持的内存越多越好么

  我们并不能因为Athlon64不支持64位内存空间寻址,就说它是挂羊头卖狗肉,AMD公司这样做也是有它的理由的。我们先来看看它的竞争对手Intel公司的64位处理器──安腾系列产品。第一代安腾处理器可以支持44位的物理寻址,也就是16TB的物理寻址,和54位的虚拟寻址,也就是16PB,最大寻址能力和Athlon64一样没有达到64位。而安腾二代物理寻址就进一步提升到50位(1PB),虚拟寻址就达到了64位。关于这几款处理器内存寻址能力的文章,很多文章里面给出的数据都是五花八门,正确性也值得商榷。下表中做了一个简单的归纳:

  作为现阶段的桌面甚至是服务器级别应用,更大的内存寻址空间并不具备特别的意义,不仅内存芯片厂家没有对应的产品,操作系统的限制短期内也没有打破的迹象。所以不管是Intel还是AMD,在内存寻址上都没有试图去做到64位的一步到位。对于越来越大的内存,在软硬件层面上提高管理能力才是现在发展的当务之急。现在很多评测都已经指出在超越主流内存容量以后,不管是软件层面或者硬件层面都会出现这个可怕的事实:内存越大、速度越慢。如果内存容量呈指数级别增长,效能下降的程度有可能会变得非常的可怕。内存寻址位数的提升,只有在相关软硬件都有充分发展并能予以充分支持的时候,这才能发挥出它应有的意义。

  而且从架构上来说,AMD公司X86-64系统仍旧采用的是具有20多年历史的X86的ISA(Instruction Set Architecture,指令集架构),而形式上仍旧是披着CISC外衣的RISC处理器,只是增加了64位计算的能力并且在架构上做了一些优化和更新。对比Intel公司的安腾系列处理器,是采用EPIC(Explicitly Parallel Instruction Code,并行指令代码)指令的VLIW架构,两者的差别非常大,对于内存寻址能力更不是通过大小就能简单比较出来的。

  把上面的分析概括一下,结论就是:Athlon64并不支持64位的内存寻址(但支持64位运算),支持内存数目也并不是越多越好。只是时下把支持64位内存寻址作为Athlon64主要优点的观念不少人都存在,而错误认为内存寻址越大越好的人也不少。Athlon64是一款优秀的具有划时代意义的CPU,但我们不能把它更优秀的设计淹没掉,而把赞许投在一些只具有广告意义的噱头上。