年末だというのに(年末だからか?)コーデックベンチをやっていました。

計測条件は以下の通り

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

計測対象コーデックは以下の通り。シェアウェアであるものはライセンスを購入し、機能制限(ロゴが入る)がかからない状態になっています。

このうち、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倍になっても大して速くならない。この先どうしようか
Trackback

no comment untill now

Add your comment now