◆RMMT 1.1(グラフ59~60)

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

さて、ここからはもう少しPrimitiveなテストを。まずはRMMTでメモリ帯域の確認を行ってみた。

  • グラフ59

まずRead(グラフ59)。今回メモリは定格動作なので、Core i9-9900KがDDR4-2666、Comet Lake-SがDDR4-2933、RyzenがDDR4-3200である。それぞれの理論帯域と実効帯域、効率を比較すると

理論帯域 実効帯域 効率
Core i9-9900K 42.6GB/s 36.0GB/s 84.5%
Comet Lake-S 46.8GB/s 41.2GB/s 88.0%
Ryzen 7 3800X 51.2GB/s 41.1GB/s 80.3%
Ryzen 9 3900X 51.2GB/s 47.5GB/s 92.8%

となり、Comet Lake-Sも結構健闘はしているものの、Ryzen 9 3900Xの効率には及ばないというあたりである。ところでRyzen 7 3800Xが特に低い(とは言ってもComet Lake-S並の帯域は確保しているのだが)のがちょっと不思議である。一応可能性で言えば、もともとRyzenではMemory ControllerはcIOD(I/O Die)側に置かれており、CPUコアからInfinityFabric経由でアクセスするわけだが、もともとcIODは2つのDieからのアクセスを均等に裁くように設計されており、1つのDieからの集中的なアクセスがあると、InfinityFabricそのものがボトルネックになるのではないかと思われる。実際グラフ59で、4ThreadまではRyzen 7 3800XとRyzen 9 3900Xで性能がほぼ変わらないのがその傍証である。そもそもテストでは、Ryzen 9 3900Xの場合には2つのDieからのアクセスが均等に行われるように実施しているが、Ryzen 7 3800Xでは1 Die構成なので、ここがボトルネックになりそうに思える。

  • グラフ60

まぁそうした話はともかくとして、とりあえずほぼメモリ帯域にそった性能が出ている事は確認できた。一方のWrite(グラフ60)だが、Intel系は2 Threadあたりが一番効率が良い、というのは以前からと同じ傾向である。逆にRyzen(特にRyzen 9 3900X)ではThread数が増えるとじわじわ帯域を増やしており、8 Threadではもっとも広帯域になっているが、まぁこれは最終的にメモリの理論帯域に比例する訳で、これもセオリー通りである。とりあえずComet Lake-SはRead/Writeともに、DDR4-2933のサポートにあわせてきちんと帯域が引きあがる事は確認できた。

◆Sandra 20/20 2020.4.30.35 (グラフ61~108)

SiSoftware
https://www.sisoftware.co.uk/

  • グラフ61

  • グラフ62

ここからはSandraの結果を延々とご紹介させていただきたい。まずはDhrystone。MT(Multi-Thread:グラフ61)だと、かなりCore i9-10900Kも頑張っているが、コアの数でぎりぎりRyzen 9 3900Xの勝ちといったところである。8コア対決では、Ryzen 7 3800XはCore i7-10700Kは元よりCore i9-9900Kにも及ばない訳で、まぁこれは妥当な結果である。ちょっと不思議なのは1T(1 Thread:グラフ62)。動作周波数的に言えば、勿論Core i9-10900Kが最速の筈なのに、実際にはCore i9-9900Kの方が高速という、ちょっと不思議な結果になった。

  • グラフ63

  • グラフ64

この傾向はWhetstoneでも同じだった。MT(グラフ63)では、Ryzen 9 3900XがCore i9-10900Kを上回るスコアを出し、その一方でCore i7-10700KはRyzen 7 3800Xを上回っているが、1T(グラフ64)にすると俄然Core i9-9900Kが活躍し始めるという状況である。1Tの場合、消費電力と放熱の両面でゆとりがあるから、ほぼピークまで性能が上がりやすい、という事を考えればCore i9-10900Kの方が速そうに思えるのだが、案外そうならない場合もあるという結果になった。

  • グラフ65

  • グラフ66

  • グラフ67

  • グラフ68

次いでProcessor Multi-Media(グラフ65~68)。ちなみに結果の桁が2桁違う関係で横軸は対数軸にしている。まずInteger MT(グラフ65)だが、傾向はこれまでと同じく。そしてInteger 1T(グラフ66)だとCore i9-9900Kがトップなのも同じである。Float MT(グラフ67)とFloat 1T(グラフ68)も同じで、単にDhrystone/Whetstoneだけの傾向という訳ではなさそうだ。

  • グラフ69

  • グラフ70

