Ryzen Threadripper 2920Xは12コアのプロセッサであり、6コアのRyzen 5 2600Xで使われるダイを2枚搭載し相互接続したものです。
1枚のダイに12コアを詰め込んでしまうとチップ面積が大きくなり歩留まりが悪化し製造原価が急増して価格が高騰してしまいます。価格を安く抑えるためにあえてダイを分割し2枚構成にしています。またこのダイはRyzen 5 2600Xといったデスクトップ向けのプロセッサでも使われているものと同じマイクロアーキテクチャであるため、同じチップを使い回すことによりスケールメリット(規模の利益)を享受し製造原価を引き下げています。
しかし、ダイを分割したことによりキャシュミス時のレイテンシが増加しており、L3キャッシュミスが起きた場合は隣のダイのL3キャッシュからデータをLoadする必要があるためパイプラインのストールが起きやすくなっています。パイプラインの目詰まりによって命令がスムーズに流れないということです。
データアクセスの「空間的局所性」と「時間的局所性」を有するアプリケーションの実行時はむしろRyzen 5 2600Xのほうがが速いこともあります。
CCXあたり1コアが無効化され3コアのみ有効
CCX(Core Complex)というAMD独自のプロセッサ用語があります。その定義は「L3キャッシュを共有した物理コアの集合体」です。以下の画像で左と右にそれぞれ横長の長方形が2つ観えますが、その長方形1つがCCXです。このダイにはCCXが2基搭載されています。
1基のCCXあたり4コア搭載しているのですが、このRyzen Threadripper 2920Xでは1コアを意図的に無効化し3コアのみ有効化しています。なぜ意図的に無効化するかというとダイの良品率を向上させ製造原価を引き下げるためです。
ダイを2枚接続し3コアのCCXを4基搭載し12コアにしたのがRyzen Threadripper 2920X
Ryzen Threadripper 2920Xでは上記ダイを2枚搭載しています。ダイ1枚あたりにCCXは2基あるため合計CCX4基です。CCX1基あたり3コアが有効化されているため合計12コアになります。
このアーキテクチャで注意すべき点は、CCXのL3共有キャッシュにヒットせずさらに同じダイに乗っているCCXでもキャッシュミスとなった場合、もう一方のダイのキャッシュからデータをLoadするキャッシュミス・ペナルティが大きくなってしまうところです。キャッシュミスペナルティとはすなわちレイテンシサイクル数を意味します。
ただし、この2920Xより更に上位の2970WXと2990WXよりはまだマシです。サフィックスが”WX”のRyzen Threadripperは4つのダイを搭載しており、そのうち2つのダイはメモリ(RAM)に接続さていません。
この図で言えば、Die3上のCCXでL3キャッシュミスが発生した場合、他のダイを経由しないとメモリからデータをレジスタにLoadすることができません。
つまり一度別のダイを経由しなければならないためレイテンシが非常に大きくなります。メモリアクセス自体が相当レイテンシの大きいペナルティですが、それに加えてさらに1ホップ余計なオーバーヘッドがあることを意味します。
キャッシュヒット率が高いアプリケーションならRyzen Threadripperではなく6コアのRyzen 5 2600Xが高速になります。ダイが1枚しかなく、CCXのL3キャッシュミスが発生しても隣のCCXが同じダイにのっているため、そのCCX上のL3キャッシュにデータが乗っていればキャッシュミスペナルティが小さいからです。
一方でキャッシュヒット率がかなり低くほぼキャッシュが効かないアプリケーションの場合は2950Xや2920Xのほうが高速です。キャッシュミスでメモリまでデータを取りに行く場合でも、別のダイを経由することなくメモリアクセス可能だからです。
その中間に位置するキャッシュヒット率が高くもなく低くもないアプリケーションの場合は、Ryzen Threadripper 2990WXか2970WXが高速になります。たとえ別のダイのキャッシュであってもある程度キャッシュにヒットしてくれればメモリアクセスが減少するため、メモリアクセス時の多大なペナルティの影響を避けられるためです。
第8世代Core i7 8086KとRyzen Threadripper 2920Xの性能が互角
Ryzen Threadripper 2920Xと同じ2018年に発売されたCore i7 8086Kと比較してみます。
結果は互角です。これは重要な意味をもっていて、12コアのRyzen Threadripper 2920Xと6コアのCore i7 8086Kが同じ性能ということは1コアあたりの性能に2倍もの差が付いていることになります。この差は動作クロックだけでは説明できません。2920Xのブーストクロックは4GHz程度で、8086Kは5GHzだから2倍も差がないからです。
まず8086Kが優秀なのはAVX 2.0SIMD演算命令を搭載しているため1サイクルあたり256bit幅の浮動小数点演算を2回実行できてしまうことです。64bit表現の浮動小数点数なら4×2=8回分も1サイクルで演算できてしまいます。つまり1クロックあたりに実行できる演算回数がCore i7 8086Kのほうが圧倒的に多く、これがたった6コアのプロセッサが12コアのプロセッサに勝っている要因です。実際にRyzenプロセッサはSIMD演算命令の実装の難しさから距離を置いて、2920XのSIMD演算器は非常に乏しいものになっています。これが動作クロックに2倍の違いがなくてもここまで1コアあたりの性能に差がある理由です。
第9世代Core i7 9700KはRyzen Threadripper 2920Xを僅差で打ち負かす
次に同じ2018年発売の第9世代Intel Core i7 9700Kと比較してみます。Core i7 9700Kは8コアのプロセッサです。
このように+2%だけCore i7 9700KがRyzen Threadripper 2920Xに勝利しています。Core i7 8086Kから2コアも増えたのにたった+2%と思いますが、それも当然で9700Kの動作クロックは8086Kより低いためです。8コアのプロセッサが12コアのRyzenに勝った要因も上記の理由と同じです。
8コアのCore i9 9900Kでも12コアのRyzen Threadripper 2920Xに余裕で勝利
9700Kでも十分勝ててしまったので本来ならCore i9 9900Kを持ち出すまでもないわけですが一応比較しておきます。
Core i9 9900KがRyzen Threadripper 2920Xに+7%勝利しています。発売時期が同じで+7%の差は大きな差です。しかも12コアと8コアの比較で+7%なので、8コアと8コア同士の比較になるとさらにCore i9 9900KがRyzenを引き離すことになります。
本来は内蔵グラフィクス非搭載の12コアCore i9 9920Xと比較すべきだがCore i7でも余裕で勝ててしまう
2018年発売の第2世代Ryzen Threadripperは「HEDT(High End Desktop)」用CPUにカテゴライズされるプロセッサです。このカテゴリに相当するのがIntel Core-Xというプロセッサで同じ2018年発売のCore i9 9920Xです。
Core i9 9900KやCore i7 9700Kは内蔵グラフィクスを搭載しているためグラボなしでディスプレイ出力できます。この内蔵グラフィクスは汎用コアの性能を高める上では邪魔です。チップ状の面積の35%近くがこの内蔵グラフィクスであるため、内蔵グラフィクスを搭載していることでCore i9 9900KやCore i7 9700Kはハンデがあります。Ryzen Threadripper 2920Xは内蔵グラフィクスを搭載していないからです。
しかしそのようなハンデがありながらもCore i7 9700KでRyzen Threadripper 2920Xに勝ててしまいました。そのためわざわざCore i9 9920Xを持ち出すまでもなかったわけです。
9920XのようなCore-XシリーズにはAVX-512拡張命令というSIMD演算命令が実装されています。512bit幅のFMA演算器×2です。これは256bit幅のFMA演算器×1しかないCore i7 9700KやCore i9 9900Kの4倍の浮動小数点演算能力です。そのようなAVX-512 SIMD演算命令を搭載したCore-Xを持ち出したら、Ryzen Threadripperが圧倒的大差で負けてしまうので今回はHEDT向けではなく通常のデスクトップ向けIntel Coreを相手に比較してみました。