Alderlake i9 12900K のコアとキャッシュの構成と速度

Alderlake i9 12900Kのコアとキャッシュの構成はこんな感じになっているとされている。

まずP-coreが8個でこの子たちは1.25MBのL2キャッシュを独立して持っている。

一方、E-coreは4個をひとつのかたまりにしたのが2つで、かたまりごとに2MBの共有L2キャッシュを持っている。

そして、30MBのL3キャッシュは全コアで共有している。

i9_12900K_coremap.png







Alderlakeのコア・キャッシュ構成



こうしたCPUの構成をOSがどう認識しているかは、Coreinfoというアプリを使うか、GetLogicalProcessorInformationという関数を呼ぶことで確認することができる。

今回は、自作アプリのram_speedの中でGetLogicalProcessorInformation関数で情報を取得し、整理して表示してみた。

ram_speed64.exe --cpuinfo

まず、CPU cores では論理コアと物理コアの対応関係を確認している。"P"のついているコアはP-coreなので、HTTオンで1物理コアで2論理コア、"E"のついているコアはE-coreなので、HTTオフで1物理コアで1論理コアとなっている。


12th Gen Intel Core i9-12900K [5.00GHz] (8P+8E,16C/24T)
CPU cores
core 0 P : **----------------------
core 1 P : --**--------------------
core 2 P : ----**------------------
core 3 P : ------**----------------
core 4 P : --------**--------------
core 5 P : ----------**------------
core 6 P : ------------**----------
core 7 P : --------------**--------
core 8 E : ----------------*-------
core 9 E : -----------------*------
core 10 E : ------------------*-----
core 11 E : -------------------*----
core 12 E : --------------------*---
core 13 E : ---------------------*--
core 14 E : ----------------------*-
core 15 E : -----------------------*


CPU Cachesでは各キャッシュと論理コアの対応関係を確認できる。
・L1D/L1Iはそれぞれのコアで独立
・L2はP-coreでは独立だけど、E-coreでは4コアごとに共有されている
・L3は全コアで共有
というのがOSでもきちんと認識されていることが確認できる。


CPU caches
cache L1D : **---------------------- : 12way 48KB
cache L1I : **---------------------- : 8way 32KB
cache L1D : --**-------------------- : 12way 48KB
cache L1I : --**-------------------- : 8way 32KB
cache L1D : ----**------------------ : 12way 48KB
cache L1I : ----**------------------ : 8way 32KB
cache L1D : ------**---------------- : 12way 48KB
cache L1I : ------**---------------- : 8way 32KB
cache L1D : --------**-------------- : 12way 48KB
cache L1I : --------**-------------- : 8way 32KB
cache L1D : ----------**------------ : 12way 48KB
cache L1I : ----------**------------ : 8way 32KB
cache L1D : ------------**---------- : 12way 48KB
cache L1I : ------------**---------- : 8way 32KB
cache L1D : --------------**-------- : 12way 48KB
cache L1I : --------------**-------- : 8way 32KB
cache L1D : ----------------*------- : 8way 32KB
cache L1I : ----------------*------- : 8way 64KB
cache L1D : -----------------*------ : 8way 32KB
cache L1I : -----------------*------ : 8way 64KB
cache L1D : ------------------*----- : 8way 32KB
cache L1I : ------------------*----- : 8way 64KB
cache L1D : -------------------*---- : 8way 32KB
cache L1I : -------------------*---- : 8way 64KB
cache L1D : --------------------*--- : 8way 32KB
cache L1I : --------------------*--- : 8way 64KB
cache L1D : ---------------------*-- : 8way 32KB
cache L1I : ---------------------*-- : 8way 64KB
cache L1D : ----------------------*- : 8way 32KB
cache L1I : ----------------------*- : 8way 64KB
cache L1D : -----------------------* : 8way 32KB
cache L1I : -----------------------* : 8way 64KB
cache L2 : **---------------------- : 10way 1280KB
cache L2 : --**-------------------- : 10way 1280KB
cache L2 : ----**------------------ : 10way 1280KB
cache L2 : ------**---------------- : 10way 1280KB
cache L2 : --------**-------------- : 10way 1280KB
cache L2 : ----------**------------ : 10way 1280KB
cache L2 : ------------**---------- : 10way 1280KB
cache L2 : --------------**-------- : 10way 1280KB
cache L2 : ----------------****---- : 16way 2048KB
cache L2 : --------------------**** : 16way 2048KB
cache L3 : ************************ : 12way 30720KB


