从新皓龙看双核心CPU
技术大讲堂
据说,双核心处理器是在一个CPU中集成两个或者更多的物理核心,这和多处理器系统是完全一样的道理。
难道说双物理核心就是直接把两个内核放在一起?
其实在双核心处理器未来的道路上,一个叫做Microsoft的公司正在起着决定性的作用。
2005年4月21日,AMD公司发布了一系列新皓龙(Opteron)处理器,其中包括面向高端的865、870和875 以及面向中低端的265、270和275,这六款处理器都是整合两个物理核心的产品。
如果说Intel公司的双物理核心处理器是被逼出来的话,AMD公司的双物理核心产品就是有备而来的。不过,双物理核心CPU真的准备好了?
双(多)核心与多处理器
单物理核心处理器在桌面领域已经发展了很长一段时间了,皓龙忽然把大家的目光引向了双物理核心甚至多物理核心。这种处理器设计思路并不是无源之水、无本之木,关注过MPS(Multi-Processor Systems,多处理器系统)的用户,应该对双物理核心感觉很亲切。
MPS即含有多个处理器的计算机系统,根据处理器具体情况MPS系统又可以分为SMP(Symmetric Multi-Processor,对称多处理器)系统、ASMP(Asymmetric Multi-Processor,非对称多处理器)系统以及松耦合多处理器系统三种。
ASMP是一种比较松散的结构,任务请求和系统资源都由不同的处理器管理,系统将执行的所有任务按照一定的分配原则,交给不同的处理器去完成。松耦合多处理器系统是更为松散的架构,每个处理器都有自己的本地存储器,可以各有一套I/O系统,只是利用并行仲裁器来整合需求。
SMP就相对紧凑了许多,存储器、I/O等主要资源都被系统中的所有处理器共享,任务请求被仲裁器均匀地分配到所有可用的处理器上。用一个比方来形容,就像面对一大堆需要搬运的货物,ASMP系统是把这堆货物分解开来,每个人负责搬运一部分,自己做完了就上交任务,并不存在人与人之间过多的相互协作。而SMP系统是把这堆堆货物看作一个整体,大家齐心合力——你抬这个角、我搬那个角,一起来共同完成任务。
从均衡负载的角度来看,SMP系统明显有优势,从上面的比喻中就可以看出,多一个人就多一分力气,搬运货物也就更快捷。但SMP系统也有明显的缺陷,中国有句俗话叫做“艄公多了打烂船”,人多了协调起来就存在难度,搬运货物虽然是人多力量大,但是如果力不能往一处使的话,那么人多未必是好事,这就是SMP系统的局限性。
SMP系统的优缺点正好和ASMP系统相反,ASMP系统比较松散,独立性也相对较强。从均衡负载的角度来说,ASMP系统并不理想,很可能某些部分运算压力很大,另一部分却空闲着。但是针对一些特殊的应用,ASMP系统往往因为不存在SMP系统那么复杂的协调和仲裁系统,反倒可以体现更高的效率。
SMP系统受制于其固有的缺点,往往不能有太多的处理器。比如AMD的皓龙处理器,主要的是双路、四路和八路处理器协作运行,而ASMP系统往往可以集成上百个甚至更多的处理器。从这个角度来看,ASMP也可以称得上“人多力量大”了。
讲了不少系统的多处理器架构问题,但这并没有离题,因为在一个CPU中集成两个或者更多的物理核心,其实和多处理器系统是完全一样的道理,前者只是后者的进一步发展和细化而已。说到这里,我们借鉴多处理器系统架构的分类和发展,就可以来分析多物理核心的架构和发展了。
多物理核心的主体设计思路,不外乎也是ASMP和SMP两类。从AMD公司官方给出的双物理核心皓龙架构示意图(图1)来看,皓龙走的显然是SMP路线,而近期非常火热的CELL处理器,走的却是ASMP路线。