ではもう少し用途別でCryptography(グラフ69~72)。まずEncryption/Decryption MT(グラフ69)では、Ryzenが異様に良いスコアであり、一方Comet Lake-SはなぜかCore i5-10600Kが最速という不思議な傾向になっている。ただ、1T(グラフ70)にするとちゃんとCore i9-10900Kが最速なあたり、別にベンチマークのデータを取り違えている訳ではないようだ。そしてその1TではRyzen 7 3800Xが圧倒的に高速という、これまた不思議な傾向になった。加えると、Intel系ではEncryptionとDecryptionの性能がほぼ同じなのに対し、Ryzen系は結構速度が違うというばらつき方も面白い。更に言えば、ここでもCore i9-9900KがIntel系で最速になっている。

  • グラフ71

  • グラフ72

HashingはMT(グラフ71)だとRyzen系が健闘し、これにIntelが微妙に追いつかないという感じになっているが、1T(グラフ72)だと逆にIntel系が有利という、これはこれまでも繰り返してきた傾向である。そして、またしても最高速はCore i9-9900Kであった。

  • グラフ73

  • グラフ74

  • グラフ75

次いでFinancial Analysis。Black-Scholes(グラフ73)だと、MTの最高速はRyzen 9 3900Xで、これにCore i9-10900Kが続き、Ryzen 7 3800XとCore i7-10700Xが概ね同等というあたり。ところが1TにするとまたもやCore i9-9900Kが最高速である。これがBinomial(グラフ74)だと、Single PrecisionだとMT/1T問わずRyzenが最高速であり、Double Precisionだとかなり差を詰めるものの、MTではまだRyzen系に及ばず。1Tでは辛うじてRyzenを逆転するが、最高速はまたしてもCore i9-9900Kだったりする。Monte Carlo(グラフ75)ではSingle Precision/Double Precision問わずRyzen系が有利であり、Comet Lake-Sは一歩及ばずといったところ。ちなみに先のWhetstoneとかもそうだし、次のScientific Analysisもそうだが、SandraはAVX2までは使うもののAVX512は未対応(AVX2/FMAで実施)であり、その意味ではIntel系にはやや厳しいテストになっている事は事実である。

  • グラフ76

ではそのScientific Analysisでは? ということでまずはGEMM(グラフ76)を見ると、SGEMM(Single Precision) MTではCore i9-10900Kが圧倒的に高速なのに対し、なぜかDGEMM(Double Precision) MTではやけに低い値になっている。ただこれ、やり直しても同じ結果だったあたり、測定のミスという訳ではない。ただPower Limitに引っかかったにしては性能が低すぎるあたり、何かしらSandraの側にミスがあったのではないか? という気がする。ただ、このDGEMM MTを除くと概ね順当な結果であり、AVX512を使わなくてもやはりIntel系が強い事は確認できた。

  • グラフ77

もっとも、これがFFT(グラフ77)とかになると、また話が変わる。メモリ内でのデータの転置が激しく要求されるため、コア数が増えると相対的にキャッシュ容量が厳しくなる。この点では、ゆとりがあるRyzen系が強い。実際1TだとRyzen系の性能はIntelの半分程度でしかないのに、MTになるとほぼ同等、というあたりはIntel系がキャッシュメモリ容量がボトルネックになって性能がフルに出なくなっているためと考えられる。

  • グラフ78

N-Body(グラフ78)も同じである。Single 1TではIntel系がややアドバンテージがあるが、他はほぼ同等(MTではCore i7-10700KとRyzen 7 3800Xがほぼ同等のスコア)というあたりは、ほぼ拮抗した状況にあると考えてよいだろう。

さて、次のテストは今回初めてご紹介するAIのInference/Trainingのベンチマークである(グラフ79~82)。これはCNNとRNNを利用し、TrainingとInferenceの性能をSample/s(学習/推論を行う対象の画像数/秒)で示すというものである。データ型はSingle PrecisionとDouble Precisionというあたりはあんまり現実に即してない気もするが、まぁそれは措いておきたい。

  • グラフ79

  • グラフ80

さてまずはInference MT(グラフ79)で、CNNだとSingle/Double Precision問わずRyzenがかなり高速でIntelが一歩及ばないが、RNNでは逆にIntel系有利と好対照を示している。これはInference 1T(グラフ80)でも同じだが、Double Precisionにすると何故かまたCore i9-9900Kが最速という結果に。

  • グラフ81

  • グラフ82

一方Trainingであるが、MT(グラフ81)ではCNN/RNN問わずRyzen系が強く、特にCNNのSingle Precisionでは圧倒的な強さを示しており、Intel系は低め。1T(グラフ82)にすると大分拮抗する感じになっているが、それでもRyzen系を超えたというのは難しい。もっともIntelとしては、こうした用途に向けてAVX512にVNNIを追加しており、これを実装したCPUでやるべし(そもそもComet Lake-Sでやるんじゃない)というあたりではないかと思う。まぁあくまでも比較の一つ、ということで理解していただければと思う。

  • グラフ83

  • グラフ84

