Alder Lake を買ったので、Pコア、Eコア、Rocket Lake、Coffee Lake でシングルスレッド時の速度比較をしました。
- ソフトウェア
-
- Ut Video Codec Suite 23.0.1
- vctest 2.4.0
- Alder Lake
-
- CPU: i5-12600K / P-core Base 3.7GHz, TB Max 4.9GHz / E-core Base 2.8GHz, TB Max 3.6GHz / 10C16T (6P4E)
- Mem: DDR4-3200 22-22-22-52 / 32GB
- Rocket Lake
-
- CPU: i5-11400 / Base 2.6GHz, TB Max 4.4GHz / 6C12T
- Mem: DDR4-3200 22-22-22-52 / 32GB / Gear1
- Coffee Lake
-
- CPU: i7-8700 / Base 3.2GHz, TB Max 4.6GHz / 6C12T
- Mem: DDR4-2666 16-18-18-35 / 64GB
今回は XTU での PL1 の設定はしていません(結果として意味がなかったので)。
エンコード/デコードの本質的な処理の速度を見るために色空間の変換を一切しない YV24 <-> 内部 YUV444 の組み合わせと、色空間の変換の様子を見るために RGB24/32 <-> 内部 RGB444/YUV444 の組み合わせを計測しました。
まず見て分かるのは、Eコアは Rocket Lake や Coffee Lake より遅いということです。もちろんPコアより遅いです。遅いこと自体は別に驚くことは無いのですが、遅さの振る舞いについては予想外の結果になりました。
まず、ULY4 の fsemedian では、遅いとはいえせいぜいクロック比程度の差しかありません。デコードの方はクロック比よりも若干Eコアの方が速く、これは L2 キャッシュのサイズによるものではないかと想像します。(Pコアは 1.25MB/core なのに対して、Eコアは 2MB/4core でシングルスレッド計測なので 2MB 丸ごと使用できる)
驚いたのは ULY4 の median/gradient です。デコードはクロック比程度の差ですが、エンコードはEコアはPコアの 1/4 程度の速度しか出ていません。クロック比の影響を除外しても 1/3 程度です。UtVideo は並列処理時はフレームを等分して各スレッドに分配しますが、Eコアを含む全コアを使うとEコアが足を引っ張ってPコアだけを使った場合より遅くなってしまいます。
いくらなんでも遅すぎない?と思って @InstLatX64 の資料(Pコア、Eコア)をチェックしたところ、エンコードで重要な位置を占める SHLD 命令がPコアでは L/T = 3/1 なのに対してEコアでは 13/13 で、ものすごく遅いことが分かりました。等価な命令にバラした方が速い。
UMY4 は SIMD 命令による処理を行いますが、EコアはPコアの半分ぐらいの速度になっています。1/4 の面積で半分の性能ですし、こんなもんなのではないでしょうか。
色空間の変換で使っている SIMD 命令は UMxx での圧縮処理で使うのとは多少違う命令を使いますが、今回の計測ではこれといった傾向はつかめませんでした。
しかしこれ厄介だなぁ。
[UtVideo] Gracemont 向けの最適化
前の記事で、Alder Lake のEコアである Gracemont では SHLD 命令がものすごく遅いせいで ULxx のエンコードが遅いという話をしました。 じゃあってんで SHLD 命令を等価な命令にバラして書いて計…