年末だというのに(年末だからか?)コーデックベンチをやっていました。
計測条件は以下の通り
- CPU
- Core i7-2600K (Sandy Bridge, 3.4GHz, 4C8T) と Core i7-4770 (Haswell, 3.4GHz, 4C8T)
- 映像
- crowd_run, 1920×1080, 500f (Xiph.org の Derf’s Test Media Collection にある 4K YUV420 のものを各フォーマットの 2K に変換したもの)
- 計測ツール
- vctest 2.1.0 x64
計測対象コーデックは以下の通り。シェアウェアであるものはライセンスを購入し、機能制限(ロゴが入る)がかからない状態になっています。
- Ut Video Codec Suite 17.2.0 と 17.1.0 (旧版である 17.1.0 も計測しているのは、 17.2.0 でデコードだけ大幅に高速化したので、その比較も兼ねてです)
- MagicYUV 2.0
- AMV4 4.02
- Lagarith 1.3.27
このうち、MagicYUV と AMV4 は AVX2 において特に最適化された処理を行っていると謳われており、AVX2 をサポートする i7-4770 での性能が期待されます。
AMV4 は今時珍しくマルチスレッドをサポートしません。これは動作が元々非常に高速であり、マルチスレッドでなくても十分な速度を確保できるため、不要であると判断されているためです(作者が明言している)
あと、AMV4 はフレーム間圧縮をサポートします。ただし、crowd_run の場合フレーム間圧縮を有効にしても性能がほとんど変わらなかったので、(計測したけど)グラフからは除外しています。
Lagarith が含まれているのは、MagicYUV のページで比較対象として UtVideo の他に Lagarith が挙げられているからです。速度の点では今時見るべきものはありませんが、圧縮比に関してはまあまあアリかと思って含めています。来年はやりません、たぶん。
ところで、半分ぐらいまで計測し終わってから、そういや crowd_run って AMV4 には不利だったような…と思い出しましたが、もうめんどくさくなってきたのでそのまま突き進みました。Big Buck Bunny を使ったテストについては昔書いた Ut Video Codec Suite と AMV4 を比較した記事を参照してください。(ただし、この時はまだ AMV4 のライセンスキーを購入していなかったので、多少不正確な結果となっています)
結果
棒の色は MagicYUV のサイトにあるグラフと近くなるようにしています。
(画像をクリックして拡大)
以下のことが分かります。
- 圧縮比
-
- 圧縮比は Lagarith と UtVideo (median) がほぼ同程度でトップに並ぶ。UtVideo (median) ってこんな成績良かったのか…
- UtVideo (left) は UtVideo (median) に対して圧縮比が明らかに低い
- MagicYUV (median) と MagicYUV (gradient) は圧縮比はそれほど変わらない
- テストクリップの選択の関係もあり、AMV4 では圧縮比がかなり低い
- エンコード
-
- UtVideo と MagicYUV では、それぞれの中での予測方式の差でエンコード速度はあまり変わらない。
- AMV4 の DR3/DY3 は DR2/DY2 に比べて追加の処理(作者は「二次圧縮」と言っている)を行っているため、明らかに遅くなる
- デコード
-
- UtVideo (median) は UtVideo (left) よりデコードが明らかに遅い
- MagicYUV (median) は MagicYUV (gradient) とデコード速度があまり変わらない
- AMV4 では前述の二次圧縮の関係で、デコードでも DR3/DY3 は明らかに遅くなる
- AVX2
-
- UtVideo は Haswell にしてもあまり速くならない。専用のルーチンを用意していないので仕方ない
- MagicYUV は Haswell にすると結構速くなる。エンコードでの性能向上は限定的だが、デコードはかなり速くなる。
- AMV4 は Haswell にするとエンコード、デコードともに劇的に速くなる。
- その他
-
- AMV4 はデコード時に RGB24 で出力する機能が無いらしい
感想
- AMV4 の頭おかしい速度(ほめてる)について再確認した。圧縮比で妥協した引き換えとはいえ、シングルスレッドでこれだからな…
- MagicYUV の median のデコードが gradient と遜色ない速度でできているのが不思議。 median のデコードは処理の依存関係が厳しいので並列化しづらいはず。UtVideo の median と MagicYUV の median で圧縮比が異なる点にヒントがあるだろうか
- UtVideo の left は median よりデコードが圧倒的に速い代わりに圧縮比が低いのだが、この結果を見ると gradient を追加すべきかどうか悩む
- 今の時代、コア数や SIMD ベクタ長が2倍になったら、処理速度は2倍とは言わないまでも1.5倍にはならないと戦っていけないのであるが、UtVideo はコア数が2倍なら処理速度はほぼ2倍であるものの SIMD ベクタ長が2倍になっても大して速くならない。この先どうしようか
[…] 或るプログラマの一生 » 映像可逆圧縮コーデックベンチマーク2016 […]