◆RMMT 1.1(グラフ96~97)

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

ゲームベンチマークはこの程度にして、続いては改めてCPU性能の比較であるが、今回メモリ回りに関してはこのRMMT 1.1が唯一のテストである。理由は簡単で「Sandraでメモリテストを噛ますとOSがクラッシュするから」である。特にLatency周りは、今までと測定方法が変化したようで、例えばAIDA64(最新版の6.50を利用)を使ってメモリ回りの比較をするとこんな感じ(Photo16~19)で、しかも各テストが終わるといちいちこんなDialogが出てくる(Photo20)。次に示すSandra 20/21も最新版を使ってもクラッシュしまくりで、そんなわけで特にMemory Latencyは一切測定が出来なくなっている。ただ幸いにもRMMTは無事に動作したので、こちらの結果をご紹介したい。

  • Photo16: Memory Latencyが0.0nsってのはちょっと...

  • Photo17: Readが70.5GB/secというのはほぼRMMTと同じく。

  • Photo18: Writeが68.8GB/secはいくらなんでもちょっと高すぎでは...

  • Photo19: いやいくら何でもこれはない。

  • Photo20: と言われても、一応最新版なんですが...

さてまずReadである。今回Alder Lakeに関しては、Task ManagerからProcessor Affinityを使ってP-CoreとE-Coreを別々に測定した。実線がP-Core、破線がE-Coreになっている。DDR5の効果であるが、Core i9-12900Kの場合、P-Coreで最大70.5GB/sec、E-Coreでも58.9GB/secという高い帯域を誇る。理由は簡単で、DDR5では単純にスピードを倍増しただけではなく、バンク数の増加やバースト長の変更、サブチャネルのサポート、リフレッシュの改良など変更箇所は多岐に及んでいるからだ。これはMicronの資料によるものだが、DDR5-4800はDDR4-3200比で最大87%の帯域増加が期待できるとしている。DDR4-3200の実効帯域はグラフ96からも明らかな様に50GB/sec程度(Ryzen 9 5950Xで49.1GB/sec程度。Core i9-11900Kだと47.4GB/sec程度)だが、Micronの理論値が正しければAMDなら91.8GB/sec程度、88.6GB/sec程度まで引っ張れる計算になる。もっともMicronの資料は多分に楽観的というか、理論上ベストな場合を積み重ねた計算で、実際にはもう少し効率は落ちるだろうから、70GB/sec前後というのは割と固めな数字として良いと思う。

  • グラフ96

実際、グラフ96だとAMDにしてもIntelにしてもDDR4は3Threadあたりでほぼピークになり、そのあとは水平傾向にある(Ryzen 9 5950Xが変なグラフなのは、合計で64MBにも及ぶ大容量L3のお蔭だろう。一応テストはThreadあたり80MBのメモリアクセスにしているので、L3 Hitの影響は少ないとは思うが、皆無ではない。その意味では5threadあたりの数字は余りあてにならず、8threadの49.1GB/secあたりが現実的な数字だと思う)。これに対し、Core i9-12900KのE-Coreの方は7thread→8threadあたりでやや頭打ちであるが、P-Coreの方はまだ余力がある数字であり、もう少し多数のThreadを同時に発行できれば、更に性能があがる可能性がある。

  • グラフ97

これに対してWrite(グラフ97)の方は、やや疑わしい。DDR5になったからといってBurst Writeがサポートされた訳ではないからだ。バンク数の増加とかサブチャネルなど、ReadとWriteの両方に効果がある改良は多いが、20GB/secそこそこだったDDR4が55GB/secとか58GB/secに上がる理由は無い(ましてやPhoto18みたいに68.9GB/secに達するのはどう考えてもおかしい)訳で、このあたりはAlder Lakeになってタイミングの測定方法が変わってしまい、従来のやり方では正しく測定が出来なくなっている可能性がある。

DDR4→DDR5で、大幅にメモリ帯域が上がり、この結果としてAlder Lakeの性能を引き上げているのは間違いないとは思うが、正確な数値は各ベンチマークソフトが対応するのを待つしかなさそうだ(そしてRMMTはそろそろ利用できる限界が来たようだ)。

