◆RMMT 1.1(グラフ41~42)

RMMT 1.1
Rightmark.org
http://cpu.rightmark.org/products/rmma.shtml

GPU編は終わって、再びCPU編。まずはRMMTでメモリ帯域を確認してみた。

  • グラフ41

まずRead(グラフ41)であるが、意外にもRyzen 4000Gの方がRyzen 3000Xよりもわずかながら帯域が上、というのはなかなかに面白い。ただ同じシリコンでありながらもRyzen 3 Pro 4350はあまり芳しくないのは、やはりCCXが1個しかないためかと思う。

  • グラフ42

ただWrite(グラフ42)では、Ryzen 3000X系2製品の方が圧倒している。このあたりを勘案すると

  • ReadではInfinityFabricとMemory Controllerが同じダイ上にあり、Latencyが少ないRyzen 4000G系が有利
  • Writeではそもそも帯域が低い&アクセスのLatencyが多いため、ReadにおけるRyzen 3000X系の不利な要素が遮蔽される。その一方でGPUを内蔵しているためフレームバッファの画面出力のために、定期的にMemoryへのReadアクセスが挟まるRyzen 4000G系が不利

という事ではないかと思うが、まぁ結論はもう少し後段に持ち越したい。

◆Sandra 20/20 2020.3049(グラフ43~78)

Sandra 20/20 2020.3049
SiSoftware
https://www.sisoftware.co.uk/

この原稿を書いている最中に最新版(Sandra 20/20 Release 8t:2020.3061)がリリースされたが、テストには間に合わなかったので一つ前のRelease 7:2020.3049でのテストである。今回はいくつかのテストは省略させていただいた。もっともダイジェストというにはちょっとテスト数が多いが。

  • グラフ43

  • グラフ44

  • グラフ45

  • グラフ46

まずDhrystone(グラフ43・44)/Whetstone(グラフ45・46)。ちょっと確認のために改めてスペックを並べておくと

Ryzen 7 Pro 4750G : 3.6GHz/4.4GHz 8Core/16Thread
Ryzen 7 3700X : 3.6GHz/4.4GHz 8Core/16Thread
Ryzen 5 Pro 4650G : 3.7GHz/4.2GHz 6Core/12Thread
Ryzen 5 3600X : 3.8GHz/4.4GHz 6Core/12Thread
Ryzen 5 3400G : 3.7GHz/4.2GHz 4Core/8Thread
Ryzen 3 Pro 4350G : 3.8GHz/4.0GHz 4Core/8Thread
Ryzen 3 3200G : 3.6GHz/4.0GHz 4Core/4Thread

ということになり、理論上Ryzen 7 Pro 4750GとRyzen 7 3700Xはほぼ同じスコア、Ryzen 5 Pro 4650GはRyzen 5 3600Xよりちょっとだけ低め、Ryzen 3 Pro 4350GはRyzen 5 3400Gと大体同程度、というあたりに収束する筈である。これを念頭にDhrystoneの数字を眺めてみると、明らかにRyzen 7 Pro 4750Gの性能が良い。それもMTだけでなく1Tでも良い数字が出ている。

  • グラフ47

  • グラフ48

  • グラフ49

  • グラフ50

  • グラフ51

  • グラフ52

  • グラフ53

もっとも全部が全部こう、という訳ではない。グラフ47・48はAESのEncryption/Decryptionだが、ここではRyzen 3000X系が良い数字をMT/1T共に出している。Hasing(グラフ4 9・50)はちょっと面白く、傾向としてはDhrystone/Whetstoneに近いのだが、SHA2-512でRyzen 3000G系の落ち込みが極端である。要するにZen→Zen2でSHA2-512への対応が進み、ほぼ倍の処理性能(グラフ50が判りやすい)になった事が見て取れる。グラフ51~53はFinancial系のベンチマークだが、こちらもDhrystone/Whetstoneに似た傾向になっている。

  • グラフ54

  • グラフ55

  • グラフ56

  • グラフ57

数字が荒れ狂ってる感じなのがAI/ML Benchmark(グラフ54~57)であるが、一応ここはAESのEncryption/Decryptionに近い傾向の結果になっている(CNN/RNN、Inference/Trainingを問わない)。

  • グラフ58

  • グラフ59

グラフ58・59はImage Processing(項目によって結果の桁が大きく変わるので、これのみ横軸が対数軸なのに注意)の結果だが、こちらもDhrystone/Whetstone系に似た傾向になっている。例外はDiffusionで、これのみAES Encryption/Decryptionに近い傾向であり、しかも結果が他より一桁小さい。

