Coelacanth's Dream

Cannon Lake を追う

「Cannon Lake はキャンセルされた」というのが共通認識としてあるが、具体的にいつ頃キャンセルされたかはすぐには浮かばない。自分がそうだ。
調べてみたが明確な答えは無いし、Intel 内部での決定がいつ下されたかは知りようがない。
思うに、せめてものと 2018/08 に Core i3-8121U(Cannon Lake) を搭載した NUC が発表され1、そして 2019/01 の CES で Ice Lake が発表され2、世間の興味がそちらに移った頃、そのあたりが個人的な感覚で 「Cannon Lake がキャンセルされた」と言うにふさわしい時期なのではだろうか。

そして、オープンソースドライバーの Mesa3D には Cannon Lake のみを対象としたコードを取り除くマージリクエストが投稿され3、intel-graphics-compiler では、Cannon Lake プラットフォームはもう死んだものとしている。4

そうして Cannon Lake が埋められ、最新の CPU/GPU の情報を追う中で忘れる前に、一度 Cannon Lake がどんなプロセッサであったかをまとめて記しておきたい。

Cannon Lake

CPU

CPU のキャッシュ構成は Skylake 同様に、コアあたり L1D/Iキャッシュは 32KB、L2キャッシュは 256KB、L3キャッシュは 2MB。
Skylakeアーキテクチャ から対応命令が追加されており、AVX512系、SHA-NI に対応している。
だが CPUアーキテクチャの詳細に関してはほとんど明かされておらず、AVX512 をどのように実行しているかは不明。512-bit ベクタユニットを持つ 1つのポートで実行するのか、命令を分解し、256-bit ベクタユニットを持つ 2つのポートで実行するのか。
Ice Lake (Client) は前者の方式でサポートし、Skylake (Server) と Ice Lake (Server) は両方の方式を併せ持つ。
AnandTech の Ian Cutress 氏が検証を行なった所では、シングルスレッドで y-Cruncher を実行した時の性能が Kaby Lake から大きく向上しているため、Ice Lake (Client) 同様の実装になっている可能性が考えられる。5
しかし、それは 2.2GHz に揃えた検証の結果であり、AVX使用時のクロックでは Kaby Lake が 1GHz 近く高いこともあり、デフォルトの TDP 15W で実行した際の性能はそう変わらないものとなっている。

このあたり、初期の 10nmプロセスとそれを採用する Cannon Lake がキャンセルされた理由として、動作クロックの低さが大きかったように思える。
Ice Lake で採用された 10nm(+) では歩留まりと動作クロックの改善が施され、CPUアーキテクチャも IPC向上に力を入れたものとなった。

GPU

GPU は Skylake や Gemini Lake 等より世代が進んだ Gen10アーキテクチャ となるが、採用は Cannon Lake のみとなった。

各バリアントでの GPU 規模は一部ソースコードに記述されているが、微妙に仕様が異なっている。
恐らく、Mesa3D は Cannon Lake-U/Y (2+2) で想定されていたバリアントが記述され、media-driver ではそれよりも上位の SKU、例えば Cannon Lake-H(仮) 等も想定したものなのだろう。

Gen10 GPU
(Mesa3D)
GT0.5 GT1 GT1.5 GT2
Slice 1 1 2 2
Sub-Slice 2 3 4(2+2) 5(2+3)
L3cache Bank 2 3 6 6
Total EU 16 24 32 40

出典: src/intel/dev/gen_device_info.c · 559b26b7ee093c2cbe446bf8023876642deadcee · Mesa / mesa · GitLab

Gen10 GPU
(media-driver)
GT1 GT1.5 GT2 GT3 GT3e
Slice 1 1 2 4 4
Sub-Slice 2 3 4 9 9
L3cache Bank 2 3 6 12 12
L3cache Size 512KB 768KB 1536KB 3072KB 3072KB
Total EU 16 24 32 72 72