こんな感じでWindowsはP-coreから順に認識しているので、タスクマネージャ上でもP-coreが先に来る表示になっている。負荷がかかった時の傾向が異なるので、見ていて面白い。(下はx265エンコーダ中の例)

なんとなく、なるべくP-coreの2スレッド目はあまり使わないようにしているのがわかる。やはりHTTで2スレッド目を入れると全体のスループット自体は上がるけど、コア内リソースを共有することで個々のスレッドの速度は落ちるため、これを避けようとしているのだと思う。

一方で、E-coreについてはまたちょっと違った負荷のかかり方になっていて、半分ぐらい使っている感じ。

i9_12900K_coremap_task_manager.png



Alderlakeのコア間通信時間



ここまで紹介したように、Alderlakeはキャッシュの構成もP-core/E-coreで異なり、ちょっと変わった感じになっている。

こういうキャッシュの構成はコア間の通信にも効いてくるので、ram_speed 0.03で各物理コア間の通信時間を測った。

i9_12900K_intercore_latency.png
※P-coreはHTTがあるので、同一コア内の通信がある。E-coreにはHTTがないので、同一コア内の通信がなく空白。

P-core間の通信は比較的高速で、P-coreとE-core間の通信、それから別のかたまりのE-coreとの間の通信がそれと比べるとやや遅い感じになっている。

よくわからないのは同じかたまりに入っているE-core同士の通信で、L2キャッシュを共有しているのだから別のかたまりのE-coreとの間の通信よりは当然速かろうとと思ったら、なぜか逆に一番遅くなっている。

解せぬ。

まあ、わずかな差なのでそこまで影響はなさそう(少なくともRyzenのCCD間通信の遅さと比べればなんてことはない)だが、E-core同士の通信はちょっと遅いかもね、という感じ。



Alderlakeのキャッシュとメモリの速度



あとはAlderlakeのキャッシュとメモリの速度を図るため、いつもの自作アプリ(ram_speed)で測定してみた。

今回は下記の3パターンで測定。
・全コア(ram_speed64)
・P-coreのみ(ram_speed64 --target pcore)
・E-coreのみ(ram_speed64 --target ecore)

DDR5環境でもやってみたかったけど、DDR4環境なので仕方ない。

比較環境
CPUi9 12900Ki7 11700K
Gear1
Ryzen9
5950X
Ryzen7
3700X
Ryzen7
1700X
Cores16C/24T8C/16T16C/32T8C/16T8C/16T
RAMDDR4-3600
2ch
DDR4-3600
2ch
DDR4-3600
2ch
DDR4-3600
2ch
DDR4-2666
2ch
Timing16-19-19-39-118-22-22-42-219-20-20-40-118-22-22-43-116-16-16-38-1




まずキャッシュとメモリのレイテンシの測定で、キャッシュの構造のわかりやすいアクセスパターンから。

P-coreのL2=1.25MB, L3=30MB、それからE-coreのL2=2MB, L3=30MBが見えていると思う。11700Kと比べるとL2が増加した分(512K→1280K)、レイテンシは若干増えているのがわかると思う。一方で、L3については11700Kと比べて容量増加にもかかわらずレイテンシは削減できているように見える。

E-coreはレイテンシ長め。

i9_12900K_20211122_ram_latency_page.png



次に完全ランダムアクセスのレイテンシ。

