fc2ブログ
 

64bit版AMVビデオデコーダーを使って再生した場合のDirect Showグラフ

Windows8 x64 Pro(SP1未適用)にて64bit版AMVビデオデコーダーを使って再生した場合のDirect Showグラフがどうなるか調べてみました。

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

レンダラー1の場合
64bit.png

「AVI Decompressor」が二つ入り、2つ目のデコンプレッサーによりカラーフォーマットが「YUY2 320x240」から「RGB 320x-240」へ変更されています。

レンダラー1の場合はRGBの座標軸をマイナスにすることで正常に表示されるようです。(スクリーンショットではプレビューがまっ黒ですが正常に表示されています)
自動的に2つ目のデコンプレッサーが入り調整されるため同様の環境であれば問題ないと思います。

レンダラー2の場合
64bit_offscreen.png

レンダラー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でもオーバーレイ表示が可能なのでしょうか。
renderer_prop_dd.png

renderer_prop_pf.png



AVX2対応デコーダーはなぜ3倍も高速化できたのか

端的に言えばAVX2を使っているからとなりますが、AVX2による性能向上は(理論上の)最大でも2倍までなのでもう一つの要因としてSIMD化があげられます。

AMV2MTのY2設定には4つの圧縮パターン(AからD)があり、最少処理単位(2x2画素,32bit分のデータ)に対しどのパターンか調べて対応するデコード処理を行うのですが、32bit版はパターンAならAの処理、パターンBならBの処理と条件分岐で処理を分けて必要な処理のみを行うようになっています。

それに対し、AVX2版は圧縮パターンが何かにかかわらず4通りすべての処理をAVXレジスタ上に並べて行います(これをSIMD化と言います)。
そして、処理が終わったらシャッフル命令で必要なデータだけをAVXレジスタの下位に移動させます。

simd.png


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

simd_avx2.png

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


AVX2版
bench_simd.png
一方、AVX2版は分岐予測や計算の有無による差が出ないため、どのフレームもほぼ同じ時間でデコードすることができ、
最後の4フレームも特別早い結果とはならないことがわかります。


3倍高速 AVX2対応 AMVデコーダー デモ版

インテルCPUの新拡張命令AVX2の性能を評価するため、AVX2命令を使ったAVX2専用のAMVビデオデコーダーを作りました。ただし、ベンチマークテスト用に作成したので対応しているのはAMV2MTのY2(YUY2可逆圧縮)のみと実用性は低いです。ベンチマークテスト用と割り切ってご覧ください。
また、実行するには2013年6月に発売されたHaswell以降の比較的新しいCPUでAVX2に対応したものが必要です。
OSはWindows7 SP1またはWindows8以降となります。

cpu-Z.png 


1.ベンチマークテスト
1.1.テスト環境

パソコンのスペック
OSWindows8 x64 Professional
CPUIntel(R) Core(TM) i7-4770 CPU @ 3.40GHz Haswell
MBASRock H87 Performance (Intel H87)
MemoryDDR3 1600 16GB(8GBx2 Dual Cannel)read=25.4GB/s write=14.8GB/s
SoftwareDecBench86.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.結果
AMV2MT Y2(標準可逆) 1コア、1スレッド
コーデック時間FPS32bit版に対する性能
32bit2.59 ms384 fps100 %
64bit2.23 ms446 fps116 %
64bit AVX20.88 ms1131 fps294 %
※ FPSは処理時間をもとに算出した値です。数値が大きいほど優れています。

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.png

結果のコーデック情報に"AVX2" "DEMO"と表記があればAVX2デモ版となります。


CPUがAVX2に対応していない場合は下記のように「コーデックの初期化に失敗」となります。
(OSのチェックは行っていないのでOSが対応していない場合はエラー落ちするかもしれません)
error_20140208182053e24.png 



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

AMVビデオデコーダー64 AVX2対応デモ版


新拡張命令AVX2でコーデックの性能は上がるか?

今年に入ってからインテルのCPU Haswellに搭載された新しい拡張命令AVX2を使っていろいろテストしていますが、AVX2によりAMVビデオコーデックのデコード処理のパフォーマンスを向上できそうです。

近々、64bit AVXサンプル版を公開する予定です。


 
 
あまラボへようこそ
このブログでは自作ソフトの最新情報やtips、PC動画に関する話題を掲載していきます。各記事へは下にあるカテゴリからアクセスして下さい。

ファイルのダウンロードはホームページの方でお願い致します。

質問・要望・不具合報告はこちら
アマレコTV
アマミキ!
アマレココ
アマレコ・ライト
ファンタジーリモート
AMVコーデック



ホームページ
カテゴリ
最新コメント
カレンダー
01 | 2014/02 | 03
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 -
最新記事
最新トラックバック
ブログ内タグ

アマレコTV ビデオキャプチャ アマレコVR AMVコーデック Oculus アマレココ Quest アマミキ! コーデック gQuest SC500 動画配信 Pico GO ファンタジーリモート 4K アマレコライト Unity プラグイン G2 AMV4 oculus ライブ機能 SC512 パススルー機能 デスクトップキャプチャ Passthrough AVX2 リモートソフト FAQ 質問コーナー アセット機能 ニコニコ動画 HDキャプチャ DirectShow 背景透過 120Hz Asset レゴ 遅延 解説動画 組み換え 可変再生速度 Meta LEGO MetaQuest VR GV-USB2 XL2420T 2 Pico4 倍速液晶 液晶モニター デインターレース ベンチマーク アマステ Intensity VRonVR AMV2MT MonsterX3A Pro PS4 VideoKeeper2 designs インストール Alternate AVX XCAPTURE-1 RDT233WX-Z GV-USB SD-USB2CAP4 31024 32ZP2 31006 ffmpeg 画像処理 60fps Robust Matting RGBキャプチャ Rift Video Shadow Play WindowsMR RYZEN UtVideo T2 HDMI NVEnc HDCP QSV LameACM OBS 音遅延 MP3 Haswell 電源オプション 音ズレ 録画 オーバーレイ XCapture-1 MonsterXU3.0R フィギュア ハイパースレッディングテクノロジー HT 31021 MPC 液晶テレビ DirectShowFilter プレビュー 擬似NTSCキャプチャ SD-USB2CUP4 Livetube AtomでHDキャプチャ キャプチャーツール シンクライアント イベント IntensityPro DC-HD1 額縁遅延 REGZA ZP3 倍速補完処理 32ZP32 Kabelake リプレイ機能 モノステ 倍速駆動 ゲームスムーズモード LAVFilters SkyBox Hand Tracking 2.0 ファイルマネージャプラス pytorch APIパススルー機能 API python ハンドジェスチャー パカラーススルー機能 アルファ付き動画 アルファ付きVR動画 RVM クロマキー ダウンロード AssetBundle 物理処理 download passthrough 検証 Preferred Filter Tweaker SteamVR GPU使用率 可逆圧縮 SKnet GV-USB3 キャプチャカード VR動画 フレーム間圧縮 新プレイヤー機能 AMPlayer 60Hz 新アマレコVR 90Hz VRコントローラー MR Windows SSE 

ブログ内検索
月別アーカイブ
アマレココに関するリンク
お世話になっているソフトのリンク
RSSリンクの表示
管理画面
  • 管理画面