ついでに書いておくと、今のところWindows 11環境のAlder LakeでRMMAを取る方法が発見できていない(Test Modeにしても、RTCore64.sysが動作してくれない。またCacheやTLBのデータも取得できなくなっている)。本当はRMMAでプロセッサパイプラインの分析もしたかったのだが、こちらもそろそろ諦める時期が来たのかもしれない。

◆Sandra 20/21 2021.11.31.49 Tech Support(グラフ98~128)

Sandra 20/21 2021.11.31.49 Tech Support
SiSoftware
https://www.sisoftware.co.uk/

ということで、次はSandraである。一応現時点では最新版の2021.11.31.49を利用しているが、Alder LakeでMemory Test(Overall Memory Score/Memory Bandwidth/Cache & Memory Latency/Cache & Memory Bandwidth)を実施すると、どれをやっても直ちにOSがクラッシュする。これが出るのはAlder Lakeだけで、Rocket LakeやRyzen 5000シリーズは問題なく測定できたが、Alder Lakeの結果を入れずに示しても意味が無いので、今回はProcessor Benchmarkの結果(とVideo Memory Bandwidthの結果)だけをお届けする。

ちなみにSandra自体はHybrid Architectureへの対応を進めており、例えばMC(Multi-Core Test)や1T(1 Thread)だとBig Coreのみ(つまりP-Coreのみ)とかLittle Coreのみ(つまりE-Coreのみ)といったテスト項目があるにも関わらず、結果を見てみるとBig CoreのみとLittle Coreのみで同じ結果が並んでいたりして、まだ正しく動いている様には見えない。それもあって、今回はMC+MT(P-Core/E-Core無関係に全Threadを利用)と、1T(P-Core/E-Core無関係に、WindowsのTask Schedulerが選んだ1Threadで処理を実行)の2つの結果だけを示している。

  • グラフ98

  • グラフ99

  • グラフ100

  • グラフ101

ということで前書きが長くなったが、まずはDhrystone/Whetstone(グラフ98~101)。

Dhrystone MT(グラフ98)のスコアを見ると、なんとCore i9-12900KよりRyzen 9 5950Xの方がやや上である。またCore i5-12600KはCore i5-11600Kよりは当然上だが、Core i9-11900Kにはやや遠い程度。純粋に演算性能の合計では、P-Core×8+E-Core×8より、P-Coreより多少IPCは落ちてもUnified Core×16の方が上、というある意味納得できる結果である。ただ.NETでは仮想マシン上で動くことになる訳で、こうなるとAlder Lakeの方が効果的に動作するらしい。

一方のDhrystone 1T(グラフ99)だが、おそらくCore i9-12900KはE-Coreで動作している様にも見える。もっとも、Core i5-12600KもP-Coreで動作しているようには見えない(か、P-Coreで動いていても何らかのThrottlingが発生しているのか?)。本来ならもう少し性能が伸びるはずである。

この傾向はWhetstoneでも繰り返されることになった。Whetstone MT(グラフ100)も僅差でRyzen 9 5950Xがトップの座を守り切った。意外にDouble FloatでCore i9-12900Kが伸びないのがちょっと不思議であるが。また.NETでもRyzen 9 5950Xがトップになっており、このあたりはAVX2をダブル搭載した事の効果なのか、それともL3が64MBの効果なのか。ちなみにSingle Nativeだとi5-12600KがCore i9-11900Kを上回っているのもなかなか興味深い。

そしてWhetstone 1T(グラフ101)だと、なぜかCore i9-12900Kが一番低い数字なのは、おそらくE-Coreでの駆動になっていると思われる。Core i5-12600KはP-Coreで、しかもThrottlingなど無い状態でのスコアと思われるので、ここからもう少し上乗せしたのがCore i9-12900KのP-Coreフル駆動での結果になると考えられる。

  • グラフ102

  • グラフ103

  • グラフ104

  • グラフ105

Processor Multimedia(グラフ102~105)は、結果が2桁ほどバラつく関係で直線目盛りだと見にくいので、横軸は対数軸にさせていただいている。