さてここまでで簡単に振り返ってみると、Ryzen 4000G系は「大量のメモリアクセスが発生する」場合にはRyzen 3000X系に及ばない(この場合は、大量のL3キャッシュを搭載し、またGPUによるフレームバッファアクセスでメモリアクセスが阻害されないRyzen 3000X系が有利)。AESのEncryption/DecryptionとかAI/ML、あるいはImage ProcessingのDiffusionがこれにあたる。AESの場合、処理負荷そのものは既に小さい(AES-NIのお陰で、非常に高いスループットが出る)結果、むしろボトルネックはメモリアクセスになる。これがHasingになると、処理が重い事(Hasing用命令はx86に含まれていない)もあって、相対的にメモリアクセスの比重が落ちる。AI/MLもそうで、ネットワークを構成するために大量の重みデータをメモリ中に保持し、ここにデータを流してゆく関係で猛烈なメモリアクセスが発生する。Diffusionは256点のRandomiseを実施する形で行われており、これもキャッシュでは足りずにメモリアクセスが発生する関係で、Diffusionの結果のみ他のImage Filteringよりも一桁数字が小さくなる。

逆にL2/L3で収まる範囲の処理に関して言えば、Ryzen 4000G系が俄然有利になる。L3容量こそ小さいものの、Ryzen 3000X系ではInfinityFabricのコントローラが別のダイに置かれているため、同一のダイ上の2つのCCXを跨いだ通信であってもアクセスが猛烈に遅くなるという問題があるが、Ryzen 4000G系では同じダイの上にあるためにそれほど遅くならない。すると、むしろ性能が上がりやすいという訳だ。Ryzen 7 3700XよりRyzen 7 Pro 4750Gのスコアが上、というケース(特にMT)は、これが要因ではないかと思われる。

  • グラフ60

  • グラフ61

ということで次にこの仮説を確認してみたい。グラフ60・61はInter-Core EfficiencyのOverallである。グラフ60がBest Case、61がWorst Caseでのスコアである。BestでもWorstでもLatencyの平均値そのものは大差ないのが判るが、問題はBandwidthの方で、Ryzen 3000XシリーズがBestとWorstで10倍以上の差があるのに対し、Ryzen 4000G系(CCXが一つしかないRyzen R3 4350Gはちょっと措いておき、Ryzen R5 4650GとRyzen R7 4750G)は6倍程度の差に留まっている、というのはまさにCCXを跨いでのスループットの差ではないかと思われる。

  • グラフ62

  • グラフ63

グラフ62・63がそのBandwidthであるが、注目すべきは4KB~1MBあたりの帯域である。Best Caseの場合、Ryzen 3000XシリーズとRyzen Pro 4000Gシリーズの間に大きな差はみられない(まぁこれは動作周波数が一緒なら当然である)が、Worst CaseではRyzen 3000Xシリーズの帯域はRyzen Pro 4000Gシリーズの半分以下に落ちている。Ryzen Pro 4000Gシリーズが有利なのは、こうした使い方が多いアプリケーションの場合である。

  • グラフ64

  • グラフ65

ついでにLatencyも確認しておく。グラフ64・65はそれであるが、例えばグラフ65を例にとると10ns~15nsのピークは、同一コア内の異なるThread間でのLatencyで、20~30nsが同一CCX内の異なるコア間、40~50nsは異なるCCX間(Ryzen 3000Gシリーズのみ)、60~80nsが異なるCCX間(Ryzen 3000X/Ryzen Pro 4000Gシリーズ)ということになる。一番注目すべきは異なるCCX間の通信で、Ryzen 5 Pro 4650Gが68nsあたり、Ryzen 7 Pro 4750Gが60nsあたりが中心値なのに対し、Ryzen 5 3600Xは73nsあたり、Ryzen 7 3700Xは77nsあたりが中心値であり、5~15nsほど余分にLatencyが掛かっている事が判る。これは、InfinityFabricのコントローラとメモリコントローラを別ダイに置いたことの代償である。もっともその代わりRyzenとEPYCを同一ダイで構成できるし、Ryzen 9とかRyzen Threadripperなどを簡単に構成できるというメリットもあるので、一概に悪いとも言えない。というか、この程度のペナルティで済むなら良い選択としても良いのかもしれないが、ただ8コア以下のシステムであれば、やはりRyzen 4000Gの構成がベストである事そのものは事実と言えよう。

  • グラフ66

  • グラフ67

  • グラフ68

  • グラフ69

