四散的图钉吧 关注:687贴子:6,731

【综合】为推土机平反!带你深入了解推土机架构的利与弊!

取消只看楼主收藏回复

前言:推土机架构是农企啊呸AMD在K8架构以来,唯一一次真正意义上的架构革新。推土机架构大概在2007年开始计划,然后几次跳票,最终在2011年10月12日发布了第一代推土机架构处理器。
.
然而与众人的期待相比,备受瞩目的推土机并达到人们所期望的性能水平。
.
为此众多人士对推土机架构的褒贬不一,并且大多数以大○村,大○洋为代表的大众媒体对推土机架构的效率开展了各种炮轰。
.
从此农企啊呸AMD走上了推土机架构的不归路啊呸改进之路。
.
以下是AMD的农机系列啊呸路线图,这些架构在官方文档中统一被称为Family 15h,都是继续推土机架构并进行优化的产物。
可以跟明显的看出每一阶段的具体目标。
.
第一代:Bulldozer【推土机】,第一代模块化架构,①灵活的浮点单元,②支持128/256位 AVX,XOP,FMA4,这些已经实现√
.
第二代:Piledriver【打桩机】,提高架构IPC(即InstructionPerCycle,单位时钟循环执行指令数)和时钟频率,这些已经实现√
.
第三代:Steamroller【压路机】,更好的并行性(或者说多核效能),这些已经实现√,据测试IPC提高了15%左右
.
第四代:Excavator【挖掘机】,极大地提升性能,支持AVX3.2,TSX,DDR4等新特性
.
下面,就由楼主结合各方面资料,深♂入探究一下推土机架构的特性。

---Powered by GeForce GTX610MX Ti Boost Ultra+ Ghz Edition


