amd吧 关注:783,737贴子:17,975,183

AMD Ryzen: 严谨技术解析

取消只看楼主收藏回复

1楼防抽。


1楼2017-03-05 18:45回复
    发不出去说有敏感词....


    3楼2017-03-05 18:46
    收起回复
      SMU – 幕后的掌控者
      由于集成了系统管理单元SMU,在超频时Ryzen和之前的架构都很不一样。
      在默频时,Ryzen的功耗全由SMU控制,SMU将发挥它的全部功能,掌管一切。SMU的管理功能包括功耗、电流、温度限制器,电压控制器以及功耗门限等。
      如果你不超频,可以无视这些玩意。
      为了超频,AMD的工程师还给出了一个特别的模式:“超频模式”,超频模式下会禁用所有的限制器,电压控制器以及保护措施(除了CPU温度保护)。
      如果你在默认的P0状态基础上超频,“超频模式”就会自动启用。SMU是通过向主板的诊断显示(80)端口发送“0C”来判断超频模式的。
      在Zeppelin上,想了解CPU的不同频率状态(PStates)、电压,特别是实际等效电压是非常困难的,远比之前的架构困难得多。与之前的推土机家族(Family 15h)不同,Zeppelin的加速频率状态(Turbo&XFR)是完全不可见的,这也是他们为什么被称为“Shadow PStates”的原因吧。这意味着Zeppelin的PState不再以标准MSR寄存器定义,也不能被用户修改甚至看到。用户能够Shadow PStates生效的唯一方法,就是看到即时频率/电压的上升。
      在不超频的状态下,SMU会自动通过电压控制器控制电压。
      比如P0状态下,可能会给1.37500V电压,实际等效电压大概在1.26250V,或者稍高。这不是个bug,而是CPU的正常工作状态。基本上来说,MSR中定义的电压只是上限而已,而SMU会在这个值的基础上自动降压。我们测试的样品上,P0(3.6GHz)的调整值为-120mV,P1(3.2GHz)为-144mV。
      当“超频模式”激活时,SMU会禁用电压控制器,其他的很多功能也会被禁用。这会造成一个假象:超频后功耗猛增。在技术上来说这是正确的,主要原因是关闭了SMU提供的自动降压预设,导致CPU电压上升50-150mV。也就是说,开始超频的时候电压已经偏高。在这时候不要立马加压,而是先尝试提升频率,在不稳定需要加压的时候再加压。

      同频3.6GHz功耗比较,超频模式下比默认自动电压下功耗高了18.74%

      关闭自动电压,设置同样的电压,功耗相同
      “超频模式”的另一个缺点就是会关闭加速和XFR。也就是说如果你全核超不到默认的单核XFR频率,单线程性能会下降。


      4楼2017-03-05 18:46
      收起回复
        XFR
        XFR实际上是对标准CPB加速算法的拓展或加强。在理想状态下,CPU能够提频到原有的加速频率之上。XFR也有单核和多核的频率上限。
        比如1800X,全核频率3.6GHz,单核频率4.0GHz,在全核+XFR下能达到3.7GHz,单核+XFR则是4.1GHz。
        XFR的提升频率在不同产品上可能不同。但在1800X上只有100MHz。理论上任何时候都能启用XFR,但在部分情况下(Linpack/P95)下频率通常会降到3.6/4.0GHz。


        5楼2017-03-05 18:46
        收起回复
          外频
          AM4上超外频是可能的,但并不推荐。因为外频和其他接口挂钩,比如PCIe。而且不像Intel,AM4没有异步模式,不能在调外频的同时保持PCIe频率不变。PCIE3.0通常能到107MHz,再往上需要调到PCIE2.0或1.0。
          超外频会带来很多稳定性问题。


          6楼2017-03-05 18:47
          收起回复
            内部电压调整(dLDO)
            Zeppelin是AMD首次集成电压调节模块。与Haswell/Broadwell上完全集成的电压调节模块(FIVR)不同,AMD的调节器并非基于超高频开关电路,而是超高效数字低压差稳压器(dLDO)。大部分区块(核心/缓存/Data Fabric)都有自己的dLDO,能够分别调整。
            当然普通用户可以完全无视。因为零售版Ryzen上大部分的dLDO都是永远处于by-pass模式,实际的调节器处于关闭状态,电压调节全部放在主板上。


            7楼2017-03-05 18:47
            收起回复
              CCX之间的频率关系
              在内部频率关系上,Zeppelin与之前的架构也很不同。核心、L1、L2的速度永远都是绑定,这和以前一样。但这次的L3也和核心运行在同样频率(全速)。由于L3被整个CCX内的核心所共享,因此L3的频率和该CCX内最高的核心频率一致。正常情况下,同一个CCX内的所有核心都运行在同样频率。
              所有CCX的结构给了超频者一些限制。CCX内的4个核心必须运行在同频(处于同样的PState),当然也可以改变每个核心的频率,让他们处于不同的PState之下,但很多情况下结果会和预想的不同。由于L3的频率和该CCX内最高的核心频率相同,如果同一CCX内的核心不是同频,那么请求和实际运行频率就会有差距。
              等效CPU倍频与CPUFID 和 CPUDFSId有关。CPUFID是一个范围在16-255的整数值,而CPUDFSId是1-6之间的浮点值。等效倍频=((CPUFID / (CPUDFSId / 8)) / 4)
              如果同一CCX内的核心不是同频,等效倍频的计算就更加困难。如果所有核心的PStates都有同样的CPUDFSId值,等效倍频=目标核心CPUFID / (1 + ((最高频率核心CPUFID - 目标核心CPUFID) / 最高频率核心CPUFID)),比如最高频率核心的倍频是36.0x(CPUFID = 144 , CPUDFSId = 1),其他目标核心的倍频为32.0x(CPUFID = 128 , CPUDFSId = 1),等效倍频=128 / (1 + ((144 - 128) / 144)) = 115.2 (28.8x)。
              启用了CCX中,开启的核心数必须相同,可能的配置为: 1 (1:0), 2 (2:0 or 1:1), 3 (3:0), 4 (4:0或2:2), 6 (3:3), 8 (4:4)。


              8楼2017-03-05 18:47
              收起回复
                Data Fabric
                Zeppelin的北桥,官方称为Data Fabric(DF)。DF频率和内存控制器挂钩,比例为1:2【比如DDR4-2667 MEMCLK(内存频率) = 1333MHz DFICLK(DF频率)】。这意味着内存频率直接会影响DF的性能。
                在某些情况下,Zeppelin的性能可能会随内存频率提升而大幅提升。
                但实际上这不是通过提升内存频率带来的,而是同时提高的DF频率带来了性能提升。
                零售版Zeppelin官方支持的最高内存频率为DDR4 2667(2x 1R内存模组)或2400MHz(2x 2R内存模组),但2933、3200MHz的频率也可以在部分主板上达成。


                9楼2017-03-05 18:47
                收起回复
                  超频性能
                  高端Ryzen的超频空间非常小。因为默频就已经很高,同时本来就是高密度的设计,Zeppelin用的还是低功耗制程(三星 14nm LPP)。

                  可以从曲线中看到,Zeppelin的频率在3.3GHz之前是完美的线性增长(每100MHz需要25mV)。首次偏差出现在3.3GHz,第二个也是最后一次偏差出现在3.5GHz。在这之后电压已经不是线性,需要的电压大幅上升。
                  所以最理想的频率范围在2.1-3.3GHz,再往上每100MHz需要的电压会明显增加。
                  这意味着3.8GHz+的频率会带来功耗和温度的大幅上升。
                  作为对比,之前AMD两代桌面版的设计:
                  - Orochi Rev. C,也就是Vishera打桩机,32nm SHP SOI - (第一个关键点出现在4.4GHz,第二个在4.7GHz)
                  - Kaveri / Godavari,28nm “SHP” HPP Planar - (第一个关键点出现在4.3GHz,第二个在4.5GHz)
                  这个曲线和Ryzen预设的PState电压/频率基本吻合。
                  在高端型号上,比如1800X,3.6GHz默频实际(等效)电压范围在1.200-1.300V,而加速PState下(XFR,4.1GHz)下频率可以高至1.475V。
                  测试样品上实际的P0 3.6GHz默频电压为~1.25000V,而单核XFR 4.1GHz等效电压达到了1.47500V。
                  AMD还没给出最高的安全电压【VDDCR_CPU - CCX电压和VDDCR_SOC - 北桥/SoC电压】,但估计高于1.47500V的电压不会适合超频和长期使用。
                  高端型号Ryzen的超频是把双刃剑。因为根据加速和XFR的工作原理,可能会降低单线程性能。而且超频空间已经很小。


                  10楼2017-03-05 18:47
                  收起回复
                    功耗




                    11楼2017-03-05 18:49
                    收起回复
                      峰值功耗使用Firestarter FMA/AVX,功耗比日常的多核满载使用要高30%左右。
                      Note:当前的Prime95(28.10)并不能很好地对Ryzen进行压力测试,测得的功耗会更低。使用Firestarter和Linpack的功耗会显著增加。
                      下面使用的是MCRT,Monte Carlo raytracer,来模拟真实应用。


                      13楼2017-03-05 18:50
                      回复

                        (告诉我哪个是敏感词....)


                        14楼2017-03-05 18:51
                        收起回复
                          彩蛋
                          Zeppelin上采用了非常高级的功耗管理。和Carrizo/BristolRidge相同,Zeppelin也能够支持cTDP。虽然零售版的Ryzen官方不支持cTDP,实际上只是在迷惑人们。

                          在30W下,CinebenchR15能够达到850cb。这个分数意味着什么,可想而知。
                          只要在理想频率范围内,Zeppelin可以达到闻所未闻、怪物级别的效率。
                          【可以期待一下Q2的Naples,以及H2到来的RavenRidge。】


                          15楼2017-03-05 18:51
                          收起回复
                            CCX互连
                            如果你读过Ryzen的架构解析,你就知道:Ryzen的L3不是真正的general-purpose cache通用缓存,而是victim cache。
                            Victim Cache是特殊的一类缓存。如果从更低一级缓存上有被驱逐的数据,它将被放进victim cache。然后和通常缓存一样工作,直到有数据需要从中提取,此时victim cache中的数据将与更低一级缓存中的数据进行交换。
                            Haswell的变种Crystal Well/Broadwell上搭载的L4就是victim cache,被CPU和iGPU共享。
                            Crystal Well的L4结构过为复杂,因此后来Skylake上换回了普通的缓存。

                            法国媒体的测试结果22GB/s并不是AMD给出的官方数字,只是单方面的猜测。
                            大多数媒体只看到了22GB/s,而并没有看到这是个假设
                            更没有看到假设前提:尚不确定Data Fabric提供的带宽是怎样分配,L3和内存的优先级如何。
                            一切都不清楚,没有官方解释的情况下就妄加猜测或者说肯定绝对是不对的。
                            并且当前版本AIDA64测得的数据有问题,AIDA64表示将在后来的版本中进行修复(刚更新的版本也没有修复)。
                            而在上面已经说到,DF频率为RAM的一半,提升内存频率也会提高DF的带宽。
                            假使最差的情况,带宽真的只有22GB/s,会如何呢?
                            L3是CCX的victim cache,和Intel不同,不要拿来随便比较你是架构师吗。
                            那么你需要多少带宽呢?正好就是72bit ECC DDR4的带宽。2400MHz下22GB/s的带宽已经足够。
                            问题主要会出现在:
                            1.某个线程需要8MB以上的L3时。比如如果CCX0中某个线程需要12MB的L3,但另一半4MB L3位于CCX1中。同时发送请求,但需要等待CCX1中的数据。
                            2.Windows经常切换线程负载,不管数据在缓存的哪个位置。对于Intel和AMD的老产品没问题,因为都是共享L3。
                            这些问题,虽然有架构本身的限制,但可以通过软件优化在很大程度上解决。比如AMD和微软正在开发补丁解决线程调度问题。这能够给游戏带来很大提升。
                            在Crystal Well上的L4,Linux的内核+驱动更新后,也提升了一倍性能。软件和系统等优化占有很大地位。




                            16楼2017-03-05 18:51
                            收起回复
                              原题地址:http://www.mykancolle.com/?post=1406


                              17楼2017-03-05 18:52
                              回复