CPU性能の最後はImage Processingである。こちらも項目によって結果の桁が大きく変わるので、横軸は対数とさせて頂いた。まずはMT(グラフ83)。全般的にIntel系が強く、Ryzen 9 3900Xが最高速なのはMotion Blur/Edge Detection/Noise Reductionの3つのみで、しかもCore i9-10900Kとの差はそれほど大きくない。一方例えばDiffusionとかMarblingなどでは、Core i9-10900KがRyzen 9 3900Xの1.5倍とか2倍の性能を出しているなど、Intel系に非常に有利な結果になっている。1T(グラフ84)でもこれは顕著であり、こうしたアプリケーションに関しては明確にIntel有利と言える。問題は、ここでも最高速がCore i9-10900Kではなく、Core i9-9900Kな事であろうか。

  • グラフ85

次はCPUコア間のBandwidthとLatencyを測定するMulti-Core efficiencyである。まずグラフ85がOverallである。縦棒がBandwidth、折れ線がLatencyとなっている。ここでComet Lake-Sに注目すると

  • Bandwidthは若干の改良が見られる。特にBest CaseはともかくとしてWorst CaseにおけるCore i9-9900KとCore i9-10700Kを比較すると明白。またWorst CaseにおけるComet Lake-Sの帯域がほぼ同じ、というのも面白い。
  • Latencyに関してはBest/Worstを問わず、Core i9-9900Kと同程度とほぼ変わらないスペックになっている。

というあたりか。

  • グラフ86

  • グラフ87

もう少し詳細に見てみたい。まずBandwidth。Best Case(グラフ86)のIntel系は相似形になっており、またCore i9-9900KとCore i7-10700Kがほぼ重なっている事からも判る様に、このレベルではCoffee Lakeと全く差が見られない。差が出るのはWorst Case(グラフ87)である。明確な差があるのは16×64K(1MB)~4×1M(4MB)の範囲で、これはL2 Miss/L3 Hitであるが、なぜかここの帯域がCoffee Lakeと比べてComet Lake-Sはやや高めになっている。ちなみにBest Caseでは帯域に差が無い(Core i9-9900KとCore i7-10700Kが同等)から、L3のBandwidthそのものが増えたという訳ではない。

  • グラフ88

  • グラフ89

一方Latency(グラフ88・89)の方は、基本的に大きな違いは見られない。10~15nsのピークはL2アクセスで、ここはRyzen系の方がちょっと高速(Ryzenは12nsあたり、Intelは14nsあたりがピーク)だが、大きな差ではない。次の25~30nsの山は、Ryzenの場合で同じCCX内のL3へのアクセス、次いで35~50nsがIntel系のL3アクセス、最後75~80nsあたりがRyzenで異なるCCXのL3へのアクセスという具合だ。ここでComet Lake-Sの性能を比較してみると、BestとWorstでは42ns前後のピークの高さが異なる様に見えるが、実際はCore i7-10700Kの分布の違いでしかない。実データで言えば

Best Worst
38 6.6% 0.0%
39 23.3% 2.5%
40 24.2% 8.3%
41 21.6% 11.6%
42 3.3% 45.0%
43 5.0% 15.8%
44 3.3% 5.8%

という具合で、Bestだと39~41nsあたりに20%強で分布していたのが、Worstだと42nsに45%でまとめてドカンと来たという程度で、ここで大きな違いはない。という事は、Worst CaseにおけるInter-Core Communication(Intelの場合で言えば、異なるRing StopのL3をアクセス、という事だと思う)におけるThroughput改善の何かがComet Lake-Sで実装されたっぽい、ということしか判らない。ただこれはThroughputの絶対値(つまり同じRing Stop内のL3⇔L2のThroughput)そのものは変わっていないので、考えられるとすればRingそのもののThroughputか、もしくはL3⇔Ring Stop間のThroughputが若干向上した、という事かと思われる。ただ、それをハードウェア的に何か細工をした、という感じには見えない。単にRing Busのスピードを引き上げているとかそういう話なのかもしれない。

  • グラフ90

  • グラフ91

つぎはMemory Bandwidth。まずはStream及びグラフ92/93における64MB~4GBの平均値をまとめたのがグラフ90・91である。まずMT(グラフ90)だと、先のRMMAに近い結果になっているのが判る。面白いのは1T(グラフ91)でも似た結果になっている事で、まぁRMMAとは当然プログラムが異なるので傾向が多少異なるのは致し方ない。それはともかくとして、Coomet Lake-Sに着目すると、MTではCore i5-10600Kが最高速で、一番遅いのがCore i9-10900Kというのは、やはりコアの数が多くなるとRing Busがネックになりやすいということだろうか? 一方1Tにすると、またもやCore i9-9900Kがそれなりの性能を示すようになっている。1 Threadだと2chのDDR4の帯域をフルに使い切る事はないから、結果としてCore i9-9900KのみがDDR4-2666でもさして差が出ないという事だとは思うが。

  • グラフ92

  • グラフ93