ではそのメモリ回りは? も確認しておこう。グラフ66・67がStream、及びグラフ68・69の256MB~4GBのスコアの平均値であるが、MT(グラフ66)ではRyzen 7 Pro 4750Gも健闘するものの、Ryzen 3000X系がやはり有利。1Tではこれがより顕著である。Cache/Memory Bandwidth(グラフ68・69)では、MT/1T共にほぼ動作周波数そのままという感じで、後はキャッシュ容量の関係で8~16MBあたりのスコアに若干の差がみられるといったところ。キャッシュアクセスの範囲で言えばRyzen 3000XシリーズとRyzen Pro 4000Gシリーズの間には差が無く、後はメモリアクセスの差ということになる。

  • グラフ70

  • グラフ71

  • グラフ72

  • グラフ73

  • グラフ74

  • グラフ75

そのLatencyだが、Data Cache/Memoryがグラフ70~72、Inst Cache/Memoryが73~75である。まずData Cacheだが、Sequential(グラフ70)を見ると、Ryzen Pro 4000GシリーズはL2が1cycle余分にかかっているようだ。また、In-Page Random(グラフ71)やFull Random(グラフ72)を見ると、Memory Access時のLatencyがRyzen 3000Xシリーズよりもやや大きめであるが、これはUMA方式の宿命ともいえる。

一方のInst Cache/Memoryの方だが、まずSequential(グラフ73)を見るとなぜかL1の範囲で色々暴れているのが不思議である。またRyzen Pro 4000Gシリーズは8MB L3なので、このあたりからメモリアクセスになる訳だが、そのLatencyはRyzen 3000Xシリーズよりやや大きい。このメモリアクセスのLatencyが大きいという傾向はIn-Page Random(グラフ74)やFull Random(グラフ75)でも同じである。これは要するに、Ryzen 4000Gに統合されたメモリコントローラも優秀ではあるが、UMAで常にMemory Accessが発生することもあってか、ややLatencyは大きい。対してRyzen 3000Xのメモリコントローラは別チップ構成にも関わらず、低いLatencyを保っており、より優秀としても良いかもしれない。別チップにも関わらず、致命的に性能が悪化しない秘訣はこのあたりにありそうだ。

  • グラフ76

最後にPCI Express周りを若干。まずグラフ76は、内蔵GPUに対してのMemory Bandwidthである。最初のInternal DX10/DX11は、GPUコアからメモリアクセスを行った場合の帯域で、これはほぼMemoryのBandwidthそのままになっている。次がH→D(Host to Device)とD→H(Device to Host)で、これはPCI ExpressのI/F経由でCPUからGPU、あるいはGPUからCPUにデータ転送を行った場合の帯域である。

さて、Photo10はRyzen 7 Pro 4750G上でGPU-Zを掛けた結果であるが、I/FはPCI Express Gen3×16と示される。なので理論帯域は最大16GB/secとなる。なぜかRyzen 7 Pro 4750GでDirectX 11の場合にはこれを超える帯域が出てしまっているが、全般的にはこの16GB/secに近い(Ryzen 3000GシリーズでDX10だと10GB/secそこそこだが)数字が出ており、これはスペック通りであとはメモリ帯域次第ということになる。

  • Photo10: Nameが"AMD Radeon Graphics"しか出てこないのでちょっと判りにくい。

さて、ではRyzen Pro 4000Gシリーズの外部I/Fはどういう構成だろうか? 試しにPCI Express Gen4×16構成のRadeon RX 5700 XTをPCIeスロットに装着して3DMarkのPCI Express feature testを実施するとこんな結果になる(Photo11)。

  • Photo11: これはあくまでもカードのスペックを示しているだけで、実際のI/Fがどうなっているかまでは見えない。

そこで、このRadeon RX 5700 XTをPCIeスロットに装着した状態で、Video Memory Bandwidthの測定を行ったのがグラフ77である。

  • グラフ77

上2つはRadeon RX 5700XTを装着した状態であるが、

  • Ryzen 3000Xシリーズであれば、Host→Deviceで23GB/sec前後の帯域がある。これはPCIe Gen3×16を超えており、なのでPCIe Gen4×16で接続されている事が確認できる。
  • Ryzen 3000Gシリーズは6GB/sec程度であり、これは外部I/FがPCIe Gen3×8というRyzen 3000Gシリーズのスペックに合致する。
  • Ryzen Pro 4000Gシリーズは12GB/sec程度であり、これはPCIe Gen3×16、ないしPCIe Gen4×8のどちらかである。

と判る。ただこのままだとPCIe Gen3×16とPCIe Gen4×8のどっちか、が判断できない。そこでRyzen 7 Pro 4750G(+Ryzen 3000Xシリーズ)にZOTAC GAMING GeForce GTX 1650 SUPERを組み合わせたのが下の2つである。こちらでもやはり12GB/sec内外である。もしPCIe Gen4×8構成だとすれば、自動的にPCIe Gen3×8に落ちて、帯域は6GB/sec程度になる筈であり、ここから外部I/FはPCIe Gen3×16で構成されていることが確認できた。