64bit版AMVビデオデコーダーを使って再生した場合のDirect Showグラフ
まず、ビデオレンダラーフィルターが複数ありどれが使われるかにより挙動が異なってくることがわかりました。
私のところでは下記の「(上側の)Video Renderer」のメリット値が一番高く、特に指定がない場合このレンダラーが使われます。ここでは便宜上、上側のビデオレンダラーを「レンダラー1」、下側を「レンダラー2」として記述します。
このほか、EVRがありますがメリット値が低いため明示的に使わない限り出番はありません(一応EVRでも正常に表示されます)。

レンダラー1の場合

「AVI Decompressor」が二つ入り、2つ目のデコンプレッサーによりカラーフォーマットが「YUY2 320x240」から「RGB 320x-240」へ変更されています。
レンダラー1の場合はRGBの座標軸をマイナスにすることで正常に表示されるようです。(スクリーンショットではプレビューがまっ黒ですが正常に表示されています)
自動的に2つ目のデコンプレッサーが入り調整されるため同様の環境であれば問題ないと思います。
レンダラー2の場合

レンダラー2でもデコンプレッサーが2つ入りカラーフォーマットが変更されますが、レンダラー2の場合RGBの座標軸は反転しません。(「RGB 320x240」となっています)
レンダラー2は座標軸を反転せずに正常に表示されます。
このようにレンダラーにより高さ方向の座標軸が反転するレンダラーと、反転しないレンダラーがあることがわかりました。ただし、基本的にはDirect Showの方で自動的に「反転する」、「反転しない」の調整を行ってくれるようなので利用者は意識しなくていいようになっているみたいです。
問題となるのはレンダラーが違ったり、異なるAVIデコンプレッサーが使われる場合、およびDirect Showを使わないメディアプレイヤーです。
Direct Showを使わないメディアプレイヤーでは上記フィルターによる自動調整が行われないためAMVビデオデコーダー側で座標軸を反転しないとどうにもならないケースがあるのかなと思います。
レンダラー1とレンダラー2について
レンダラー1は上記のスクリーンショットをみてわかる通り、プレビューの様子が真っ黒になり、オーバーレイレンダラーのように動画の画像をデスクトップ画像の一部に合成してディスプレイに表示されます(デスクトップコンポジションによる合成ではなく、ビデオカードによる合成と思われます)。と言うことは、デスクトップコンポジションが有効な状態でも遅延の少ないプレビュー表示が可能なのかもしれません。
現状アマレコTVはデスクトップコンポジションが有効な場合EVRを使うようになっていて、その性質上遅延が大きめですが、今回のレンダラー1を使うことで改善できるかもしれません(要調査)。
またレンダラー2はDirect Drawを使ったレンダラーのようで、こちらもいろいろなオプションが用意されていて興味深いです。設定次第ではレンダラー2でもオーバーレイ表示が可能なのでしょうか。


AVX2対応デコーダーはなぜ3倍も高速化できたのか
AMV2MTのY2設定には4つの圧縮パターン(AからD)があり、最少処理単位(2x2画素,32bit分のデータ)に対しどのパターンか調べて対応するデコード処理を行うのですが、32bit版はパターンAならAの処理、パターンBならBの処理と条件分岐で処理を分けて必要な処理のみを行うようになっています。
それに対し、AVX2版は圧縮パターンが何かにかかわらず4通りすべての処理をAVXレジスタ上に並べて行います(これをSIMD化と言います)。
そして、処理が終わったらシャッフル命令で必要なデータだけをAVXレジスタの下位に移動させます。

32bit版と比べ条件分岐を行わないためその部分のパフォーマンス低下がないメリットの反面、計算が不要な場合でもすべての圧縮パターンを処理するため必ず(無駄な)計算を行うことになります。
例えば、圧縮パターンAは「参照データ(左の画素や1フレーム前の画素)と完全に一致する」なので参照データをコピーするだけで計算する必要はないのですが、この場合でもAVX2版は他のパターンの計算を行います。
結局、条件分岐しないメリットと無駄な計算をするデメリットとのトレードオフになりどちらが有利かと言うところで、今までは条件分岐の方を採用していましたが、今回ようやくSIMD化で好い結果がでた次第です。

