新たに AMD Ryzen7 3700X の環境ができたので、x265エンコードの速度を比較してみた。
セットアップ
ハードウェア環境
既存の Intel 環境は以下の通り。
- CPU: Intel Xeon W-2155 (10C20T, MaxTurbo: 4.5GHz, Skylake-X)
- Memory: DDR4-2666 8GB x8 (ECC Registed)
新しい AMD 環境は以下。
- CPU: AMD Ryzen 7 3700X (8C16T, MaxTurbo: 4.4GHz, Zen2)
- Memory: DDR4-3200 16GB x2
ソフトウェア環境
x265 は現時点での最新版をそれぞれの環境用に最適化してビルドした。
- x265: v3.3, 8bit+10bit+12bit
cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
なお、既存環境(Xeon W-2155) については、元々ビルドしてあった
- x265: v3.0, 10bit
cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
についても合わせて評価する。
比較方法
いくつかのサンプルについて、bit-depth も変えつつ比較する。
エンコードオプションは共通、スレッド数については明示的に指定しない。
デフォルト値で Xeon W-2155, Ryzen 7 3700X それぞれ 20, 16 threads が適用された。
ちなみにエンコードオプションは以下。
1 2 3 4 5 6 7 |
--output-depth %s --crf %s --fps %s --aq-mode 3 --aq-strength 0.8 --tune animation \ --ipratio 1.4 --pbratio 1.3 --qcomp 0.75 --qpmin 10 --qpmax 51 --qpstep 8 \ --scenecut 70 --keyint 240 --min-keyint 2 --bframes 8 --bframe-bias 0 --b-adapt 2 --ref 6 \ --vbv-maxrate 4000 --vbv-bufsize 4000 --deblock=2:2 \ --rc-lookahead 40 --lookahead-slices 4 --weightb --rect --amp \ --me 1 --subme 3 --rd 3 --max-merge 5 --rdoq-level 2 --tu-intra-depth 3 --tu-inter-depth 3 \ --psnr --ssim" |
テスト素材: 1080p のアニメ 90秒前後
- サンプル #1 @CRF26: 比較的よく動くオープニング、エンコード負荷が高い
- サンプル #2 @CRF27: 比較的静かな箇所、エンコード負荷が低く、よく縮む
結果
CPU の違い
同じ CRF値, bit-depth に対しては、Intel/AMD の違いはなく、
ほとんど同じビットレート, SSIM値の動画が出力された。
# ファイルサイズが 0.01%, SSIMの対数値で5桁目が 1 ズレるか程度の違い。
つまり CPU の違いは純粋に処理速度 (fps) のみで比較できる。
- サンプル #1
bit-depth 出力 bitrate (共通) [kb/s] Intel Xeon W-2155 [fps] AMD Ryzen 7 3700X [fps] 3700X/W-2155 比 8 2886 6.37 7.77 +22% 10 2870 5.31 6.52 +23% 12 2820 5.06 6.31 +25% -
サンプル #2
bit-depth 出力 bitrate (共通) [kb/s] Intel Xeon W-2155 [fps] AMD Ryzen 7 3700X [fps] 3700X/W-2155 比 8 263.3 22.64 28.30 +25% 10 247.8 18.71 23.90 +28% 12 247.9 17.49 22.90 +31%
結果は Ryzen 7 3700X が 25% 前後の差を付けての圧勝だった。
世代が違うとは言え、Intel は IPC もプロセスルールもこの数年は停滞している。
(Mobile用は一部 10nm もリリースはしているが、
Desktop用は基本的に HT を外し付けして、single-turbo を強烈にしているだけ)
Xeon W-2155 は 10C20T, TDP: 140W, $1440 なのに対して、
Ryzen 7 3700X は 8C16T, TDP: 65W, $329 で、この結果である。# 価格は Wikipedia より。
Zen以降で IPC を強烈に改善し、Intel に追いつき(追い越し?)、
苦手としていた x265 エンコードでも AVX2 実装を Zen2 で 改善しているという評価は真っ当のようである。
全コアフルロード時に、W-2155 は AVX2 を使うと仕様上、最大 3.6 GHz までしかブーストされないのに対して、
3700X は 4.0 GHz までブーストされているというのも寄与しているのかも。
bit-depth の違い
bit-depth を変えたときの、処理速度、ビットレート、SSIM を比較する。
数字横の () 内の数字は、対 depth: 10bit 比。
- サンプル #1
bit-depth 出力 bitrate [kb/s] SSIM [dB] 処理速度 [fps] 8 2886 15.787 7.77 (+19%) 10 2870 15.982 6.52 (±0) 12 2820 15.902 6.31 (-3.2%) -
サンプル #2
bit-depth 出力 bitrate [kb/s] SSIM [dB] 処理速度 [fps] 8 263.3 21.784 28.30 (+18%) 10 247.8 22.804 23.90 (±0) 12 247.9 22.786 22.90 (-4.2%)
サンプル #2 に顕著な傾向が出た。
bit-depth を 8 → 10 にすると、処理時間は15%前後増えるものの、
bitrateを抑えながら、画質(SSIM) は向上することができている。
一方で bit-depth を 10 → 12 に増やしても、
少なくともこのサンプルではメリットが無いようだ。
サンプル #1 は元のソース自体が若干破綻気味なのかもしれない。
vbv-maxrate, vbv-bufsize で上限を抑えているのはそういう意図である。
x265 version の違い
Xeon W-2155 については、x265 v3.0 と v3.3 の違いも比較してみた。
bit-depth は 10bit のみ。
数字横の () 内の数字は、対 v3.0 比。
- サンプル #1
x265 ver. 出力 bitrate [kb/s] 処理速度 [fps] SSIM [dB] v3.0 2900 6.53 15.866 v3.3 2870 5.31 (-19%) 15.982 -
サンプル #2
x265 ver. 出力 bitrate [kb/s] 処理速度 [fps] SSIM [dB] v3.0 258.22 15.88 22.875 v3.3 247.79 18.71 (+18%) 22.804
基本的には v3.0 → v3.3 で bitrate は小さくなり、画質(SSIM) は向上しているようである。
一方で、負荷が軽い入力に対しては処理速度は向上しているものの、
極端に負荷の大きな映像に対しては、処理速度が遅くなる場合もあるようだ。
ひょっとするとオプションが追加された、或いはデフォルト値に変更があったのかもしれない。
30分アニメの本編のみを CRF: 26 or 27 でエンコードすると、
おおよそ平均 bitrate: 500~1000 kbps 程度まで縮むので、
比較的負荷の軽い領域が多いことが想像され、
全体的に考えると処理速度向上の恩恵のほうが大きいのかもしれない。