64bit版 AMVビデオデコーダー ベンチマーク
いつもであればコーデックのベンチマークの場合、梅澤さんのvctestを使うのですが、今回はデコーダーのみなのでvctestが使えません。なのでデコーダーだけテストするベンチマークソフトを作成しデコーダーのアーカイブに同梱してあります。
32bit版のデコーダーをテストするときは
DecBench86.exe [テストしたいコーデックでエンコードしたAVIファイル] |
64bit版のデコーダーをテストするときは
DecBench64.exe [テストしたいコーデックでエンコードしたAVIファイル] |
それぞれアマレコTVまたはAviUtlを使ってテストしたいコーデックでエンコードしたAVIファイルをフルパスで指定して実行すると次のような結果が表示されます。
File : C:\bin\sample_amv2mt_y2.avi Total : 362frame, Total decode time 61.668ms Codec info : Amv2mtDecoder64 ( AMV2 MT Video Decoder x64 Ver2.20i ) Process : x64 Buff align : 0x00000067f97d7400 (128 Byte aligned) Decode format : YUY2 Decode time : Min= 0.153ms Max= 0.664ms Ave= 0.170ms (5870.168fps) |
「Process」は64bitで処理した場合"x64"、32bitで処理した場合"x86"と表示されます。
「Buff align」はデコード結果を書き込むフレームバッファの先頭アドレスです。
通常128Byteの境界に合わせるので効率のいいメモリアクセスができます。
「Decode format」はデコード結果のフォーマットです。通常YUY2でデコードします。デコーダーがYUY2に対応していない場合はRGB 32bitでデコードします。それでもダメな場合はエラーとなります。
「Decode time」は1フレームあたりのデコード処理にかかった時間です。ファイル処理の時間は含まれません。
なお、"DecBench86.exe /h"でヘルプを表示します。
【簡単なテスト】
AMV2MTの「Y2:標準可逆」設定で作成したサンプル動画(sample_amv2mt_y2.avi)を同梱してあるので
DecBench86.exe フルパス\sample_amv2mt_y2.avi DecBench64.exe フルパス\sample_amv2mt_y2.avi |
として32bit版と64bit版のテストをすると次のような結果(表1)になります。
この場合、32bit版より64bit版は約25%高速であることがわかります。
設定 | 32bit | 64bit | 64bit処理性能 | ||
時間 | FPS | 時間 | FPS | ||
Y2 | 0.21 ms | 4601 fps | 0.17 ms | 5771 fps | 125% |
【実践的なテスト】
サンプル動画は画像サイズが320x240と小さいため、より実践的なテストとして 2012年9月に行った以前のテスト とできるだけ同じ条件で以下のベンチマークテストを行いました。
【測定条件】
ベンチマークはHD(1280x720)のビデオキャプチャ(実写)を想定しています。
動画ソースはマイクロソフトのサイトからダウンロードしたWMV形式のファイルをAviUtlと各コーデックを使って変換したものを使います。 (2009年の「動きの激しい動画」と同じになります)
測定はDecBench86.exeおよびDecBench64.exeを使ってYUY2にデコードした際のデコード時間(復元にかかった時間)を測定します。
タイトル | Mystery of the Nile |
情報 | 1280*720、2082frames、1分26秒 |
備考 | AviUtlと各コーデックを使ってエンコード |
OS | Windows7 x64 Professional SP1 |
CPU | Intel(R) Core(TM) i5-3470S CPU @ 2.90GHz Ivy Bridge |
MB | ASRock H77 Pro4-M (Intel H77) |
Memory | DDR3 1600 8GB(4GBx2 Dual Cannel)read=23.7GB/s write=12.2GB/s |
Software | DecBench86.exe DecBench64.exe |
備考 | CPUは4コア、マルチスレッドテクノロジーには対応していません。動作クロックを2.9GHz(定格)で固定し、省電力設定およびTurbo BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。 |
【結果】
設定 | 32bit | 64bit | 64bit処理性能 | ||
時間 | FPS | 時間 | FPS | ||
Y1 | 0.97 ms | 1029 fps | 0.71 ms | 1405 fps | 136% |
Y2 | 2.47 ms | 404 fps | 2.13 ms | 468 fps | 115% |
Y3 | 3.32 ms | 300 fps | 2.57 ms | 388 fps | 129% |
Y4 | 5.40 ms | 184 fps | 4.48 ms | 222 fps | 120% |
設定 | 32bit | 64bit | 64bit処理性能 | ||
時間 | FPS | 時間 | FPS | ||
S0 | 0.19 ms | 5258 fps | 0.26 ms | 3764 fps | 75% |
S1 | 0.64 ms | 1562 fps | 0.49 ms | 2003 fps | 128% |
S2 | 1.72 ms | 579 fps | 1.51 ms | 660 fps | 113% |
S3 | 2.37 ms | 420 fps | 1.93 ms | 517 fps | 123% |
S4 | 4.53 ms | 220 fps | 3.69 ms | 270 fps | 122% |
以前のベンチマークテストと同じ条件かどうか
使用したPCは同じだけど、テストに使ったベンチマークソフトが違うため心配ですが、 2012年9月に行った以前のテスト の「表3 シングルスレッドによるAMVビデオコーデックの結果(1スレッド、1コア)」 と比較して32bit版の結果がおおむね6%の差異なので同じようなテストができているとみていいかと思います。
ただし、AMV3のS0設定だけ30%以上違う結果となっているのでその部分は参考になりません。
(S0については、明らかにおかしいので何度かテストしましたが結果は変わらないので勘違いではない)
AMVビデオデコーダー 32bit版と64bit版の比較
最少でもAMV3 S2設定で約13% 64bit版は高速という結果になりました。
64bit版 AMVビデオデコーダーの仕様について
AMV ビデオデコーダー 64bit版 仕様
(1) デコーダーから出力できるカラーフォーマット(RGBとかYUY2など)は自動で選択されます。
(2) 色補間フィルターは必要に応じて自動で適用されます。
(3) スケール補正を廃止。
(4) 処理スレッドは1スレッドに固定されます。
(5) 設定画面はありません(設定不要)。
(6) AMV2MT Ver2.20以降とAMV3のすべてのバージョンをデコードできます。
(7) SSE、SSE2に対応したCPUが必要です(MMXを使わなくなった)。
(8) AMV3の色補間フィルターは32bit版と64bit版とで計算誤差によりわずかに異なる結果となる場合があります。
(9) RGB 24bitでの出力はできません。RGB 32bit専用となります。
出力フォーマットが自動
32bit版はYUV系で入力されたものをRGBで出力することができましたが、64bit版はYUV系で入力されたものはYUV系でのみ出力、RGB系で入力されたものはRGBでのみの出力となります。
64bit版はコーデックに入出力される色空間が(自動的に)一致するため、「コーデックの設定がどうこう」とか「色空間がどうこう」といったことを気にすることなくコーデック上では正しい結果を得ることができます。
YUV系をRGBに変換する場合はアプリケーション(編集ソフトやメディアプレイヤー)の設定で一元管理してください。
色補間フィルター
32bit版はフィルターを使うかどうか設定できますが、64bit版は必要に応じてフィルターが自動で適用されます。
フィルターをOFFにする人は少ないと思うので基本的にON固定としました。
フィルターが適応されないのはAMV3で「デインターレース」オプションがONの場合です。
スケール補正を廃止
出力フォーマットが入力フォーマットと一致するため、スケール補正(フルレンジ、リミテッドレンジ)は必要なくなります。
スケール補正が必要な場合はアプリケーション(編集ソフトやメディアプレイヤー)で行ってください。
1スレッドに固定
64bit版のデコード処理は32bit版よりさらに20%から50%程度高速化されているため、ほぼすべてのケースにおいて
1スレッドだけでもリアルタイム処理(秒間60フレーム以上のデコード処理)が可能です。
なのでCPU負荷を増やしてまでマルチスレッドで処理する意味は無いかと思い現状1スレッド固定としました。
対応バージョン
現在出回っているAMVビデオコーデックのほぼすべてに対応しています。
64bit版でデコードできないのは初期のころ(2008年7月から2009年2月)に公開していたAMV2MTです。
SSE、SSE2に対応したCPUが必要です
開発環境を刷新したため最新のCPU拡張命令であるAVX2まで利用可能となりましたが、今回はあえて従来通りのSSE2縛りでコーディングしてあります。
また、32bit版は8バイト分のデータ処理にMMX命令を使っていましたが、64bit版では通常のレジスタで8バイト分の処理ができるためMMX命令を使わなくなりました。
色補間フィルターの計算誤差について
32bit版と64bit版とで計算式は同じですが、計算するときのbit数(8bitで計算するか16bitで計算するか)の違い
と計算の順序により計算結果に若干の計算誤差が生じます。
この誤差はAMV3デコーダーでRGB出力する際に生じますが見た目で判る差異ではありません。
AMV3デコーダーでYV12やYUY2で出力する場合、および、AMV2MTデコーダーによる出力に関しては32bit版と64bit版
とで完全に一致します。
RGB 32bit専用
RGB 24bitでないと困るケースが皆無であり、おそらく24bitより32bitの方が効率よく処理できる(アプリケーションの方で24bitのデータは32bitに変換してから処理するなど)と思うので24bitを廃止しました。
次回は64bit版のベンチマークについて書きます。