もう少し詳しく書くと、256bitのAVXレジスタにより、2セット分を同時にSIMD処理できるようになったことと、処理の最後に必要となるシャッフル命令がSSE2縛りでは複雑な処理になってしまっていたのが、AVX2命令一つで可能になったこと、さらにパターンCとDを同時に計算できるようになったことが高速化の決め手となりました。
1) 256bitレジスタによるSIMD処理により2セット同時に処理できるようになった
2) それにより、分岐命令を使わなくなった
3) シャッフル命令による特定のデータ抽出が1命令で可能になった
4) パターンCとDの同時計算ができるようになった
ちなみに、エンコード処理の方は2008年10月に公開したVer2.11aから条件分岐を無くしSIMD化できています。すでにSSEレジスタにより高速なエンコード処理を実現しているため、さすがに3倍は無理ですがAVXレジスタを使って2倍程度までエンコード処理を早くすることは可能です。
条件分岐による処理と、SIMDによる処理とではベンチマーク結果にも異なる特徴が見て取れます。
32bit版

32bit版の方は条件分岐による分岐予測の成否や計算の必要なパターンか、計算の不要なパターンかの違いによりフレームごとにデコード時間にばらつきが生じます(2066フレーム目は2.8ms、2071フレーム目は2.2msと約0.6ms差があります)。
また、最後の2079から2082フレームまでの4フレームは0.9msと著しく早くなっています。これはテストに使った動画の最後4フレームが2078の画像と完全に一致するためであり、その場合はパターンAの「参照データをコピーする処理」ばかりが実行されます。
このようなケースでは、分岐予測も高い確率で成功し、高速、かつ、ばらつきの少ない結果が出ます。
AVX2版

一方、AVX2版は分岐予測や計算の有無による差が出ないため、どのフレームもほぼ同じ時間でデコードすることができ、
最後の4フレームも特別早い結果とはならないことがわかります。
3倍高速 AVX2対応 AMVデコーダー デモ版
また、実行するには2013年6月に発売されたHaswell以降の比較的新しいCPUでAVX2に対応したものが必要です。
OSはWindows7 SP1またはWindows8以降となります。

1.ベンチマークテスト
1.1.テスト環境
OS | Windows8 x64 Professional |
CPU | Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz Haswell |
MB | ASRock H87 Performance (Intel H87) |
Memory | DDR3 1600 16GB(8GBx2 Dual Cannel)read=25.4GB/s write=14.8GB/s |
Software | DecBench86.exe Ver1.01 DecBench64.exe Ver1.01 |
備考 | CPUは4コア、8スレッド、HTT対応、AVX2対応。動作クロックを3.4GHz(定格)で固定し、 省電力設定およびTurbo BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。 |
タイトル | Mystery of the Nile |
情報 | 1280*720、2082frames、1分26秒 |
備考 | AviUtlと各コーデックを使ってエンコードしてテスト用の動画ファイルを作成 |
1.2.結果
コーデック | 時間 | FPS | 32bit版に対する性能 |
32bit | 2.59 ms | 384 fps | 100 % |
64bit | 2.23 ms | 446 fps | 116 % |
64bit AVX2 | 0.88 ms | 1131 fps | 294 % |
32bit版と比べAVX2版は約3倍高速という結果がでました。年末に公開した64bit版と比べても約2.6倍高速なので、AMVビデオコーデックのデコード処理にAVX2を使うと劇的に高速化されることがわかります。
なぜこんなに早くなるのか、AVX2って何?についてはおいおい書いていけたらと思います。
※ 何倍速いかは画像サイズにより変わってきます。画像サイズが小さいとより大きな差がでます。例えば同梱されているサンプル動画の320x240では3.2倍高速となります。逆に画像サイズが大きくなると3倍を下回ります。
【2014.3.10追記】
電源オプションでパフォーマンスが変わってくるので、追試をしました。
AVX2対応 AMVデコーダー デモ版の追試
2.使い方
ダウンロードしたファイルを解凍します。
64bit版をインストールしていない人は、先に同梱されている64bit版をインストールします。
すでに前回の64bit版をインストールしている人は新しくインストールする必要はありません(同じものです)。
AVX2デモ版をテストするときはavx2フォルダにある"Amv2mtDec64.dll"をインストール先のdllファイルと差し換えてください。
下記のように同梱されているベンチマークソフトを実行して
DecBench64.exe フルパス\sample_amv2mt_y2.avi |

結果のコーデック情報に"AVX2" "DEMO"と表記があればAVX2デモ版となります。
CPUがAVX2に対応していない場合は下記のように「コーデックの初期化に失敗」となります。
(OSのチェックは行っていないのでOSが対応していない場合はエラー落ちするかもしれません)

3.ダウンロード
今回はデモ版です、Y2設定しか使えないため実用性は低いです。
本当にAVX2版は早いのか実際に試してみたい人向けと思ってください。
AMVビデオデコーダー64 AVX2対応デモ版