Showグラフがどうなるか調べてみました。ビデオレンダラーフィルターが複数ありどれが使われるかにより挙動が異なってくることがわかりました。Renderer」のメリット値が一番高く、特に指定がない場合このレンダラーが使われます。ここでは便宜上、上側のビデオレンダラーを「レンダラー1」、下側を「レンダラー2」として記述します。このほか、EVRがありますがメリット値が低いため明示的に使わない限り出番はありません(一応EVRでも正常に表示されます)。320x-240」へ変更されています。レンダラー1の場合はRGBの座標軸をマイナスにすることで正常に表示されるようです。(スクリーンショットではプレビューがまっ黒ですが正常に表示されています)自動的に2つ目のデコンプレッサーが入り調整されるため同様の環境であれば問題ないと思います。レンダラー2の場合レンダラー2でもデコンプレッサーが2つ入りカラーフォーマットが変更されますが、レンダラー2の場合RGBの座標軸は反転しません。320x240」となっています)レンダラー2は座標軸を反転せずに正常に表示されます。このようにレンダラーにより高さ方向の座標軸が反転するレンダラーと、反転しないレンダラーがあることがわかりました。Showの方で自動的に「反転する」、「反転しない」の調整を行ってくれるようなので利用者は意識しなくていいようになっているみたいです。Showを使わないメディアプレイヤーです。Showを使わないメディアプレイヤーでは上記フィルターによる自動調整が行われないためAMVビデオデコーダー側で座標軸を反転しないとどうにもならないケースがあるのかなと思います。レンダラー1とレンダラー2についてレンダラー1は上記のスクリーンショットをみてわかる通り、プレビューの様子が真っ黒になり、オーバーレイレンダラーのように動画の画像をデスクトップ画像の一部に合成してディスプレイに表示されます(デスクトップコンポジションによる合成ではなく、ビデオカードによる合成と思われます)。言うことは、デスクトップコンポジションが有効な状態でも遅延の少ないプレビュー表示が可能なのかもしれません。現状アマレコTVはデスクトップコンポジションが有効な場合EVRを使うようになっていて、その性質上遅延が大きめですが、今回のレンダラー1を使うことで改善できるかもしれません(要調査)。Drawを使ったレンダラーのようで、こちらもいろいろなオプションが用意されていて興味深いです。設定次第ではレンダラー2でもオーバーレイ表示が可能なのでしょうか。0AVX2対応デコーダーはなぜ3倍も高速化できたのか端的に言えばAVX2を使っているからとなりますが、AVX2による性能向上は(理論上の)最大でも2倍までなのでもう一つの要因としてSIMD化があげられます。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を同時に計算できるようになったことが高速化の決め手となりました。パターン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の「参照データをコピーする処理」ばかりが実行されます。このようなケースでは、分岐予測も高い確率で成功し、高速、かつ、ばらつきの少ない結果が出ます。最後の4フレームも特別早い結果とはならないことがわかります。デモ版インテルCPUの新拡張命令AVX2の性能を評価するため、AVX2命令を使ったAVX2専用のAMVビデオデコーダーを作りました。ベンチマークテスト用に作成したので対応しているのはAMV2MTのY2(YUY2可逆圧縮)のみと実用性は低いです。ベンチマークテスト用と割り切ってご覧ください。実行するには2013年6月に発売されたHaswell以降の比較的新しいCPUでAVX2に対応したものが必要です。SP1またはWindows8以降となります。CPUは4コア、8スレッド、HTT対応、AVX2対応。BoostはBIOSで無効化、動作クロックがテスト中に変動しないようにしています。FPSは処理時間をもとに算出した値です。数値が大きいほど優れています。32bit版と比べAVX2版は約3倍高速という結果がでました。年末に公開した64bit版と比べても約2.6倍高速なので、AMVビデオコーデックのデコード処理にAVX2を使うと劇的に高速化されることがわかります。こんなに早くなるのか、AVX2って何?についてはおいおい書いていけたらと思います。何倍速いかは画像サイズにより変わってきます。画像サイズが小さいとより大きな差がでます。同梱されているサンプル動画の320x240では3.2倍高速となります。逆に画像サイズが大きくなると3倍を下回ります。電源オプションでパフォーマンスが変わってくるので、追試をしました。デモ版の追試2.使い方ダウンロードしたファイルを解凍します。64bit版をインストールしていない人は、先に同梱されている64bit版をインストールします。前回の64bit版をインストールしている人は新しくインストールする必要はありません(同じものです)。AVX2デモ版をテストするときはavx2フォルダにある"Amv2mtDec64.dll"をインストール先のdllファイルと差し換えてください。"DEMO"と表記があればAVX2デモ版となります。CPUがAVX2に対応していない場合は下記のように「コーデックの初期化に失敗」となります。(OSのチェックは行っていないのでOSが対応していない場合はエラー落ちするかもしれません)3.ダウンロード今回はデモ版です、Y2設定しか使えないため実用性は低いです。本当にAVX2版は早いのか実際に試してみたい人向けと思ってください。Haswellに搭載された新しい拡張命令AVX2を使っていろいろテストしていますが、AVX2によりAMVビデオコーデックのデコード処理のパフォーマンスを向上できそうです。AVXサンプル版を公開する予定です。0あまラボへようこそこのブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。