先ほどと同じで、12900KのP-coreを11700Kと比べると、L2に関してはキャッシュ量の増大もあってレイテンシがやや増加、L3については短縮傾向にあるのがわかる。(ただしメモリアクセスでは同じDDR4なのでほぼ同等)

5950Xとの比較すると、2MB~32MB前後では12900Kのほうがレイテンシが大きい。これはやはり5950Xはこのあたり巨大なキャッシュによりレイテンシをかなり抑えられているのが大きいと思う。ただし、メモリアクセスのレイテンシは微妙に12900Kのほうが小さい。

E-coreは全体的にレイテンシは大きめ。まあこのあたりは効率重視なコアなので仕方ないだろう。

i9_12900K_20211122_ram_latency_full.png



シングルスレッドのメモリ・キャッシュ帯域。

まず12900K Pcoreから見ると、L1帯域が最大なのはRocketlake(11700K)。これはAVX512が唯一使えるCPUであるため。L2からは12900K Pcoreのほうが帯域が広く、そしてキャッシュ量の大きいことがわかる。L2までは5950Xよりも帯域が広い。

L3付近は11700Kよりは改善がみられるものの、相変わらずRyzen(5950X)のほうが速い。ただし、さらにサイズが大きくなってメモリアクセスの領域に入ると逆転している。12900Kのングルスレッドのメモリ帯域は前世代のRocketlakeから大幅に向上しており、コアの内部バッファ(load buffer, L1 fill bufferなど)拡張等が効いているのだと思われる。

Ecoreのほうを見るとやはりキャッシュの帯域は比較的狭い。特にL1で差が大きいのはEcoreが基本128bitでの実装で、AVX/AVX2の256bitロードも128bitx2として処理されるためだと思う。その結果L1~L2までほぼフラットに帯域が出るのは逆に面白い。

EcoreからのL3以降へのアクセス帯域はかなり控えめ。リングバスとの接続が狭いとかそういう感じ?

i9_12900K_20211122_ram_cache_bandwidth_st.png



マルチスレッドのメモリ・キャッシュ帯域。

基本的な傾向はほぼ変わらず。

L1キャッシュ帯域は5950Xと12900Kはほぼ互角だが、全体的にみると16のPcoreを持つ5950Xのほうがキャッシュサイズも大きいこともあって広い帯域が確保できている。

i9_12900K_20211122_ram_cache_bandwidth_mt.png



最後にスレッド数を変えたときのメモリ帯域。

12900Kの1スレッドでのメモリ帯域は37.1GB/sで、11700Kの32.2GBsから大きく向上している。ただ、4スレッド前後では11700Kのほうが速度が出ているのが謎。

最終的なマルチスレッドでの帯域は最大で49GB/sぐらいで、これは11700Kや5950Xもだいたい同じなので、このあたりがDDR4-3600 2chの限界なのかもしれない。

Ecoreの1スレッドのメモリアクセス性能はやはり少し低め。また、5スレッド目を使い始めると少しまた帯域が伸びることから、2つあるEcoreのかたまりを両方使わないと十分なメモリアクセス性能が出ないみたい。やはりEcoreのブロックからリングバスとの間がちょっと狭いのかな、と感じるような結果だ。

ただ、全Ecoreを使った時のメモリ帯域は45.4GB/sと、Pcoreの49.1GB/sとさほど変わらない。マルチスレッドでのメモリアクセス性能は悪くなさそうだ。

i9_12900K_20211122_ram_bandwidth.png



終わりに



IntelのメインストリームCPUはNehalemからSkylakeまで長くL2=256K、L3=2MB/コアを継続してきた。

一方Zen2以降製造プロセスで優位に立ったRyzenは、IOダイにより生じるレイテンシ増加の影響を抑制する意図もあってか、高速なキャッシュを多く搭載するようになってきている。

Intelも10nmに移行してからIcelake→Tigerlake/Alderlakeとキャッシュ量を増加させていて、特に今回の12900Kの結果からはキャッシュ・メモリに関しても性能向上が図られていることが確認できた。こういったところもPcoreの非常に強力なシングルスレッド性能を下支えしているのだと思う。(まあキャッシュ量の増加はレイテンシを増加させやすいらしいので大きければいいというものでもないらしいが…)

