すでにラフにではあるが、"Skylake"こと「Intel Core i7-6700K」の性能評価はお届けしたわけだが、テストによって性能が妙に高かったり、Haswell並みだったり、あるいはHaswellより遅かったりと不思議な振る舞いを示していた。

そこで、もう少し内部について分析を行ってみたいと思う。ちなみにテスト環境はこちらに示した通りなので割愛する。

Sandra 2015 SP2b Engineer Edition その1(グラフ1~14)

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

前回はCPUの絶対性能に関してのみの比較だったので、今回は主にキャッシュやメモリアクセス周りの結果をレポートしたい。

まずグラフ1と2はInter-Core Efficiencyの結果である。グラフ1のOverallを見ると、HaswellよりもBroadwellが(動作周波数が低いにも関わらず)高速なのは、L4の関係かという気もするが、そうするとさらに高速なSkylakeとの整合性が取れないことになる。ちなみにGodavariはこれくらいだろうという結果だ。

続いてDetail(グラフ2)を見ると、話は結構複雑である。"Haswell vs Broadwell"という観点で見れば、帯域差が明確にあるのは4MB(4×1MB)以上だ。ここで20GB/sec以上の帯域を確保できていることが、平均値の底上げにつながっているのは理解できる。

問題はSkylakeで、16KB(4×4KB)や256KB(4×64KB)における性能が妙に高くなっている。これは明らかにHaswell/Broadwellとは異なる傾向である。16KBはL1 Hit、256KBはL2 Hitの領域であり、このあたりに改善があると考えて良いだろう。逆に4MBではHaswellが8GB/sec程度、Skylakeが9.5~10GB/sec程度で改善があるようにも見えるが、ほかの要因の可能性も考えられる。このあたりは別のテストの結果を見て判断する必要があるだろう。

で、純粋にCache/MemoryのBandwidthを測定した結果がグラフ3である。定格3.3GHz/最大3.7GHzのBroadwellがやや低いのは当然として、ほぼ同一周波数のHaswellとSkylakeでは、L1(32KB付近)で100GB/sec程度、L2(256KB)で120GB/sec程度、L3(8MB)でも50GB/secほどの差がついており、間違いなくこのあたりに手が入っていることが明確だ。

ちなみにGodavariは大差がついているが、ほかが4core/8threadに対し、こちらは2Module/4coreという構成で、しかもL3を持たないうえに動作速度もやや低めなことを考えると妥当な結果だろう。

帯域は増えている一方で、Latencyは? という前に、補足の形でMemory Bandwidth(グラフ4)も示しておく。StreamのIntegerとFloat、それとグラフ3における256MB~4GBの平均値をまとめたものだが、これはDDR3-1866とDDR4-2133の差がそのまま素直に出ている感じである。

また、StreamではHaswellとBroadwellが同程度なのに、256MB~4GBの平均値でBroadwellの帯域が多めなのは128MBのL4キャッシュの影響があると推測できる。なお、このグラフで一番悲しいのは、DDR3-2133を利用しているにも関わらず、その性能が全然発揮できていないGodavariではないかと思う。

いよいよLatencyの方を見ていく。グラフ5~7がGlobal Data Memoryに対してのSequential/In-Page Random/Full RandomでのアクセスパターンでのLatencyである。ちょっとグラフが重なり合っていてわかりにくいが、L1~L2(256KBまで)の範囲ではHaswell/Broadwell/Skylakeは完全に一致している。

目立った差があるのはL3の範囲で、特に8MBあたりにおいては、L3が6MBしかないBroadwellのLatencyが増えるのは当然として、In-Page Random(グラフ6)におけるSkylakeのLatencyが1MBあたりとほとんど変わらない(Haswellはそれなりに増える)のが特徴的である。

もっともFull Random(グラフ7)になるとそれなりに暴れるのは同じだが、ここでは逆に512KBあたりのLatencyがBroadwellと同じ程度に抑えられているのが特徴的である。

グラフ8~10はInstruction/Code Memoryに対するLatencyの結果である。こちらはさらに興味深い。グラフ5とグラフ8を比較してもらうと分かりやすいが、例えば2MBのSequential Accessの場合、グラフ5だとHaswell/Broadwell/Skylakeはいずれも、13cycle前後であるが、グラフ8を見るとHaswell/Broadwellが14/15cycleなのにSkylakeは10cycleまで短縮されている。

この傾向はIn-Page Random(グラフ9)でも多少読み取れており、明らかにメモリアクセスの領域でもSkylakeはHaswellを大幅に下回るLatencyで済んでいる。Broadwellはもっと低いが、これはL4の効果と思われるのでちょっと事情が異なる。

さすがにFull Random(グラフ10)のメモリアクセスとなると、相応にLatencyは増えるが、これはそもそもメモリアクセスのLatencyが増えているから仕方がない。またグラフ8~10に共通であるが、32KB~128KBというエリアでは間違いなくSkylakeが最もLatencyが減っており、これは顕著な違いと言って良い。

メモリ周りではもう一つ、TSX命令の効果も確認してみた。グラフ11はDatabase Transactional(Select/Updateの組み合わせ)、グラフ12はUpdate Onlyの結果である。TSX命令を実装しつつも、"バグあり"ということで無効化されているHaswellはGodavariと大きく変わらず、最大でも10MTPS(Transactions Per Second)程度にとどまっている。

これに対し、TSX命令をきちんと利用できるBroadwellとSkylakeでは、Select/Updateで最大45MTPS、Update Onluでも28MTPSを実現しており、きちんとTSX命令を使うと性能が出ることが確認できたと言える。

最後にMemoryというよりは、PCI Express周りとなるが、DirectX 10/11を利用したVideo Memory Bandwidthの結果である。グラフ13はInternalで、GeForce GTX 780を使った場合は、オンチップのGDDR5にアクセスしているので、基本的にそれほど性能差がない。Godavariのみやや性能が低いのは、プロセッサ自身の性能の低さで、十分な量のコマンドをCPUからGPUに送りきれないというあたりだと思う。

内蔵GPUの方は、それぞれのGPUコアからのMemory Accessの性能ということになる。ここでも圧倒的なのはBroadwellであるが、Skylakeもそう悪くない性能を示しており、Broadwellには及ばないものの確かに性能改善が見られる。

グラフ14はInterfaceで、GeForce GTX 780を使った場合は、PCIeの帯域ということになる。これに関しては、意外にもSkylakeの性能はDX10/DX11を問わず、あまりかんばしくない。面白いのはBroadwellも同じで、Haswellと大きな違いが見られる。

Internalの場合はやや複雑で、内部メモリ間でのデータ転送が、一度GPUコアを通るといった点が、ただのメモリ転送と異なる。System to Device、つまりCPUからGPUへの転送で、Broadwellがかなり高速なのは、実質的にL4からGPUコア経由でL4への書き戻しという形になっているためと思われる。

ところがDevice to System、つまりGPUコアからCPUコアへの転送だと、GPUコアから直接L4に書き出すことができずに、一度Memoryを経由することになるようで、せっかくのL4コアの効果が発揮できないのが分かる。

謎なのはSkylakeの性能の低さで、System to DeviceはHaswellとほぼ同等なのが、Device to SystemではHaswellの半分以下(Godavariより若干マシという程度)に落ち込んでいるのはどういう理由なのか、ちょっと理解しにくい。