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

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

只看楼主收藏回复

前言:推土机架构是农企啊呸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回复


    IP属地:广东来自Android客户端2楼2014-03-25 20:10
    收起回复


      IP属地:四川来自Android客户端3楼2014-03-26 09:42
      回复
        马文是女孩


        IP属地:广西来自Android客户端4楼2014-03-26 10:25
        收起回复
          后续呢


          IP属地:福建来自手机贴吧5楼2014-03-26 21:17
          收起回复


            IP属地:新疆来自Android客户端6楼2014-03-27 07:22
            收起回复
              【一个分离的分支预测器】
              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
                      回复
                        貌似很吊的样子


                        IP属地:广东23楼2014-03-27 12:45
                        回复
                          【推土机(深)管线带来的影响】
                          一个新的分支预测构架,和一个未知的,但是大概更深的流水管线? 我很想知道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
                          回复
                            所以首先GF要给力喽?


                            IP属地:福建来自手机贴吧30楼2014-03-27 22:36
                            收起回复
                              留名


                              IP属地:湖北来自Android客户端31楼2014-03-28 07:51
                              回复