さて、まずはInt MT(グラフ102)だが、ここでもCore i9-12900Kは健闘しているが、Ryzen 9 5950Xには微妙に追いつかないあたり。そしてCore i5-12600KはCore i9-11900Kといい勝負になっている。そしてInt 1T(グラフ103)だとCore i9-12900KのみがE-Coreで動いている感じ。ただ.NETではP-Coreになっていると思われる結果であり、やはり裏で仮想マシンが動くとスケジューラの扱いが変わるという事だろうか?

Float MT(グラフ104)もこれまでのMTの傾向と変わらず。そしてFloat 1T(グラフ105)だと、やっぱりCore i9-12900KのみがE-Coreで動いたっぽい結果になっている。もうこの辺りが、Alder LakeというかHybrid Architectureの最大の問題なのかもしれない。

  • グラフ106

  • グラフ107

  • グラフ108

  • グラフ109

Processor Cryptography(グラフ106~109)では、基本的に今回試用した6製品はいずれもAES命令をサポートしているので、そうそう大きな差はないかと思いきや、案外にばらついた。Encryption/Decryption MT(グラフ106)でRyzen 5000系は18GB/secあたりが一つのボトルネックになっているようで、コア数とか関係なく一律のスコアだが、Intel系はきちんとスコアが伸びている。逆にCore i9-11900Kが12GB/secそこそこで低迷している理由が良く判らないが、Alder Lakeはどちらもちゃんと性能が出ている。

これが色々変わるのがEncryption/Decryption 1T(グラフ107)で、またもやCore i9-12900KはE-Coreが動作しているかのふるまいだが、Core i5-12600Kもあんまり芳しい性能ではなく、むしろRocket Lake系2製品の方が性能が上、というのはどうしたものか?

一方Hashing MT(グラフ108)であるが、Hashに対応する命令は無いので通常の命令を組み合わせる事になる。そのあたりもあってか、コア数の多いCPUが比較的良いスコアをだしているが、SHA1/SHA-256はともかくSHA-512でCore i9-12900Kが妙に落ち込んでいる理由が今一つ不明である。またCore i5-11600Kと比較してCore i5-12600Kが落ち込んでいるのは、E-Coreでの処理性能が低く、これが全体の足を引っ張っている可能性もある。

もっと変なのはHashing 1T(グラフ109)で、Core i5-12600K/i9-12900KともにE-Coreで動作していると考えるのが妥当な結果になっている。Ryzen 5000系がHasingが苦手なのは既に珍しくないが、E-Coreだとこれと同程度(SHA2-512だとRyzen 5000系より更に落ち込む)というのは、なかなかハンドリングが難しそうだ。

  • グラフ110

  • グラフ111

  • グラフ112

Financial Analysis(グラフ110~112)もなかなか面白い。まずBlack-Scholes(グラフ110)だが、MTだとなかなかAlder Lakeは健闘している。一方1Tの場合、P-Coreだと悪くない性能(だが、Rocket Lakeと殆ど大差ない程度)だが、E-Coreだと急激に性能が落ちる事になる。Binomial(グラフ112)の場合、Single MTだとCore i9-12900KですらRyzen 5 5600Xに及ばないという恐ろしい性能差になるが、Double MTだといい勝負である。この傾向は1Tの場合も同じで、Single 1T/Double 1Tもよく似た感じになっている。ただしE-Coreに落ちるとちょっと勝負にならないレベルの性能差である。Monte-Carlo(グラフ112)はBlack-Scholesに似た感じだろうか。

  • グラフ113

  • グラフ114

  • グラフ115

Scientific Analysis(グラフ113~115)では、まずGEMM(グラフ113)で言うとRyzen 5 5900XがSGEMM MT/DGEMM MTともに圧倒的で、このあたりはUnified Core×16の強みがフルに発揮されている感じだ。ただ1Tの場合はそこまでの性能差はなく、特にDGEMM 1TだとRocket Lakeが最高というのはどうしたものか。多分このテスト、1TだとAlder LakeはどちらもE-Coreで実施されているように見える。