Ecoreのみについても確認してみたが、Pcoreと比べると微妙だが、少なくとも一昔前のAtomとは全然違って、キャッシュやメモリアクセスに関してもそこそこの性能が確保できていることがわかった。こちらは効率重視なので、そこまで性能が求められるわけではないことを思えば、まあこのぐらいで十分、ということなのだと思う。
スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先: rigaya34589@live.jp
github twitter

最新記事
最新コメント
カテゴリ
月別アーカイブ
カウンター
検索フォーム
いろいろ
公開中のAviutlプラグインとかのダウンロード

○Aviutl 出力プラグイン
x264guiEx 3.xx
- x264を使用したH264出力
- x264guiExの導入紹介動画>
- x264guiExの導入
- x264guiExのエラーと対処方法>
- x264.exeはこちら>

x265guiEx
- x265を使用したH.265/HEVC出力
- x265guiExの導入>
- x265.exeはこちら>

QSVEnc + QSVEncC
- QuickSyncVideoによるHWエンコード
- QSVEnc 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC
- NVIDIAのNVEncによるHWエンコード
- NVEnc 導入/使用方法>
- NVEncCオプション一覧>

VCEEnc + VCEEncC
- AMDのVCE/VCNによるHWエンコード
- VCEEnc 導入/使用方法>
- VCEEncCオプション一覧>

svtAV1guiEx
- SVT-AV1によるAV1出力
- svtAV1guiExの導入>
- SVT-AV1単体はこちら>

VVenCguiEx
- VVenCによるVVC出力
- VVenCguiExの導入>

ffmpegOut
- ffmpegを使用した出力
- ffmpegOutの導入>


○Aviutl フィルタプラグイン
自動フィールドシフト (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: aji様

clfilters 
- OpenCLベースの複数のGPUフィルタ集
- 対応フィルタの一覧等はこちら

エッジレベル調整MT (ミラー)
- エッジレベル調整の並列化/高速化
- SSE2~AVX512対応
- オリジナル: まじぽか太郎様

バンディング低減MT (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: まじぽか太郎様

PMD_MT
- SSE2~AVX512による高速化版
- オリジナル: スレ48≫989氏

透過性ロゴ (ミラー)
- SSE2~FMA3によるSIMD版
- オリジナル: MakKi氏

AviutlColor (ミラー)
- BT.2020nc向け色変換プラグイン
- BT.709/BT.601向けも同梱

○その他
Amatsukaze改造版
- AmatsukazeのAV1対応版

rkmppenc
- Rockchip系SoCのhwエンコーダ

x264afs (ミラー)
- x264のafs対応版

aui_indexer (ミラー使い方>)
- lsmashinput.aui/m2v.auiの
 インデックス事前・一括生成

auc_export (ミラー使い方>)
- Aviutl Controlの
 エクスポートプラグイン版
 エクスポートをコマンドから

aup_reseter (ミラー)
- aupプロジェクトファイルの
 終了フラグを一括リセット

CheckBitrate (ミラー, 使い方, ソース)
- ビットレート分布の分析(HEVC対応)

チャプター変換 (使い方>)
- nero/appleチャプター形式変換

エッジレベル調整 (avisynth)
- Avisynth用エッジレベル調整

メモリ・キャッシュ速度測定
- スレッド数を変えて測定
- これまでの測定結果はこちら

○ビルドしたものとか
L-SMASH (ミラー)
x264 (ミラー)
x265 (ミラー)
SVT-AV1 (ミラー)

○その他
サンプル動画
その他

○読みもの (ミラー)
Aviutl/x264guiExの色変換
動画関連ダウンロードリンク集
簡易インストーラの概要

○更新停止・公開終了
改造版x264gui
x264guiEx 0.xx
RSSリンクの表示
リンク
QRコード
QR