服务器 频道

能否推到"爱妻"? 详解推土机六大变化

  核心架构之变:一个模块两个内核

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

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

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

终于要来了!推土机六大变化详细解读

  传统的物理核心

终于要来了!推土机六大变化详细解读

  推土机的模块化核心

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

终于要来了!推土机六大变化详细解读

  模块化设计使得推土机实现了CMT

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

终于要来了!推土机六大变化详细解读

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

终于要来了!推土机六大变化详细解读

  高度共享的弹性浮点单元由两个128-bit FMAC单元组成

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

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

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

0
相关文章