来自Android客户端1楼2014-03-25 19:53回复
    【一个分离的分支预测器】
    AMD 没有透露太多分支预测硬件的构造信息。但是我们还是能很快的发现一个很重要的改进:分支预测器(branch predicto)现在和处理器前端明显的分开了(decoupled)。

    分支预测器的作用是预测分支指令的结果和跳转目标地址,而不是在分支结果出来之前白白等待。分支结果是根据以前的分支结果来的。拥有的数据越多,预测器就能更符合你的工作负载,预测的更准。准确的预测分支对于深管线的结构来说异常重要,因为一次错误的预测就会导致更多的指令被从管线里清空。推土机的管线深度比它的前一代有明显的增加,所以增强分支预测是必需的。
    对于 Phenom II 和推土机,跳转分支都是在 管线的前端和指令读取在一起的。 对于 Phenom II, 读取指令有任何的卡壳(比如读取的指令不在缓存里)都会让整条管线停工,包括后面的分支预测。推土机 通过一个预测队列 让分支预测和指令读取分开了。 如果指令读取卡壳了,推土机的分支预测硬件还可以继续工作,做出下一步的分支预测,直到这个预测队列满了为止。
    我们下面简单的说下该方案的有效性。


    15楼2014-03-27 11:54
    回复
      【调度和执行方面的改进】
      和 Sandy Brindge一样,AMD 在推土机上 开始使用物理寄存器堆(physical register file = PRF) 的构架。数据只存在于一个地方(物理寄存器堆中)。执行引擎使用指针来跟踪 物理寄存器堆 中的数据。这个改动是为了节省能耗,因为在芯片中直接拷贝数据是很耗能的。

      推土机中,给执行引擎提供数据的缓存和队列 都要比Phenom II 要大。更大的数据结构允许乱序执行的时候有更好的指令级并行性。 换句话说,推土机的发射端比前一代更强劲。但是不幸的是,虽然AMD在发射端前进了一步,但是在执行端就落后了。让我们先看看推土机好的一面:整数执行核心。


      16楼2014-03-27 11:57
      回复
        【整数执行核心】
        每个推土机模块都有两个完全独立的整数核心,每个核心都有自己的整数调度模块,寄存器堆 和16KB 的L1数据缓存。整数调度模块每个都比Phenom II 的要大。

        最大的变化是每个整数核心现在有两个端口而不是3个。单个整数核心包括了两个 AGU/ALU 端口, 而之前一代的设计是3个. AMD 声称在Phenom II里, 第三个 ALU/AGU 组基本山用不到,所以在推土机里被切掉了。
        由于给整数核心提供数据的结构(前端?)更大了,AMD应该比上一代更容易的提高整数单元利用率。理论上AMD可以在 Phenom II 核心执行更多的整数操作,但是AMD说整个系统一般是受到其他部分的限制。


        17楼2014-03-27 11:58
        收起回复
          【共享的浮点核心】
          每个推土机模块有一个共享的浮点核心给两个线程使用。如果只有一个线程有浮点操作,就会享受到全部的浮点硬件资源。否则两线程就要共享资源。

          和一个4核的Phenom II相比, AMD 8核FX在浮点上没有缩水,AMD的整数和浮点调度总是分开独立的。Phenom II 和推土机有一样的执行端口数(应该特指浮点运算)。 和整数单元一样,推土机中的浮点核心有比Phenom II更大的调度模块。

          问题是AMD的推土机必须包含更多的功能。 Phenom II缺乏 SSE4 和 AVX的支持,而推土机都支持。而且,AMD决定让他的浮点核心支持单步的乘-加指令(FMA)(注:就是一步内计算a+b×c,保持高精度)。支持FMA导致了浮点单元的相对面积的增加。所以虽然推土机浮点的吞吐能力没有比K8增加,但是能力提高了。 但是不幸的是,这也导致了x87/SSE2/3 浮点指令的峰值速度和前一代相比没有增加。 推土机的浮点只有在使用了 新的SSE(SSE4),AVX或者FMA指令的时候才更快,或者时钟频率比Phenom II有明显提高。
          下面的 Cinebench 11.5 多线程负载 很能说明这种性能上的拖累。

          和 3.3GHz 6-核 Phenom II相比,8核 推土机虽然有 9%的频率优势(考虑到turbo,差距更大),但是只有2%的性能优势。重度多线程的浮点负载下,推土机可能不比他们的6核前辈门好多少。
          而且,推土机发布的时候,不仅仅要超过4核的前一代,还需要比6核 Phenom II做的更好。 比较浮点运算,Phenom II 有明显的优势:它可以比推土机执行多50%的 SSE2/3 和 x87浮点指令。
          自从 Phenom II X6发布以来, AMD的主要优势就在于重度多线程负载---特别是得益于纯数量优势的浮点运算。推土机实际上在这点上有所退步,结果你就看到在同样的负载下推土机的表现和Phenom II X6持平或者更差。
          和 Sandy Bridge相比,推土机只有2个优势:支持FMA 以及更高的 128-bit AVX 吞吐量。现在几乎没有用到FMA的代码,但是128-bit AVX 的优势是比较实在的。


          18楼2014-03-27 12:00
          回复
            【独立的时钟频率】
            在AMD介绍原始的Phenom 处理器的时候,AMD许诺会由于每个核新独立的频率而更节能。你可以Core 0 跑在2.6GHz, 而 Core 3 在1.6GHz 跑个轻负载。 实际运用上,我们感觉Phenom的异步时钟其实是个负担,因为CPU和OS的调度的联合作用,有时候花很长时间才能把频率提升到需要的速度。这个结果至少在当时导致了有核心来回切换的负载会有显著的性能损失。这个问题实在太严重,最后AMD放弃了在 Phenom II 使用异步频率调节。
            这个特性在推土机中又回来了。这一次AMD相信 不会出问题了。 第一个重大改变是Win7,核心挂起( core parking) 能够防止某些线程在可用核心间无规则的切换。第二是因为推土机提升/降低频率的速度远远快过原始Phenom芯片。 也可以把这个归功于 Turbo Core 这个主要特性带来的福利。
            推土机异步的时钟频率在我们的测试中还没有带来任何问题。但是我也不能鲁莽的说这是个优点,至少在我们对这个特性有更多的实际经验之前不行。


            22楼2014-03-27 12:10
            回复
              【推土机(深)管线带来的影响】
              一个新的分支预测构架,和一个未知的,但是大概更深的流水管线? 我很想知道AMD为了提升推土机频率背了多大的包袱。我启用了值得信赖的N-皇后测试(已经被AIDA64集成了)。
              N-皇后问题很简单, 就是在NxN棋盘上如何放N个皇后让它们互相攻击不到。求解这个问题是及其分支密集型的,所是一个对深管线影响度很好的测试。
              AIDA64 带的 N-皇后求解器算法是重度多线程的。但是我想先看看单核心的表现。所以我屏蔽了推土机其他的核心,只留一个。 同时我也比较了稳定频率和 Turbo频率下的速度:

              遗憾的是结果不那么美妙。 即使打开了 turbo, 3.6GHz 的推土机还要再提高 25% 才能赶上同频的 Phenom II X4. 甚至 3.3GHz 的 Phenom II X6 也比推土机做的更好。由于不知道AIDA64做了什么优化,我就多不关注Intel的结果了,,但是Intel关注分支预测的性能是广为人知的。
              如果我们对N-皇后测试开启所有的核心,上面性能上的问题随着线程数增多就轻易被掩盖了。

              但是很明显的是,对于需要频繁分支的单线程或者轻微多线程操作,推土机会拼的很艰难( be in for a fight.)


              24楼2014-03-27 14:48
              回复
                在Anandtech上发现了名为
                The Bulldozer Aftermath: Delving Even Deeper
                的文章
                .
                文章主要介绍了推土机架构在服务器方面的特性
                .
                下面楼主借助机翻来搬运一下
                ---Powered by GeForce GTX610MX Ti Boost Ultra+ Ghz Edition


                来自Android客户端32楼2014-03-28 09:07
                收起回复
                  【前端:分支预测】
                  推土机的分支预测单元已经在很多文章中被描述。 多数业内人士都认为推土机的分支预测器是一个K10的多层次的改进版。 一个更好的预测可能会降低分支预测错误率5%,但这不是故事的结束。 下面是各种CPU架构的分支预测功能的简要总结。

                  ---AU一生黑,A卡一生推。
                  --- あれがデネブ、アルタイル、ベガ,君は指さす夏の大三角。


                  来自Android客户端35楼2014-03-28 14:22
                  回复
                    AG0和AG1执行单元减少了CALL和LEA指令的延迟,但单位时钟周期内,推土机模块内每个整数核心最大吞吐量仅为两条整数指令。 只有当一个融合分支进入EX0,另一个整数指令进入EX1时,吞吐量才会略高于K10。
                    .
                    所以,推土机的整数核心没周期能执行的整数指令比K10少(2vs3)。然而 这并不意味着推土机整数核心的速度就要慢三分之一。 推土机的整数核心更小,也更灵活。农企取消了每通道专用的8Enrty调度器,用一个更大的40Entry调度器取代了它。 这意味着,推土机更擅长从低IPC(每周期指令数)的代码中提取ILP(指令级并行)。【众多测试都证明了农企推土机,打桩机以及压路机架构的低IPC】
                    .
                    一些整数密集型应用中,如果推土机最大整数吞吐量会慢下来的情况属实,整个程序就会慢下来。 这是一种“看情况”的回答。让我们来澄清一下:我们到底说的是什么样的应用程序。


                    来自Android客户端41楼2014-03-29 19:52
                    回复
                      我们认为,所有这些应用都高度线程化而且有很好的扩展性。 尽管有高出33%的整数核心数,皓龙6276不能在OLAP,虚拟化和渲染基准中胜过Magny-Cours。 但是,推土机架构通过SAP和HPC应用程序约20%的性能提升证明了其承诺。
                      .
                      是什么让Bulldozer核心无法在OLAP基准和SAP中取胜? 我们现在对SAP以及OLAP基准进行一些有趣的细节分析,这样我们就可以更加深♂入。


                      来自Android客户端43楼2014-03-29 20:26
                      回复
                        【 SAP S&D profiled】
                        在SAP S&D 2-Tier基准测试一直是我的最爱之一。 这可能是由供应商完成的服务器基准测试中最现实的标杆。 这是一个完全成熟的基于重关系性数据库的应用程序。 而且不要忘记,SAP是一个最成功的软件公司,是企业资源规划领域无可争议的市场领导者。


                        来自Android客户端44楼2014-03-29 20:34
                        回复
                          【SPEC2006整数测试】
                          E5是单位主频和单核心效率最高的。
                          让我们比较一下皓龙6276 (2.3GHz,拥有16核心的推土机)和皓龙6176的测试(2.3GHz的12核Magny-Cours)
                          从此可以看出推土机和K10的模式完全不同。
                          Libquantum,OMNETPP和MCF表现出高于核心数增长(33%)的性能提升。 这些基准表明,在某些情况下,推土机的IPC甚至高于K10。



                          来自Android客户端46楼2014-03-29 21:17
                          回复
                            我们还注意到,推土机有它的前身相比一些严重的缺点,在Perlbench,游戏AI(gobmk),国际象棋(Sjeng),和X264编码分中性能下降。 虽然一个新的架构未能在每一个测试中击败老架构的情况并不少见,但是增加了33%的核心数还不能克服IPC减少,并不是一个好的迹象。 如果我们试着去了解什么使这些软件与众不同,卡住了推土机。这反过来又可以帮助我们理解,是否小的调整可以帮助未来的Opteron处理器。


                            来自Android客户端47楼2014-03-29 21:24
                            回复
                              【放大SPEC2006结果:好的方面】
                              我们筛选出了推土机相对于K10提升在30%以上的测试。要记住推土机要在相同功耗下增加33%的核心数,同时把IPC保持在K10的95%左右。
                              其余的性能增长本应该由主频提升带来,但是实际上主频提升没能实现。【GF工艺问题】
                              .
                              为了研究架构,我们把主频都调到一致。


                              来自Android客户端53楼2014-03-30 09:53
                              回复