010-51299456

J9九游会终于来了推土机CPU2024-01-26 09:48:46

  J9九游会终于来了推土机CPU增加的整数单元所需要的电路只占总核心面积的12%,从芯片级别上讲这只会给整个内核增加5%的电路,却可以换来80%左右的整数运算性能提升。当然,CMT同样不可能做到真正的物理双核心,AMD表示平均计算下,一个单独的“推土机”核心执行两个线个物理核心的整数运算效率,也就是有80%左右的整数运算性能提升。所以综合来看,CMT综合了CMP和SMT的优点,也是推土机全新设计思路的精髓所在。

  我们知道,在X86架构处理器中,SSE(Streaming SIMD Extensions,流式单指令多数据扩展)自诞生以来就占据了绝对的主导地位。不过,在此之前,每一次新版本的SSE指令集发布都似乎和AMD没有关系,无论是SSE、SEE2、SEE3还是后来的SSE4(4 .1/4.2)都是Intel率先发布的,AMD虽然有对应功能的指令集但名称均有所不同。

  说来也有些讽刺,如今四年已经过去了,Intel已经完成了从45nm到32nm两次工艺革新、Core到Nehlaem再到Sandy Bridge三代核心架构换代,而AMD方面却只从65nm升级到45nm、而且一直维持在K10架构(09年进工艺升级,架构方面也进行了优化,也就是一直沿用到现在的K10.5),并没有本质上的变化。除了各种小道消息之外,全新架构的Bulldozer推土机至今难觅踪影。

  提到推土机的难产,其中的原因是复杂的,而且是多方面的。全新设计思路的转变、支持指令集的扩充、“模块化”架构的变革、GlobalFoundries新工艺的成熟等等都可能带影响。不过恰恰正是这些创新和改变才造就了推土机的的不平凡。尤其是在AMD处理器架构数年都未补充新鲜血液的情况下,推土机的成功与否就显得尤为重要,意义重大而且让人充满期待。

  整数运算性能提升了,那浮点运算呢?虽然在大多数情况下浮点运算占据的比例不高,仅有20%左右,而且未来也可能更多会交给擅长浮点运算的GPU去处理。上面我们也看到了一个模块内的两个内核共享一个浮点运算单元,那会不会造成推土机浮点运算性能的下降呢?对此,AMD给出的方案是增强共享浮点单元的弹性,运算指令灵活多变,以应对不同的应用情景。比如,如果指令是256-bit的,那么两个FAMC单元可以合并为一个256-bit浮点单元进行计算;如果指令不是256-bit的而是128-bit的,那么FAMC单元可以同时执行两个同样的FADD或FMUL指令,拆分即可。

  虽然SMT看起来很好,但也不是完美的。毕竟,无论如何充分利用运算资源,一颗核心始终都不可能达到两颗核心的效果。所以SMT的效率要根据实际的应用环境来定,比如遇到内存和缓存需要长时间等待的境况下,SMT就能发挥很好的作用;反之,甚至并不如一颗纯物理核心的执行效率。按照Intel之前公布的数据来看,SMT大约能带来20-30%的性能提升,换句线个物理核心的效果。

  事实上,CMT很像是CMP和SMT融合后的产物,虽然这么说并不太准确,不过道理确实如此。那么CMT相对CMP以及SMT又有何改进呢?相比CMP的优势前面已经说过了,能够大大减少冗余电路,降低功耗以及缩小核心面积。而在执行过程中,两个线程都有单独的整数执行单元是相对SMT最大的优势,毕竟实实在在的硬件计算效率还是要大大高于资源切换的。

  在评测结果正式出炉之前,我们要做的只是静静等待。除此之外,号称K8架构以来AMD处理器最大变革的推土机究竟带来哪些架构和技术上的转变呢?相信也是不少读者关心的。下面我们就根据已知的信息对其进行汇总,在面对最终结果的时候我们也能知其然,知其所以然。

  Update:目前,我们驱动之家评测室已经拿到了推土机FX-8150的实物以及配套水冷,将会第一时间奉上测试结果,敬请期待!

  我们知道,传统CPU一个物理核心只能同步执行一个线程,所以大多数情况下都会处在等待内存以及数据总线的状态,而SMT可以使一个物理核心“同时”执行两个线程,看起来就像两颗“核心”一样。当第一个线程暂停时,将第二个资源准备充分的线程安排给核心处理,达到运算资源利用最大化。从设计原理上来看,SMT的目的也很简单,就是掩盖单个线程的延迟,以充分利用核心运算资源,以防运算单元浪费。

  早在2007年基于K10架构的65nm第一代Phenom发布之时,就已经传出AMD将要于2009年推出Bulldozer推土机的消息了,而当时的主要规划就是为了对付Intel 45nm全新架构的Nehalem处理器。和APU一样,AMD早已画好了一个“大饼”,可是这个“大饼”确实“熟”的慢了些。

  由于没有相关的多线程技术,单核性能也处于劣势,AMD只能靠物理多核心来对抗Intel的SMT多线程,反映到市场策略上来看就是,在价格相差不多的情况,AMD的四核/三核打Intel的双核,而六核打Intel的四核。虽然表面上AMD还能依靠这种“田忌”的策略占据不小份额,但我们似乎也从其中感觉到丝丝无奈。

  相比之下,AMD之前的办法更加简单暴力,那就是CMP(ChipMultiProcessors,增加核心数量)。从理论上来看,直接增加物理核心的方式对CPU的性能帮助比较明显,也更加直接,尤其是在多线程应用环境下。

  但这种方式也有很大的代价和瓶颈,毕竟每增加一颗物理核心就需要耗费更多的晶体管与核心面积,功耗也会随之水涨船高,而且核心数量增加到一定程度之后性能提升并不一定与之成比例,很容易受到制造工艺的限制。目前的软件以及游戏对多核心优化程度有限,很多实际应用环境只能利用其中的部分核心,而多余的核心只处在低负载状态,实际上也就被浪费了。

  大家都在说推土机跳票、延期,但事实上AMD官方一直都未亲口确认正式发布日期,只是提及了部分处理器型号以及架构细节云云,各种所谓的“确切消息”也只是谣传罢了。虽然表面上我们并不能苛责AMD,但如此的难产让众多A饭们早已等得望眼欲穿。而在对手新一代旗舰Sandy Bridge-E以及22nm Ivy Bridge已现雏形的情况下,AMD的心情恐怕也是一样。

  事实上,在去年的年度高性能处理器研讨会Hot-Chips 22上,AMD就着重提到了推土机的多线程处理能力,而今年的Hot-Chips 23中,就此方面AMD更是不吝言辞,宣传较多J9九游会官网。可见,多线程技术是推土机设计理念转变的重中之重。而这种多线程,AMD称之为CMT(Cluster-Based Multi-Threading,簇式多线程)。如何实现CMT呢?就是我们下面要谈到的推土机模块化设计。

  设计理念之变:多核心下的多线架构处理器诞生之后的很长一段时间内,包括AMD和Intel在内的厂商在提升CPU性能方面的思路都大同小异,无非是改进核心架构、提升处理器频率、优化和扩充指令集、加大二级缓存等等。而到了双核乃至多核CPU出现之后,AMD和Intel的处理器走向了截然不同的两种道路:增加物理核心数量和虚拟同步多线程。

  在上一节的介绍中,我们了解了SMT和CMP都有各自的优缺点:SMT成本虽低,但执行效率并不如增加物理内核;CMP虽然效果不错,但很容易受到制造工艺和功耗的制约。为了最大化的提升处理器多核心多线程的性能,推土机改变了以上两种传统的设计思路,将两颗物理合理组成一颗核心,AMD称之为一个“模块”,也就是所谓的“模块化”设计。

  首先说一下SMT(Simultaneous Multithreading,同步多线程),放在以前就是我们常说的HT(Hyper-Threading,超线程)技术。虽然这项技术在服务器领域早已应用多年,但在桌面处理器实现还要追溯到Intel的P4时代。但是出现之初并没有在P4处理其上大放异彩,而后的Core 2时代甚至遭到取消,直到上代的Nehalem架构才重新复活,重新命名为SMT,一直延续到最新的Sandy Bridge架构。不过P4时代的HT超线程和目前的SMT多线程在提升效果上已不可同日而语。

  不过好消息是,让千万人翘首企盼的推土机来了,可谓箭在弦上,只待发布!今天中午12点,推土机将正式和广大玩家见面。前几日,就有许多国外媒体已经拿到了正式版推土机,而目前国内相关的评测套装以及配套软件也已由AMD中国官方寄出,很快就会到达各大媒体的手中,相信无需多时就能看到详细的评论以及测试结果了。届时,之前的一切传言都会得到验证,而大家最关心的“推土机”能否推倒“爱妻”的好戏也会上演。

  不过好在推土机就要来了,虽然我们不期望它能一招制胜,但至少可以大大提升AMD的市场竞争力。工欲善其事必先利其器,推土机又依靠什么呢?相比之前的K10架构处理器,推土机在多线程、核心架构、指令支持、运算单元、数据总线等诸多方面都进行了革新,而其中以提高CPU的多核心下的多线程能力为主要设计目标,可见推土机既非照搬Intel的SMT也非自家传统的CMP,而是另辟蹊径,寻求新的设计思路。

  所以,理论上来说,共享的浮点单元并不会对推土机的浮点运算性能造成影响,相反还灵活多变而且通用性很高,不仅减小了核心面积而且能够一定程度上降低功耗。

  除了核心架构之外,CPU的性能高低还很大程度上取决于支持的指令集。所以,以往每逢重大CPU产品发布,总会伴随着相应的指令集优化和扩充。这一次,推土机也不例外。除了SSE5,还有AVX。

  按照AMD的说法,推土机之所以会采用这种设计思路主要是为了减少处理器多核心下的冗余电路,同时获得多线程的效能提升。确实如此,如果依然采取传统的CMP方式,随着CPU的物理内核数目越来越多,核心面积也会越来越大,功耗也随之升高,而且会造成大量重复性冗余的电路。

  而减少冗余电路的最好方法就是整合,把两颗核心整合在一起。对于整数单元、一级数据缓存等等分别单独划分,而对于浮点单元、二级缓存则由两个核心共享完成。AMD表示,这种做法能够让每个核心在需要的时候完成更多功能、发挥更高性能,同时节省核心面积,比每个核心都单独割裂开来效率更高。

  由上图不难看出,推土机的模块化核心不再按照传统的整数单元浮点单元构建,而是每个模块中拥有两个整数单元(Integer Unit)和一个高度共享的弹性浮点单元(Flex Floating Point),而每个整数单元都配备了一个单独的调度器,所以可以在同一时刻同步执行两个线程,从而每个模块都能实现CMT。

  按照AMD的说法,虽然推土机内部的一个模块仅有一个浮点单元而且还要共享,但这个浮点单元拥有独立的调度器,无需依赖整数调度器来分配指令,也就无需占用整数单元的资源来排定256-bit的执行方式。每个模块中的浮点单元都由两个128-bit FMAC(Fused Multiply-accumulate,混合累积乘)单元构成,这个浮点单元通用性很强,每周期可以执行任意一个FAMC(Floating-Point Multiply-Accumulators,浮点累积乘)、FADD(FloationgPoint Addition,浮点加)或者FMUL(FloationgPoint Multiplication,浮点乘)计算,相比之下Intel的浮点单元功能就比较单一,FADD和FMUL计算则需要专用的FADD及FMUL管线。

  SMT从成本方面来看相当廉价,因为它采用的是复制内核架构的方法来实现,增加了处理器中存储线程有关数据的单元数量,并在硬件执行单元空闲时将这些数据送往其中处理,以便增加处理器执行单元的利用度,而内部并没有增设一套额外的硬件执行单元。这样不需要增加物理核心,也耗费不了太多的晶体管和核心面积,所以比再另外增加一个物理内核更加划算。而且在操作系统中呈现出来和实实在在的物理核心并没有什么区别,所以我们经常见到四核八线程CPU在资源管理器中有八个“核心”在同时工作。