キャッシュまで含めての帯域がグラフ92・93である。MT(グラフ92)の場合、コアの数に比例してスループットが上がるので、Ryzen 9 3900Xがぶっちぎりでトップなのはまぁ当然として、1T(グラフ93)でIntel系を見てみると、L1 Hit(~32KB)の範囲ではCore i9-9900Kが最速という、謎の結果になった。ただその後は概ね動作周波数通りではあるのだが、全体的にCore i9-10900Kが低め安定なのが気になるところである。

Bandwidthの次はLatencyである。グラフ94~99がData Cache、100~105がInstruction Cacheを対象とした結果で、それぞれSequential/In-Page Random/Full Randomの3種類のパターンでのアクセスを行った結果である。それぞれの結果は、Cyclesとns、2つの軸で示しているが、L1~L3の範囲はコアに同期しており、これを超えるとコアに非同期となる。そういう訳で、L1~L3まではCycles単位の結果を、メモリアクセスはns単位の結果を参照する形だ。

  • グラフ94

  • グラフ95

  • グラフ96

  • グラフ97

  • グラフ98

  • グラフ99

ということでまずはData Cache/Sequential(グラフ94)であるが、Core i9-9900KのみがL1/L2/L3が 3/10/12 cyclesの動作で、Comet Lake-SはL1/L2/L3が 4/11~12/13cyclesと、余分に1cycleのLatencyが追加されているのが判る。この傾向はIn-Page Random(グラフ96)/Full Random(グラフ98)も同じである。加えるなら、L3 Missの場合でも、Sequential(グラフ95)やIn-Page Random(グラフ97)でCore i9-9900KのLatencyは少なめである。さすがにFull Random(グラフ99)ではもう差が判らなくなってる(Random Accessそのものの絶対的なLatencyが大きすぎる)が、どうもComet Lake-Sでは少なくともDataに関しては1cycleのLatency追加を行ったようだ。

  • グラフ100

  • グラフ101

  • グラフ102

  • グラフ103

  • グラフ104

  • グラフ105

一方のInst/Code Cacheに対して。まずSequential(グラフ100)を見ると、まず2KはL0(MicroOps Cache)にHitするから1cyeleであるが、Core i9-9900Kは8KBまでこれが続くのに、Comet Lake-Sでは4KBまでが1cycleでその先は2cycleになっている。またL2/L3 Cacheもそれぞれ3/9Cycle→4/10cycleと、やはり1cycle追加されている。元々L2/L3はUnifiedだから、Data Access時に1cycle増えていればInst/Code Accessでもやはり1cycle増えるのは当然といえば当然なのだが。Inst L1 Cacheは一応同じ2cycleのままのようだ。

ちなみにIn-Page Random(グラフ102)を見ると、128KB(まだL2 Hitの範囲)で、既にComet Lake-SはLatencyが増える傾向にあるし、Full Random(グラフ104)も同じであり、Core i9-9900Kに比べるとLatencyが確実に増加している事が判る。その一方でMemory Accessに関しては、Sequential(グラフ101)のみ明確にCore i9-9900KのLatencyが低めではあるが、In-Page Random(グラフ103)とかFull Random(グラフ105)では大差ない感じになっているのは、Memory AccessそのもののLatencyの方が大きい&揺らぎも大きいためだろう。

  • グラフ106

グラフ106はVideo Memory Bandwidthであるが、ここで測定しているのはPCI Express経由でCPUとGPUのメモリの転送を行った場合の性能である。従来Ryzen系はこのスコアが低めだったのが、今回はIntel系と遜色ない数字になっている。この12GB/secというのはおそらくGeForce RTX 2080 Superの限界性能であって、その意味ではRadeon RX 5700 XTでも持ってきたらもう少し差が出る可能性はあるが、PCIe Gen3ベースのGPUカードを使う限りは、もはやRyzenとIntel系に差が無い事が確認できた形だ。

  • グラフ107

  • グラフ108

最後はMemory Transaction Testである。これ、元々はTSX命令の効果の確認のためのテストなのだが、実際にTSXが利用できるのはXeon向けで、CoreシリーズはTSXが無効化されているので、Database TransactionもSelect Updateも、ソフトウェア的に実施されることになる。そういう意味ではRyzen系と条件は一緒であるのだが、結果(グラフ107・108)を見ると、やはり圧倒的にIntelが有利である。ここでRyzen 9 3900Xのスコアが妙に低いのは、CCXを跨ってのL3 Accessが発生すると猛烈に遅くなるためで、その意味では妥当である。むしろ気になるのは、ここでもComet Lake-SではCore i9-10900Kややや低め(といっても大きな差ではないが)な事だ。やはり10コアをRing Busで繋ぐと、性能の揺らぎが大きめになるのかもしれない。