Sandra Platinum Version 24.41(グラフ77~121)

とりあえずコアの性能は(それが何故かという理由はさておき)分かったので、次にメモリ周りを。まずはMemory Bandwidth(グラフ97~98)。Stream Int/Floatのほかに、グラフ99およびグラフ100の256MB~4GBの平均値も入れてある。

Multi Thread(グラフ97)だとStreamが31~33GB/secあたりで、これはコアによる違いは無い。Single Thread(グラフ98)だと多少でこぼこ傾向が変わるが、AVX2命令をフルに使うとやはり26~28GB/secの帯域になるわけで、少なくともここではCore i7-7700KとCore i7-8700Kの間に目立った差は見当たらない。

Cacheまで含めてだとどうなるかというと、面白いことにMulti Thread(グラフ99)だとCore i7-7700Kは遂に1.6TB/secに達するのに対し、Single Thread(グラフ100)ではせいぜいが280GB/sec程度だ。

しかもグラフのピークが変わっている。グラフ100の結果を見る限り、コアのL1~L3のアクセスの帯域はKaby LakeもCoffee Lakeも変わらない。特に共有L3の領域になる512KBからは、Core i7-7700KとCore i7-8700Kの帯域が一致(65GB/sec前後)しており、それ以前の帯域の差はコアの動作周波数の違いによるものだと判断できる。

ところがグラフ99で512KBの帯域を見ると、368.26GB/sec vs 672.91GB/secとなり、80%ほど帯域が多い計算になる。これはコア数の増加だけでは説明できない。

Latencyはということでグラフ101~106がGlobal Data Memory、グラフ107~112がInstruction/Code MemoryのLatencyである。Sequential/In-Page Random/Full Randomの3種類で、さらにClockとnsの両方を示しているのでちょっと数は多いが、見方は単純である(L0~L3はClockの方を、メモリ領域はnsを見るのが正しい)。

まずGlobal Data Memoryだが、Sequential(グラフ101)だとCore i7-8700KのみL2/L3が1cycle Latencyが増えている。これがIn-Page Random(グラフ103)だとLatencyが更に大きくなっており、少しL2/L3 Cacheに手が入ったように思える。Full Random(グラフ105)ではCore i5-8400のL2/L3のLatencyもCore i7-7700Kに比べて増えており、これはCoffee Lakeに特有なのかもしれない。

可能性としては、内部のRing Busの長さが長くなった関係で、その分Latencyが増えていることが考えられる。その一方で、Memory Accessではいずれ(グラフ100・102・104)の場合もCore i7-8700KのLatencyがCore i7-7700Kからわずかであるが減っており、こちらにも何かしら手が入ったことが推察できる。

次にInst/Code Memoryである。Sequential(グラフ107)を見ると、L0/L1に関しては完全にCoffee LakeとKabyLakeで一致しており、おそらくCPU PipelineのFetchやMicroOps Cache周りには変更が無いと思われる。

一方で、L2~L3は若干Latencyが増えている。この傾向はIn-Page Random(グラフ109)やFull Random(グラフ111)も変わっていない。またMemory Access(グラフ106・108・110)、こちらもCore i7-8700KはCore i7-7700Kよりも若干改善しており、傾向はGlobal Data Memoryの場合と共通であることが確認できた。

グラフ113~118はMulti-Core Efficiencyである。まずグラフ113~115がBest Caseで、この場合Core i7-8700KはCore i7-7700Kと同程度のLatencyで、1.5倍の帯域である(グラフ113)。

ただこれは単純にコア数比であって、これだけ見るとやはり単にコア数が1.5倍になっているようにしか見えない。余談だが、Core i5-8400でLatencyが多く帯域が低いのは、同一Core上の2つのThread間での通信(当然低Latency、高帯域での通信が可能)が出来ない(Coreあたり1Threadだから)から、必然的に高Latency、低帯域のCore間通信の結果だけを集計しているためである。

その一方で帯域の詳細(グラフ114)を見ると、16KBくらいのピークだとCore i7-8700KはCore i7-7700Kのダブルスコアになっている。ただずっと2倍なわけではなく、8MBとか32MBだと、ほとんど帯域が同一になる。これはL3がボトルネックになるためであろう。逆に言えば、L2以下で済む範囲だと簡単にダブルスコアになるということだ。

一方Core間のLatencyの分布(グラフ115)を見ると、Core i7-8700KのLatencyは全体的にピークが2nsほど少ない方向に寄っている。ただ、ピークそのものの高さは低く、その分やや広がりをもっているあたり、Latencyの揺らぎが多い。これはRing Bus経由での通信の距離が長くなった影響と思われる。

次がWorst Case(グラフ116~118)だが、こちらだとむしろCore i7-8700Kの帯域がCore i7-7700Kを下回るという面白い傾向になっている。帯域の詳細(グラフ117)を見ると、特にグラフ114にあった16KBあたりのピークが完全に消えており、むしろCore i7-7700Kの方が全体的に帯域が上である。

それでもトータルで同等近いのは、1MB(16×64K)~2MB(8×256KB)の通信で、L3の容量の大きさ(12MB)が効果的に作用したと思われる。逆にLatency(グラフ118)では、Latencyの分布傾向そのものは若干異なるが、ピークの位置はほとんど変わっておらず、Latencyそのものに大きな違いが無いことが分かる。

さて、これで大体分析は終わったが、ついでに補足を。まずグラフ119~120はMemory Transaction Throughputの結果である。Photo08のキャプションで、Core i5-8400ではTSX命令が無効化されていることに触れたが、結果もこれを反映するものになった。そしてここでもまた、ダブルスコアとは言わないまでもCore i7-8700KがCore i7-7700Kを大きく上回る性能を出していることが確認できた。

最後がVideo Memory Benchmarkである。これは主にPCI Express経由での通信性能の測定だが、多少でこぼこはあるものの、どのプラットフォームもPC→GPUは12GB/sec、GPU→CPUは11GB/sec程度の帯域を確保できていることが確認できた。