出典: media-driver/media_sysinfo_g10.cpp at bdbce9ce524e1aaa2a5c9770899d4762f443e0b4 · intel/media-driver

Cannon Lake GT3/e の 9Sub-Slice、72EU、eDRAM対応という点は Skylake GT4/e と同じだが、Skylake GT4/e が 3Slice、L3キャッシュサイズ 2304KB、バンクあたり 192KB だったのに対し、
Cannon Lake GT3/e では 4Slice、L3キャッシュサイズ 3072KB、バンクあたり 256KB という構成になっている。

Gen10アーキテクチャ の詳細もまた明かされていないが、その構成から、Gen9アーキテクチャ よりも Slice数、バンクあたりの L3キャッシュサイズを増やし、グラフィクス性能の向上を図ったものと思われる。

ディスプレイ部に関しては、AMD GPU では RDNA /GFX10 世代から対応した DSC(Display Stream Compression) に Gen10アーキテクチャ から対応していたことが窺える記述がある。6

しかし、結局 Cannon Lake の GPU が有効化されることはなく、唯一製品に搭載、出荷されている Core i3-8121U では無効化されている。
そのため、Cannon Lake が死んだというよりも、その GPU部、Gen10アーキテクチャ が埋められようとしていると言った方が正確だろう。

GNA

Ice Lake に搭載された推論アクセラレーター、GNA(Gaussian mixture model and Neural network Acceleration unit) だが、Cannon Lake にも搭載されており、GNA の世代は Ice Lake とは変わらず、Gen1 となっている。7
さらに言えば、GNA は Cannon Lake から搭載されたという訳でもなく、Atom系の Gemini Lake から搭載されているらしい。こちらも Gen1 となる。

そして、調査(ソースコード漁り)の過程で知ったのだが、Atom系である Tremontコア を採用する Elkhart Lake と Jasper Lake にも GNA が搭載されているものの、両者で世代が異なり、
Elkhart Lake は Ice Lake 等と同じ GNA Gen1 を搭載するのに対し、Jasper Lake は Tiger Lake と同じ GNA Gen2 を搭載する。
CPUアーキテクチャや GPU部等、共通点のある両者のプロセッサ間で、GNA の世代を異にした理由は不明。
GNA Gen2 で何が変わったかは GNA で扱える最大レイヤー数が増えたということくらいしか分からない。8

GNA は GPU とは違い、Core i3-8121U でも有効化されている。9

終わりに

Cannon Lake は Skylake 系プロセッサから正統に拡張、強化が施され、メモリインターフェイスでは Ice Lake よりも先に LPDDR4 をサポートしていた。
Intel 10nmプロセス開発難航の影響を受け、歩留まり、動作クロックに恵まれなかったが、アーキテクチャは CPU/GPU 共に進んでいた。
Cannon Lake は確かに Skylake と Ice Lake とを繋ぐプロセッサであったと言えるだろう。

余談

以前、Cannon Lake-H の名がベンチマーク結果から現れ、少し話題となったが、プラットフォーム名とコア/スレッド数しか分からず、調べても特に見つからなかったため、ここでは取り扱わなかった。

また、Coreboot に Coffee Lake RVP ボード関連のファイルが追加された時、Cannon Lake RVP 関連のファイル名と変数名をリネームし、他はコピーといった感じであった。10そのため、実際には Cannon Lake-H ではなく初期の Coffee Lake-H が動作していた可能性も否定できない。
半ば Cannon Lake-H が都市伝説とも思える中で惜しまれるのは、やはり情報の少なさである。

Intel は Cannon Lake に関する資料をまだ公開しておらず、ark.intel.com の Core i3-8121U ページの Technical Documentation には何も置かれていない。
Intel® Core™ i3-8121U Processor (4M Cache, up to 3.20 GHz) Product Specifications いつか資料が公開され、Intel の方から再び Cannon Lake を語ってくれる日を期待している。