◆RMMT 1.1(グラフ67~68)
RMMT 1.1
Rightmark.org
http://cpu.rightmark.org/products/rmma.shtml
ここからもう少しCPU性能比較を行うが、その前にRMMTでメモリ帯域を確認してみた。ちなみに以前どこかで説明したが、現在はThreadあたり40MBのMemoryをAccessする構成で行っている。なので、2 ThreadまではL3でカバーされるが、その先はMemory Accessが実際に発生する事になる。
ということでまずグラフ67がReadであるが、2 Thread時には実に128GB/secもの帯域を利用できる事が判る。流石にThread数が増えると96MB程度のL3ではカバーしきれないからだいぶ帯域が落ちるが、それでも8Thread時にRyzen 7 5800Xが58GB/secそこそこなのに、96MB L3のRyzen 7 5800X3Dは75.5GB/secと5割程帯域が広くなっているのは、メモリアクセスを煩雑に行うアプリケーションでのL3の効用が大きい事を如実に示している。
これはWrite(グラフ68)も同じで、1 Threadで71.1GB/sec、2 Threadで104.7GB/secと普通にあり得ない帯域を利用できる状況になっている。こちらもThread数が増えるとそれなりに低下するが、それでも8 Threadで19.5GB/sec→25.9GB/secとそれなりに性能向上の効果は大きい。これをうまく利用できれば、相当性能が上がりそうな感じはあるが、逆に言えばこれに向けたアプリケーションの最適化は必須ともいえる。そうした配慮の無いCineBenchとかTMPGEnc、POV-Rayなどであまり性能向上が見られないのは、ある意味当然なのだろう。
◆Sandra 20/21 2021.11.31.81 Tech Support(グラフ69~106)
Sandra 20/21 2021.11.31.49 Tech Support
SiSoftware
https://www.sisoftware.co.uk/
では次にSandraの結果を見てみたいと思う。まずArithmetic BenchmarkということでDhrystone/Whetstone(グラフ69~72)。MT+MC(全Thread利用)だと当然コア数の多いCore i9-12900Kが高速なのは当然で、グラフ69/71は別に不思議でも何でもない。一方で1Tにすると俄然AMD系が有利ではある。もっとも.NETだとそれほどでもないのだが。あと、Ryzen 7 5800XとRyzen 7 5800X3Dはほぼ動作周波数の比という感じで、これも妥当な結果だろう。
グラフ73~76はCPU Multimedia(要するにマンデルブロ図形の計算)である。この4つのグラフでは、結果の桁が2桁異なるので、横軸は対数表示とさせていただいた。なのでグラフの長さではなく、それぞれのグラフに示した数字で判断していただきたい。それはともかくとして、傾向そのものはDhrystone/Whetstoneとまるで変わらず、である。
グラフ77~80はProcessor CryptographyでAES-128/256のEncryption/DecryptionとHash処理である。やはりMT+MCだとCore i9-12900Kが高速だが、1Tにするとそうでもないのは先ほどまでと同じである。正直この処理ではメモリ性能がボトルネックになっているかと思ったのだが、Ryzen 7 5800X3Dの結果を見る限りはまだ命令ユニットの方(つまりAES命令の実行)の方がボトルネックになっている模様だ。これはHashingも同じで、特にSHA2-512とかではRyzen 7 5800X3Dが有利かと思いきや、そうでもなかったのはちょっと意外であった。
グラフ81~83はFinancial Analyticsだが、ここも傾向は似ている。強いて言えば、Black-ScholesやMonte CarloではMC+MTだとCore i9-12900Kが有利なのに、Binomialだとそうでもないという事だろうか。ただRyzen 7 5800XとRyzen 7 5800X3Dの傾向は変わらないままである。
少し変化が見えるのがScientific Analysis(グラフ84~86)。GEMM(グラフ84)ではRyzen 7 5800X3Dの性能がかなり伸びており、SGEMMではCore i9-12900Kに肉薄、DGEMMでは追い抜いている。またグラフ85のFFTでも、Single/Double共にMT+MCだとRyzen 7 5800Xよりもやや低い処理性能が、1Tだと僅かに勝っている辺りは、つまりMT+MCだとL3が溢れてしまうということだろう。FFTの場合はバタフライ演算で行列の転置が発生するから、相当考えないとここで猛烈なメモリアクセス(それもランダムアクセス)が発生する。なので96MBものL3が効果的というのは納得できる話である。グラフ86のN-Bodyでは、もうそもそもL3に収まりきらないものと思われる。
次がProcessor Neural Networks(AI/ML)(グラフ87~90)だが、これは面白い結果になった。まずCNNのInference(グラフ87)で、Single MC+MTはそれほど効果が無いのだが、Double MC+MTにするといきなり処理性能がRyzen 7 5800X比で3倍近くに跳ね上がるのが判る。もっと極端なのがCNN Training(グラフ88)で、Single MC+MTではほぼCore i9-12900K並み、Double MC+MTではCore i9-12900Kの倍以上、Ryzen 7 5800X比では10倍近くになる。CNNの場合はとにかくメモリアクセスが無茶苦茶多い(Trainingはこれがさらに極端)事を考えると、96MB L3の威力が判ろうというものだ。この傾向はRNN(グラフ89・90)も同じで、つまりGamingでなくてもアプリケーションを選べば96MB L3は恐ろしく有力な性能向上手段であることがここから伺える。
もっとも実際には、こうした効果が殆ど得られない事の方が多い。次のImage Processing(グラフ91・92)もそれである。こちらも結果が2桁ばらける関係で、横軸は対数軸とさせていただいた。こちらもメモリ利用量が多そうな作業であるが、MT+MC(グラフ91)で多少なりともRyzen 7 5800Xより性能が向上したのはDiffusionのみ。それも1T(グラフ92)では効果が見えないあたり、「1Tだと元々の32MB L3で収まる程度のワークロードだが、MT+MCだと溢れるものの、96MB L3なら収まる」という、割と微妙な負荷だったものと推測できる。
さて、ここからはキャッシュ及びメモリサブシステム周りを。まずグラフ93・94がInter-Thread Latencyで、こちらはBest/Worst共にそれほど数字は変わらない。意外に大きいのがCore i9-12900Kというのはともかくとして、Ryzen 7 5800XとRyzen 7 5800X3Dを比較すると、Inter-Core、つまりL3を跨ぐ形でのアクセスのLatencyが2.1nsほど増えている事が判る。Ryzen 7 5800X3DのBase Frequencyが3.4GHzである事を考えると、7cycleほどLatencyが増えている計算になる(Boost Frequencyの4.5GHzだとすると9.5cycleほどに悪化する)。この数値は平均値なので、これがそのままL3のLatencyの増分という訳では無いが、まぁ若干遅くなっているのは間違いない。ただその一方で、Inter-Thread Bandwidth(グラフ95・96)を比較すると、4×1MBの場合のケースが
Best | Worst | |
---|---|---|
Ryzen 7 5800X | 149.77 | 178.60 |
Ryzen 7 5800X3D | 281.72 | 277.48 |
(単位:GB/sec) |
と倍増に近い上乗せが確認できるあたり、損得勘定は難しいところだ。
グラフ97・98はStreamと、Cache & Memory Bandwidth(グラフ99・100の結果における256MB~4GBでの平均をまとめたものだが、ことStreamに関してはInteger/Float共に96MB L3の効果は殆ど見られない。その一方でCache & Memory Bandwidthの256MB~4GBの平均ではMT+MC/1Tの両方でそれなりに上乗せがみられるのは、やはりプログラムの構成次第という部分があるのだろう。
そのCache & Memory Bandwidth(グラフ99・100)を見てみると、64MBにおける性能が大幅に向上しているあたりがRyzen 7 5800X3Dの最大のメリットであり、それ以外の部分は動作周波数に比例した感じでRyzen 7 5800Xをやや下回るというのは、まぁ仕方がない部分だろう。
最後に気になるLatencyについて。グラフ101~103がGlobal Data Memory、104~106がInst/Code Memoryである。まずGlobal Data Memoryで言えば、Sequential Access(グラフ101)ではPrefetchがバッチリ効いているためか、L3のLatencyは全く変わらないが、In-Page Random/Random(グラフ102・103)では、Ryzen 7 5800X3DがL3領域で概ね4~5cycleのLatency増加がみられる。
ついでInst/Code Memoryだが、こちらではSequential(グラフ104)とIn-Page Random(グラフ105)も1cycle、Full-Random(グラフ106)では2~11cycleと結構幅がある。興味深いのは512KB(L2の範囲)で既に6cycleの増加があるのに、1MBでは逆に9cycleの減少となっていることだ。また64MBにおけるFull RandomのLatencyは、Global Dataの場合は78cycleなのにInst/Codeだと370cycleと結構大きい(とは言え、Ryzen 7 5800Xと比べると100cycle少ない)というあたりは、Global DataとInst/CodeはL2の先のPathが異なっており、このあたりがL3に出すリクエストの処理が異なっている事をしのばせる。まぁPrefetchの機構とかもあるので、単純に比較できるものでもないのだが。この辺は単にL3だけで議論しきれないのだが、逆に3D V-CacheでL3を増量した事のペナルティそのものは4cycle程度。これに加えて、Code/InstではPrefetcherに余分な処理が追加されることでもう少し変動する、という事になるかと思う。