FFT(グラフ114)はメモリ帯域がモノをいうベンチマークでもあり、それもあってかAlder LakeがMTで高い性能を出すのはまぁ納得ではある。Ryzen 5000系も大容量L3の効果である程度頑張っているが、Rocket Lakeと同等といったところでAlder Lakeには敵わない。のだが、1TになるとそのAlder Lakeが芳しくないのはどういうことか? 特にFloat 1Tなど、P-Coreで動いていると思しきCore i5-12600Kが、Rocket Lake系の半分強に低迷しているのは、これまで報じられた以上にGolden Coveの内部構造が変わり、メモリアクセス周りの最適化方法が変化したのかもしれない。

N-Body(グラフ115)も概ね同じ傾向である。MTではGEMM同様、やっぱりUnified Coreの数が多い方が有利なようだ。一方の1T、P-Coreがちゃんと使われればいいのだが、E-Coreになってしまうとえらく性能が低迷することになる。

  • グラフ116

  • グラフ117

  • グラフ118

  • グラフ119

次はProcessro Neual Networks(グラフ116~119)。CNN Inference(グラフ116)はこれまで見てきた構図とよく似ている。Normal MTだとCore i9-12900Kは明確にRyzen 9 5950Xを上回る性能だが、High-Precision MTだと互角に近いところに落ち着く。まぁRocket Lakeと比べると大幅な性能アップであることは間違いない。その一方で1TだとRocket Lakeと大して変わらないというのは、要するにCPUコアの性能というよりはメモリアクセス性能の改善が効果的だった、というあたりだろうか? E-Coreだと性能が半分以下に落ちるのは、まぁ当然であろうか。

ところがCNN Training(グラフ117)の場合、メモリアクセスよりも計算量が必要になってくることもあってか、Ryzen 5000系有利になっている。勿論Trainingにもメモリアクセスは必要で、しかもInferenceよりも煩雑かつ集中的なアクセスになるから、L3容量がモノを言いそうだ。High Precision MTでAlder Lake(30MB L3)とRyzen 5 5600X(32MB L3)の性能が同程度、というのは案外L3容量が大きなファクターになっているのかもしれない。その一方で1Tだと基本Intel系の方がやや有利である。勿論P-Coreの場合であれば、という話であるが。

RNN Inference(グラフ118)も傾向としてはCNN Inferenceに近いが、ただ特にHigh PrecisionにおけるRyzen 5000の性能の高さが特筆ものである。Normal MTでもRyzen 5 5600Xが120.09 samples/sと、Core i5-12600KはおろかCore i9-11900Kすら大幅に上回る性能なあたりは、アーキテクチャ的な向き不向きがある事を示していると思われる。1Tの場合もこの傾向は変わっていない。

これがもっと極端な形で出てくるのがRNN Training(グラフ119)で、MTだとなんとかAlder Lakeが有利な結果になっているが、High Precision MTだとCore i5-12600KとCore i9-12900Kの性能が変わらないというのも合点がいかない。ただもっと合点がいかないのはNormal 1TにおけるCore i9-12900Kのスコアの低さで、E-Coreで動いていてもここまで性能が下がることは考えにくい。ここまで低いと、例えば処理の途中で稼働するThreadがP-CoreとE-Coreの間で煩雑に切り替わっているとか、そういった理由しか思いつかないのだが、現実問題としてそんなことがありえるのか? というのは疑問点として残らざるを得ない。

  • グラフ120

  • グラフ121

