扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
● 基于Bulldozer架构的8核处理器Zambezi
AMD将在2011年推出基于Bulldozer架构的首款CPU、最高可达到8核心的Zambezi(推土机)。Zambezi内部并未装载GPU,与现有的AMD产品装载了同样的CPU内核。如果以AMD现有产品系列来说,Zambezi相当于取代了Phenom II。
在这里需要指出的是“内核”数。采用了45nm制程工艺的Phenom II是一款桌面CPU,印模尺寸限定在200平方毫米,只能装载4个CPU内核。如果是6核的话印模尺寸就要达到300平方毫米,成本就会超过桌面CPU的范围。AMD还将在2010年投入6核的桌面CPU(Thuban)。不过,如果考虑成本的话,AMD似乎批量出售这款产品。
然而,Bulldozer在采用32nm制程工艺之后可以装载8个核心。如果这样的话,印模上的CPU数将从4个增加到8个。
如果经过细微化技术之后能装载2倍的晶体管,那么内核数也将翻倍,这种CPU计算方法看上去似乎是正确的。但是,随着CPU实际内核数的增加,CPU内核以外的组件也增加了,所以不能单纯地以2倍来计算,例如Intel 32nm的Westmere 6核处理器(Gulftown)。然而,在AMD的计划中Zambezi是8核的。
这恐怕就是Bulldozer架构的优点所在吧。它可以通过优化CPU内核支持多线程处理器,从而是每单元的内核数有所增加,而且CPU单位面积的性能也有所提高。
印模尺寸的推定
AMD CPU印模尺寸的推进图(点击放大)
AMD桌面CPU的推移
● Bulldozer模块是双核还是单核?
这是一个定义上的问题。根据Bulldozer的情况,我可以称它为“CPU内核”。Bulldozer是让2个CPU内核共享“Bulldozer模块”的部分资源。总之,Zambezi装载了4个Bulldozer模块。这样的话,Bulldozer应该是一个多线程内核呢,还是双核呢?
AMD的竞争对手Intel主张Bulldozer的内核是多线程内核的一部分,8核实际上是4核的。Intel的Hyper-Threading内核SMT实际可以运行2线程。因此,Intel CPU就是4核8线程,或者6核12线程。当然,Intel这种不按照内核而是并行线程数计算的方法也是一种营销手段,因为如果按照并行线程数计算的话,Intel单位印模面积的性能可能会更高。
关于这一点,AMD资深工程师Chuck Moore在2009金融分析师日上明确表示:“我们所谓的Bulldozer模块实际上是双核的,不过它是优化了的双核。”
如果按照Moore所说,Bulldozer模块可以获得多线程80%的吞吐量,然而他想要表达似乎更深一些。
多线程架构的比较(点击放大)
● 以吞吐量计算的时代即将来临
Moore表示:“首先,我们预计CPU架构的吞吐量时代即将来临。在这个时代,吞吐量引擎的能源效率设计最高,密度也是最高。单线程性能不会受到影响。通过对CPU工作负载的研究来考量每一种工作负载在系统中的表现。”
自从单线程大大提升系统性能之后,面向PC的CPU开发就一直持续的。然而,AMD曾在2002年到2004年之间作出论断,称未来吞吐量也许是最重要的因素。之后,通过线程的并行处理可获得高吞吐量,必要的晶体管数量很少,研究开始转向高效率高密度的架构。
总的来说,如果吞吐量提高,那么每面积的内核数增加,然而单线程性能会降低下来。AMD没有降低单线程性能是非常重要的一点。AMD开始研究保持单线程性能,同时提高吞吐量的CPU架构,这也是开发Bulldozer架构的出发点。
●整数运算单元繁忙 浮点运算单元空闲
AMD在分析师日上解释了对工作负载的研究结果。
AMD技术群组总经理Chekib Akrout表示:“我们研究了所有应用的工作负载。从结果中可以看出,处理器使用最频繁的部分是整数运算单元,而不是浮点运算单元。当然,浮点运算单元也被使用了,不过大多数命令都去了整数运算单元那里。”
AMD副总裁和服务器业务总经理Patrick Patla表示:“实际上浮点运算单元99%的时间都是空闲的,数值运算非常少。”
总之,AMD找到了CPU内核中使用频率最高和最低的部分,而使用最频繁的部分正是提高性能的关键所在。而且,使用频繁的部分是整数运算单元,不频繁的部分术浮点运算单元。尤其是根据Patla负责的服务器市场的情况,除了高性能计算领域之外几乎不会用到浮点运算。在这方面,AMD采用了集群化架构的Bulldozer架构,一方面分割CPU内核把整数运算单元作为线程专用的资源,把浮点运算单元作为线程共享的资源。
Akrout表示:“我们在Bulldozer模块中分别组装了2个整数运算单元和2个整个调度器。这两个整数运算内核分别跑自己的1个线程,这样就可以提高性能。”
Bulldozer架构(点击放大)
● 线程运算集群没有线程之间的干涉
据Moore表示,选择这个架构是为了不影响单线程性能,同时提高效率。
他说:“我们注意到,提供两个完全独立的整数运算子单元是最好的。整数运算中2个分离的整数内核可以发挥全部功能。一个整数内核不会干涉另一个整数内核。同时,数据缓存和调度器也是彼此独立的。因此,即使是同时使用两个整数运算内核,单线程性能也是很好的。这是关键。”
AMD认为,SMT技术与超线程一样,整数运算资源的竞争会影响到性能。相比使用频繁的整数运算单元,每个线程的分离了集群化的多线程,从而提升了性能。
另一方面,人们普遍认为浮点运算单元在多线程之间的竞争是很少的。
Moore解释说:“通常人们不太使用浮点运算单元,因此彼此的共享是很自然完美的。”
共享浮点运算单元的Bulldozer
● 强大的浮点运算单元
在共享浮点运算单元的同时,AMD还让浮点运算单元更加高效。
Akrout表示:“我们将浮点运算单元作为贡献的资源,这样以灵活地进行共享。2个整数运算单元可以同时分别作为浮点运算单元的一部分。或者,其中一个整数运算单元可以占用浮点运算单元。”
对于浮点运算单元来说,并行线程的执行似乎可以在一个单元内完成。而且,AMD更进一步,让浮点运算单元更加强大。
Patla表示:“为了让浮点运算单元成为最高效的共享资源,我们维持了它较大的容量——2个128位的FMAC。如果使用的话速度和效率将非常高。”
总之,Bulldozer中浮点运算单元成为共享的资源,由于进一步完善,它可以发挥更高的性能。尽管AMD在谈到Bulldozer的时候解释了浮点元算性能的提升,但是原因是显而易见的。而且,AMD认为通用CPU编入SIMD单元的向量长度以单精度4路(128位)为宜,而Intel则认为单精度则打算向单精度4路(256位)扩展。
有趣的是,一般整数预算单元与浮点运算单元的比例是2:1。例如,Sun的Niagara2(UltraSPARC T1/UltraSPARC T2)和Rock也是采用2个整数内核和1个共享浮点内核的比例。同时,以前DEC/Compaq基于Alpha处理器的EV8也是由8个整数运算单元和4个浮点运算单元构成。一般认为,CPU采用这个比例是为了追求多线程性能,同时提高多线程的效率。顺便一下,EV8的工程师Joel Emer现在就职于Intel架构群组。
● 异构环境集成增强的数据并行计算功能
从现有的工作负载可以理解这种共享使用频率低的浮点运算单元的Bulldozer架构。可是,未来注重吞吐量、密集使用浮点运算的应用肯定会快速增加。AMD和Intel都预见到了这一点。这样看来,共享浮点运算单元的Bulldozer模块似乎是逆流而行。然而,并非如此。
Moore表示:“Bulldozer内核在APU上也能使用。它可以在CPU上作为APU SOC提供强大的数据并行引擎。Bulldozer的数据并行浮点运算功能、较小的浮点运算单元和加速GPU都是亮点所在。”
Akrout表示:“Bulldozer可以作为APU,总之,它可以集成异构处理功能。”
也许,AMD的策略如下:今后更多工作负载将需要浮点运算,被接收到CPU和GPU这样的数据并行引擎,因为这样更加高效。加强CPU内核的浮点运算功能是用作APU的前提。考虑异构化也是选择Bulldozer的一个重要原因。
纵观Bulldozer的理念,就可以明白AMD称Bulldozer模块是双核的理由,主要是完全分开使用整数运算单元维持每个线程的性能,也就是现在单线程的性能,因此可以称之为双内核。