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フレームも特別早い結果とはならないことがわかります。
関連記事


コメントの投稿

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

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

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



ホームページ
カテゴリ
最新コメント
カレンダー
09 | 2017/10 | 11
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
29 30 31 - - - -
最新記事
最新トラックバック
ブログ内タグ

アマレコTV ビデオキャプチャ AMVコーデック アマレココ アマミキ! コーデック SC500 動画配信 ファンタジーリモート アマレコライト プラグイン AMV4 SC512 ライブ機能 デスクトップキャプチャ AVX2 リモートソフト FAQ 質問コーナー HDキャプチャ ニコニコ動画 DirectShow 組み換え 可変再生速度 遅延 レゴ LEGO 解説動画 4K XL2420T ベンチマーク 液晶モニター PS4 Intensity Pro デインターレース アマステ 120Hz 倍速液晶 AMV2MT GV-USB2 MonsterX3A 32ZP2 ffmpeg RDT233WX-Z designs SD-USB2CAP4 31024 AVX Shadow RGBキャプチャ GV-USB Play Alternate VideoKeeper2 XCAPTURE-1 31006 RYZEN SD-USB2CUP4 イベント DirectShowFilter Livetube AtomでHDキャプチャ シンクライアント キャプチャーツール プレビュー 擬似NTSCキャプチャ 額縁遅延 インストール MPC ハイパースレッディングテクノロジー OBS NVEnc HDMI QSV HT 31021 XCapture-1 Kabelake SSE オーバーレイ 録画 フィギュア 音ズレ HDCP 電源オプション 液晶テレビ 32ZP32 SKnet 倍速駆動 モノステ DC-HD1 リプレイ機能 REGZA ZP3 LameACM MP3 Haswell 音遅延 MonsterXU3.0R 倍速補完処理 ゲームスムーズモード IntensityPro 

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