Processor Testの最後はImage Processing(グラフ120~121)である。こちらもスコアが2桁違うので、対数軸とさせていただいている。まずMT(グラフ120)だが、少なくともMTに関して言えばCore i9-12900Kはかなり良好な性能(勿論Noise ReductionとかMotion Blurの様に、一部Rocket Lakeより下がっているものもある)を示している。その一方でCore i5-12600KはCore i5-11600Kよりスコアがさがっているのが殆ど(Diffusionのみ、辛うじて上回っている)というちょっと不思議な傾向である。対Ryzen 5000シリーズという観点では、Ryzen 5 5600Xは勿論勝負にならず、Ryzen 9 5950Xも殆どのケースでCore i9-12900Kに及んでいないから、ここでの性能差はまぁ明確として良いだろう。この、対Ryzen 5000シリーズとの関係は1T(グラフ121)でも同じであり、それはいいのだが、1Tだとすべての結果がRocket Lakeを下回っているというのはどういうことか? そしてCore i9-12900Kのスコアが全部Core i5-12600Kの半分以下(Marblingなど1/4)というのは、多分こちらはE-Coreを利用しての結果になっていると思うのだが、P-Coreを使っていると思われるCore i5-12600KでもRocket Lakeに追いつかないのは解せないところである。

  • グラフ122

  • グラフ123

  • グラフ124

  • グラフ125

次はInter-Thread Efficiency(グラフ122~127)である。以前はInter-Core Efficiencyという名前であったテストだ。まずはInter-Core Bandwidth(グラフ122・123)である。こちらは要するにThread同士の通信の帯域で、Best(グラフ122)は同じコア内のThread同士、Worst(グラフ123)は異なるコア/モジュールのThread同士の通信帯域となる。BestでRyzen 9 5950XとAlder Lakeはどちらも800GB/secほどのピーク帯域を発揮するが、Alder Lakeは16KB程度、Ryzenは256KBあたりがそれぞれピークになっている、というのは非常に興味深い。またピークそのものはAlder LakeよりもRocket Lakeの方が上、というのはやはりHybrid Architectureになって少しLatencyが増えているのではないか? という気がする。L3の容量そのものも増えているから、これによるLatency増加も(1~2ns程度ではあろうが)考えられるだろう。

一方のWorst(グラフ123)、Ryzen 9 5950Xはダイ間通信が発生している関係で帯域は猛烈に低くなる。その一方で1ダイ内で完結するRyzen 5 5600Xは、特にL3が効く1MB~4MBの範囲での帯域の持ち上がり方が強烈である。これに続くのがL3を30MBに増量したAlder Lakeの2製品。Rocket LakeはL3がやや少ない事もあり、1MBはともかく4MBではやや帯域が下がるのは当然と言える。ただここでAlder LakeとRyzen 5 5600Xを比較すると、もう少しAlder Lakeの帯域が上がってもよさそう(少なくともRyzen 5 5600Xと同等程度は期待してもいい)なのに、その6割程度に落ち着いているのは、やはりこれもLatencyの影響が大きそうに思える。

ではそのLatencyは? ということでグラフ123・124がLatencyの平均値である。Inter-Threadは同一コア内のThread間、Inter-Coreは同一ダイ内の異なるコアのThread間、Inter-big/LITTLE Coreは同一ダイ内のP-CoreとE-CoreのThread間、Inter-Moduleは異なるダイ上のコア間の、それぞれのLatencyである。今回の場合、Inter-big/LITTLE CoreはAlder Lakeの2製品、Inter-ModuleはRyzen 9 5950Xのみがこれに該当する格好だ。ということでまずBestの数値を見ると、そもそもInter-ThreadでIntel系はRyzen 5000よりもややLatency大きめであるが、Alder Lakeで数字がバラつく理由は後述したい。またInter-Coreも、やはりRyzenの方が良好で、Alder LakeはRocket Lakeよりも更に3~10nsほど増えている。そしてInter-big/LITTLE Coreは40ns台と、結構馬鹿にならないLatencyが掛かっている、同一ダイ内とはいえ、やはり異種コア同士の通信は余分に時間が掛かることになる事が明らかになった。ちょっと先のPhoto02に戻るが、P-CoreはLLCに対して直接アクセスが出来るが、E-Coreでは4コア単位でL2を共有するから、まずこのL2のアクセスに時間が掛かり(ほかの3コアとの同期を取るから)、そこからL3にアクセスとなるので、どうしてもLatency的には不利にならざるを得ない。

