ベンチマーク【ベンチマークソフト】いつもであればコーデックのベンチマークの場合、梅澤さんのvctestを使うのですが、今回はデコーダーのみなのでvctestが使えません。デコーダーだけテストするベンチマークソフトを作成しデコーダーのアーカイブに同梱してあります。[テストしたいコーデックでエンコードしたAVIファイル]それぞれアマレコTVまたはAviUtlを使ってテストしたいコーデックでエンコードしたAVIファイルをフルパスで指定して実行すると次のような結果が表示されます。(5870.168fps)「Process」は64bitで処理した場合"x64"、32bitで処理した場合"x86"と表示されます。align」はデコード結果を書き込むフレームバッファの先頭アドレスです。通常128Byteの境界に合わせるので効率のいいメモリアクセスができます。format」はデコード結果のフォーマットです。通常YUY2でデコードします。32bitでデコードします。それでもダメな場合はエラーとなります。time」は1フレームあたりのデコード処理にかかった時間です。ファイル処理の時間は含まれません。/h"でヘルプを表示します。フルパス\sample_amv2mt_y2.aviとして32bit版と64bit版のテストをすると次のような結果(表1)になります。この場合、32bit版より64bit版は約25%高速であることがわかります。「64bit処理性能」は32bitデコーダーに対する64bitデコーダーの処理性能です。125%の場合、64bit版は32bit版より25%高速です。できるだけ同じ条件で以下のベンチマークテストを行いました。【測定条件】ベンチマークはHD(1280x720)のビデオキャプチャ(実写)を想定しています。動画ソースはマイクロソフトのサイトからダウンロードしたWMV形式のファイルをAviUtlと各コーデックを使って変換したものを使います。(2009年の「動きの激しい動画」と同じになります)測定はDecBench86.exeおよびDecBench64.exeを使ってYUY2にデコードした際のデコード時間(復元にかかった時間)を測定します。CPUは4コア、マルチスレッドテクノロジーには対応していません。BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。比較して32bit版の結果がおおむね6%の差異なので同じようなテストができているとみていいかと思います。AMV3のS0設定だけ30%以上違う結果となっているのでその部分は参考になりません。64bit版は高速という結果になりました。AMVビデオデコーダーの仕様について64bit版の仕様と32bit版との違いについて書きます。デコーダーから出力できるカラーフォーマット(RGBとかYUY2など)は自動で選択されます。色補間フィルターは必要に応じて自動で適用されます。処理スレッドは1スレッドに固定されます。設定画面はありません(設定不要)。Ver2.20以降とAMV3のすべてのバージョンをデコードできます。SSE、SSE2に対応したCPUが必要です(MMXを使わなくなった)。AMV3の色補間フィルターは32bit版と64bit版とで計算誤差によりわずかに異なる結果となる場合があります。24bitでの出力はできません。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版とで完全に一致します。24bitでないと困るケースが皆無であり、おそらく24bitより32bitの方が効率よく処理できる(アプリケーションの方で24bitのデータは32bitに変換してから処理するなど)と思うので24bitを廃止しました。次回は64bit版のベンチマークについて書きます。0あまラボへようこそこのブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。