结合Intel公司发布的Pentium D系列双核心处理器来看,目前桌面双物理核心处理器走的都是SMP路线,而用于游戏、娱乐乃至于嵌入式系统的CELL处理器走的是ASMP路线。走SMP还是ASMP路线,更多的是受用途和设计理念差异的影响,我们很难说孰高孰低。
双核心 = 1个核心+1个核心?
说到双物理核心,很容易就想到是不是直接把两个内核放在一起,由此还会联想到很多问题,比如发热量和功耗会不会翻一番,两个核心是如何协同工作的。
从图2这张双物理核心皓龙处理器的核心扫描图片来看,结合图1的架构示意图,我们可以很容易回答这一系列问题。

CPU0和CPU1这两个物理内核,各自拥有独立的1MB二级缓存,然后两个物理内核是都是连接在SRQ(System Request Interface,系统请求界面)上的。然后通过Crossbar Switch(交换控制台)与内置的内存控制器以及三个HT端口进行沟通。
从物理结构上来看,双物理内核的皓龙处理器的确基本上是两个物理内核的整合,缓存部分和CPU的核心部分都是两份单核产品相加。但并不是所有双物理核心处理器都是如此,比如Intel的Pentium D双物理核心处理器就有所不同,它只是两个Prescott核心的叠加而并不是两个Prescott-2M核心的叠加。
从图2还可以看到,CPU内部其实最占用晶体管的就是二级缓存,用作缓存的SRAM仅1MB容量就能花去5000万个的晶体管,要知道广为DIYer们熟悉的Barton 2500+处理器一共才5450万个晶体管。
从晶体管数目的分析来看,皓龙以及其未来桌面版本Athlon64 X2,在集成的晶体管数目上会较单核心产品有明显增加。而Intel的Pentium D系列处理器因为在Prescott-2M核心时期缓存数量已然增加,所以晶体管数目的增长没有那么明显。
当然,晶体管数目的增加并不是和功耗、发热成正比的,这里面有两个原因。其一是现在包括皓龙在内的双核心处理器都具备良好的能耗管理方案,某些未被使用的晶体管可能会被临时关闭以节能。其二是,发热并不等于简单的叠加,这个道理很好理解,晚上我在家里开了一盏灯,对面邻居家和我们家窗户很近,他们家也开了灯。尽管邻家有光线照过来,却不见得等于我们家有了开两盏灯的效果。不过,双物理核心在功耗和发热上对于单核心而言,虽然不是1加1的效果,但是还是有比较明显的提升。
一个板基上集成两个物理核心并不等于1加1,还有一个很重要的原因,那就是内存控制器、SQR、Crossbar Switch这些仍旧属于共用配置。其实这部分才是K8核心设计的重点,在本文一开头我们就说过,AMD推出双物理核心处理器是打的有准备之战,其真正原因就在于在单核心时期SQR和Crossbar Switch的设计就存在,那就是为双核心作准备了。
双核心与超线程的区别
说到双核心,不得不提到另外一个技术——超线程。超线程最初出现在我们面前时,宣传的也是“一个顶俩”的概念,既然“一个顶俩”,那真正的双核心处理器和超线程有区别吗?
线程是系统分配处理器时间资源的基本单元。Intel公司在NetBrust架构上为了提高处理器频率,不得不采用了超长流水线的设计,但超长流水线却带来一个问题:X86处理器在同一个时间内仍旧只能执行一个线程,对Pentium4这样的长流水线处理器而言,大多数执行单元始终处于空闲等待状态。
为了提高CPU执行单元的利用率,Intel公司又推出了超线程技术。从本质上来说,超线程技术可以将分支的两个转移方向映射到不同的线程中同时执行。等转移地址确定后,从两个线程中选择正确的继续执行,错误的将被停止掉。这样,会以较小的代价,避免了分支预测错误和长流水线带来的性能低下问题。
使用了超线程技术的处理器,被Windows认定为有两个逻辑核心,而双物理核心的处理器与它到底有什么差别呢? 我们可以先看看Intel官方的说法:没有超线程技术的Pentium4处理器,处理单元的利用率只有1/3。
显然,如果真正能利用好超线程,两个逻辑处理器的确可以达到两个物理处理器SMP的效果。但问题恰巧就是在“真正能利用好”这六个字上面。因为应用程序千差万别,要寻找一个对各种情况都“真正能利用好”的方案谈何容易!理论上能否达到和实际上能否达到,的确存在区别。
至此,我们可以得出这样的结论:超线程技术模拟出来的两个逻辑处理器,从理论上可以和双物理核心一拼,但事实上还是存在差距。
但话说回来,双物理核心处理器也有它致命的问题,这个问题用两个字就可以概括——习惯。前面介绍超线程技术时就提到了单核X86处理器同时只能运行一个线程,所以现在绝大多数软件在设计上也就是本着这个目的而设计的。也就是说大多数软件都是单线程软件,媒体播放、网络应用、办公应用和绝大多数游戏都是这一类。对这一类软件,双物理核心处理器起不到一丝一毫的作用。在这种情况下,倒是超线程技术偶尔因为能挽救分支预测失败导致的损失,显得更有价值一些。
当然,在多线程软件上,3D渲染、视频压缩和一些专业应用领域,双物理核心的确可以发挥效能。此时超线程技术一样的可以取得明显的效果,但是系统SMP毕竟是使用已久的技术,软件优化更为全面,所以这种情况下双物理核心还是效率更佳一些。
回顾一下超线程的发展历程,我们会发现,软件的优化在其中起到了非常重要的作用,而且随着时间的流逝,效用还会越来越明显。双物理核心必然也要走过同样的路,让主流软件全面转向多线程,要花费的时间不短。而且随着时间的流逝,和多线程应用的增多,超线程技术也会越来越显出自身的价值。双物理核心的处理器,不能小看双逻辑核心产品这样的“轻量级”对手。
最后还需要指出一点,双物理核心如果打开超线程技术,在现在的Windows系列操作系统上,有可能会出现性能下降的问题。这个原因也很简单,因为操作系统无法完全对线程进行正确的分配。比如当前有两个线程,很可能被仲裁器错误的分配到一个物理核心的两个逻辑核心中去,而让另一个物理核心闲置。在超线程技术还不完备时,这肯定会降低性能。
总的来说,不管是双物理核心还是超线程技术(双逻辑核心),现在最缺乏的是操作系统和应用软件的支持。Intel公司以及AMD公司编译器开发部门的研发人员,都认为随着操作系统和应用软件支持力度的上升,双物理核心和超线程技术都有机会走入黄金期。
简陋的双核心
Intel具备超线程技术的Pentium D处理器虽然有超线程技术助阵,但现在超线程技术还不成熟。同时Pentium D还有更致命的问题,那就是内存控制器的集成问题。
双核心的皓龙仍就是K8核心的产品,从图1中我们就可以看出它集成了内存控制器。对于双核心处理器而言,对内存带宽的要求自然会更大,集成的内存控制器在这方面帮助很大,现在Intel公司处理器搭配的芯片组虽然支持到了双通道DDR2-667的规范,但在内存性能上还是不能超越仅支持双通道DDR400的K8核心。所以有传闻说,Intel公司在未来的处理器上也会集成内存控制器,与对手竞争。
从内存带宽部分来看,双物理核心产品所能提供的带宽和单物理核心的产品基本一致,这显然说明不管是Intel公司还是AMD公司推出双核心处理器都有一些仓促。如果再看看二级缓存部分,这个结论就更明显了——二级缓存被分隔开来,而且需要保持同步,这是一种简单但是低效率的设计方式,成熟的多核心处理器一般都不会采用。
小结
总的来说,目前的双核心处理器都还属于很简陋的版本。皓龙处理器给我们带来了比单物理核心处理器更高性能,但它并不是无敌的。如果把AMD公司的皓龙处理器比喻为屠龙刀的话,与它“争锋”的不是CELL处理器或者Pentium D,其命运最终的决定因素是操作系统和软件的支持。在双核心处理器未来的道路上,一个叫做Microsoft的公司正在起着决定性的作用。