次にWorst(グラフ125)を見てみると、こちらも傾向は似ているが、概してAlder Lakeの数字がやや増えているのが判る。ここで先ほどのバラつきの話に戻るが、P-Core内だけでのInter-Thread LatencyはおそらくRyzenと同程度まで高速化されているように思える。ところがE-CoreのInter-Thread Latencyは、多分Rocket Lakeと大差ないレベルである。これはInter-Core Latencyも同じで、P-CoreだけならRocke Lakeレベルで収まるのが、E-Coreが混じる事でどうしても遅くなる。これに輪をかけているのが、E-Coreは4コアで一つのクラスタを構成している事だろう。

Armが初期のbig.LITTLEではbig側のProcessorとLITTLE側のProcessorをそれぞれ別々にクラスタリングしていたが、DynamIQではbig.LITTEを取り交ぜて8コアまでを一つのクラスタとして扱える様にしたのは、コア間の通信を行う際に、異なるクラスタを跨ぐ格好になるとどうしてもLatencyが削減できない事への対応も一つある。加えて言えば、big.LITTLEでは処理中にあるThreadをLITTLEコアからbigコアへ移したり、あるいはその逆にbigコアからLITTLEコアへ移したり、といった処理を行う事を想定しており、この際にプロセッサ側にL2を置いておくと、そのL2の中身の移動が大変になるという問題があった。このためDynamIQではプロセッサコアにはL1のみを置き、L2は全プロセッサコアで共有の形でInterconnect側に置くというトポロジーの変革を行った(このあたりの話はこちらの記事で以前説明している)が、それに比べると現在のAlder Lakeの構成はまだ無駄が多いことになる。この辺の話は考察でまた述べたいが、なんにせよHybrid Architectureを採用した事でLatencyが増えているのは紛れもない事実で、これが多少性能の足かせになっているのもまた事実であろう。

  • グラフ126

  • グラフ127

グラフ126・127はグラフ124・125をもう少しBreakdownして、Latencyの頻度を示したものだ。まずグラフ126がBestの場合である。Core i9-12900Kの場合、10nsあたりに一つのピークがある。これがP-CoreのInter-Thread Latency、その先の12nsあたりがE-Coreのものだろう。次のピークは32nsあたりで、これがInter-Core Latencyだが、実際には29~37nsあたりの割と広い範囲の揺らぎがある。そして39ns~51ns+55nsあたりの山(ピークは46nsあたり)がInter-big/LITTLE Core Latencyで、結構幅広いというか、揺らぎが大きいのが特徴だ。Core i5-12600Kでは動作周波数がやや低めになるためか、揺らぎは更に広い範囲に広がっている。このLatencyの揺らぎの大きさは、Rocket LakeやRyzen 5000シリーズに比べるとかなり大きめ、というのは見ての通りである。

Worst(グラフ127)でも傾向そのものは変わらない。強いて言えばCore i9-12900KだとInter-big/LITTLE Core Latencyは大差ないが、Inter-Core Latencyが微妙に増えて、山が少しだけ右に移動しているというあたりか。またCore i5-12600Kでは山のピークが少し変わっているのも特徴的だ。

このInter-Thread Efficiencyの一連の結果を見て思うのは、まだシステム的に熟していないというか、だいぶ改善の余地がありそうというあたりだろうか。必ずしもArmのbig.LITTLEと同じ動作をするわけではないから、現在のDynamIQと比較して優劣を語るのは意味が無いが、現状はちょっとまだ粗削りというかプリミティブな部分が目立つ結果となった。

  • グラフ128

Sandraの最後がVideo Memory Bandwidth(グラフ128)だが、要するにPCIeの帯域検証である。といっても現状まだPCIe Gen5に対応したビデオカードは存在しないので、あくまでもPCIe Gen4として動くかどうかの検証にしかならないのだが。

結果は見ての通りで、効率そのものは理論値(32GB/sec)の50~62%程度だが、これはプラットフォームだけでなくビデオカード側の問題もあるためで、むしろこれだけ出れば十分というところ。いずれPCIe Gen5/CXL 1.1に対応したアクセラレータカードなどが登場したらまた改めて試すことになるだろうが、とりあえずAlder LakeでPCIe Gen4は問題なく動作する事が確認できた。