実験: QSVでデコードしてみると?

通常、QSVEncCを使ったエンコードでは、デコードはCPUで行ってる(SWデコード)。これをQSVでデコードできるようにするとより速いらしい。

そこで、QSVEncもQSVでデコードできるように改造して、
・QSVデコード → QSVエンコード
・SWデコード → QSVエンコード (avs読み込み(LSMASHSource.dll))
の2種類を比較して、実際どのくらい速いの? というのを調べてみた。


ソースはMPEG2とH.264の二通り。出力は1920x1080(リサイズなし)と1280x720(vppでリサイズ)の二通り。この2x2の4パターンについて比べる。



計測方法と環境



環境1
Core i7 4610Y (2C/4T) @ 1.7GHz [TB: 2.9GHz]
DDR3-1600, 2ch, 11-11-11-28-1

OS : Windows 8.1 (x64)
CPU: Intel Core i7-4610Y @ 1.70GHz [TB: 2.90GHz] (2C/4T)
L1 : Read: 308.44GB/s, Write: 154.11GB/s
L2 : Read: 140.28GB/s, Write: 43.92GB/s
L3 : Read: 56.45GB/s, Write: 25.52GB/s
RAM: Read: 18.55GB/s, Write: 8.23GB/s
Used 1974 MB, Total 3991 MB

環境2
Core i7 4770K (4C/8T) @ 3.9GHz
DDR3-2400, 2ch, 10-12-12-31-2

OS : Windows 8.1 (x64)
CPU: Intel Core i7-4770K @ 3.50GHz [TB: 3.90GHz] (4C/8T)
L1 : Read: 929.28GB/s, Write: 464.52GB/s
L2 : Read: 416.73GB/s, Write: 131.70GB/s
L3 : Read: 184.83GB/s, Write: 88.15GB/s
RAM: Read: 33.49GB/s, Write: 15.91GB/s
Used 7026 MB, Total 16063 MB

使用ソフト
Avisynth 2.6.0 alpha5
LSMASHSource.dll
QSVEncC (特別版) (x86)、ffmpeg demux + QSV decode + CPU使用率計測追加版

ソース
MPEG2 1920x1080p 10.6Mbps 5203フレーム
H.264 1920x1080p 25.1Mbps 2293フレーム

QSVEnc エンコード設定
--cqp 24:25:27 --benchmark result.txt --output-res 1920x1080 or 1280x720

計測
一発勝負



結果



まずはCore i7 4610Yから。棒グラフがエンコード速度(下の目盛り)、折れ線グラフ(上の目盛り)がCPU使用率。

QSVEnc_wth_decode_i7_4610Y.png

入力フォーマットによらず、QSVでデコードすることで大きく高速化している。CPUが非力なため、SWデコードが大きなボトルネックになっていて、これをQSVデコードに切り替えたことでそのボトルネックが解消したみたい。

CPU使用率も大幅に低下している。



つぎにCore i7 4770K。同じく、棒グラフがエンコード速度(下の目盛り)、折れ線グラフ(上の目盛り)がCPU使用率。

network_normal_connection.png

こちらはCPUが強力なため、SWデコードでも十分な速度が出ているようで、i7 4610Yと比べるとさほど大きな高速化にはなっていない。特にデコードのCPU負荷の小さいMPEG2からの変換では、1280x720にリサイズした際にも、大きな差は出ていない。それでも、多少高速化しているし、CPU使用率が大幅に低下しているのが見て取れる。

注: ただこの速度、オーバークロックなメモリ速度がかなり効いてる疑惑も…。



というわけで、QSVでデコードすると予想通り速くなり、特に非力なCPUでは効果があるみたい。

だからHandbrakeのQSVは速いんでしょうなあ…。


スポンサーサイト



コメントの投稿

非公開コメント

ということは…

ふと思ったんですが
もし仮にQSVのHWデコーダを利用するauiプラグインが登場したら
QSVが使えるIntelのCPU限定だけれどMPEG2やH264の映像を高速にAviUtlへ読みこむ+デコードに関してはCPU使用率をぐっと抑えられるようになる」
なんてことも実現するかもしれないでしょうかね

win10での動作報告

Win10 TP x64 10074
x265GUIEx 3.53
QSVEnc 1.29
にて無事エンコード動くようになりました

報告まで

最初の頃のリビジョンではグレーアウトで
aviutyその物が動きませんでしたが....

Re: ということは…

デコード負荷はたしかにおさえられそうですが、速いかどうかは微妙なところかと思います。Aviutlだとデコード後いろいろ処理が入るので…

Re: win10での動作報告

うまく動いたとの報告、ありがとうございます。

ただ、実はWin10対策はなにもしておりません…

No title

CPUが非力なのでぜひ使ってみたいです。
特に1080i→720pへvppのdeinterlace bob+resizeも使用できるとAviSynth+yadifが不要になるのでとても助かります。

Re: No title

公開予定…ですが、まだいろいろ問題があって調整中です…。

No title

いつの間にかQSVデコードの話題が…流石にQSVデコードは速いですねぇ…
ぱっと見た限りでは、4コアCPUでのMPEG2→H.264を除けばほぼ確実に早くなるようですね…AviUtl以外でQSVが使えるソフトは大抵デコードに関してもQSVでやってるようなのでかなり速いですね…
MPEG2はデコード負荷がかなり小さいので元々高速なCPUだとさほど恩恵を受けられないようですが、それでもCPU負荷を抑えられるため、x264エンコであっても高速化が期待できる場合がありそうです。

…で、なんですが、他の方のコメで「QSVのHWデコーダを利用するauiプラグイン」とありましたが、実は実装できないか試行錯誤している方々がいらっしゃいます。実装形式は、実現した場合「L-SMASH File Readerの一機能」となるようです。
ただ、私が聞いた限りでは、現状ではGOPが正常に処理出来なかったり、シークが遅すぎたり、QSVの割にはデコードが遅すぎるなど問題点も山積みのようです。
しかしながら、CPU使用率に関してはCPUデコードと比較して間違いなく下がっているとのことですので、特に非力なCPUでは高速化出来るのではないかと。
まぁ、元から速いCPUだとあまり恩恵が受けられない可能性も考えられますね。。。
あと、MPEG2・H.264の他に、もしかしたらH.265のQSVデコードも追加できるかもしれないと言っていたような気がします。
なお、実装に関して人員不足が顕著すぎるため、なかなか進まないそうです…私はプログラムのプの字もわからないので参加できませんけど…

他に、ffdshowだかffmpegを使用し、Directshowフィルタだかを経由したデコードを行うことでQSVデコードが可能になるとの記事も見たことが有りますが、実用的に使うには結構めんどくさそうですね…

AviUtlでの処理や、そもそもストリーム転送の速度が遅いなどの問題も有りますが、メモリアクセスが減ってQSVがデコードに概ね集中できるため、個人的には、可能であれば
QSVデコード→NVEnc or VCEEnc
が最もボトルネックを減らしてエンコできるかなと。
NVEncに至っては、エンコーダの性能自体はフルHDエンコを240fpsで可能な程度に高速なわけですし、それを可能な限り最大限に利用するにはQSVデコードが不可欠かなぁ…と思っていたりします。ま、画質はQSVと比べるとあれですが…
と思いきや、上のグラフ見た限りではQSVでもソフトウェアデコードのフルHDで240fps以上出てるので、もはや勝ち目なしですね…

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: No title

>belkyros様
QSVの場合、メインメモリのメモリ帯域がかなりシビアなため、デコードしてから一度フレームをCPU側に戻してくると、そのぶんメモリコピーが発生し、速度が落ちてしまうと予想されます。

現在QSVEncCへ直接デコード機能を搭載しようとしているのも、デコードからエンコードまでを一貫してGPU側で行うことで、メモリコピーが削減でき、ほぼ確実に高速化が見込めるためです。ただ、GPU側ですべて行うぶん、細かい制御は難しくなり、例えばMPEG2のRFFを適切に扱うのは難しそうなのですが…

NVEncもNVCUVIDでデコードして、NVENCでエンコードという手があるのですが、いかんせんデコード機能の追加は面倒だと今回で身にしみたので、画質の良いQSVだけにしておきます…

>コンテナについて
コンテナについては、ffmpeg(というよりLGPLでビルドしたlibavcodec/libavformatのdll版)にdemuxしてもらう予定です。

あらら

「QSVを使った.aui」が登場しないのには
それだけの理由があったんですね。

belkyrosさんとrigayaさんの書き込みを拝見して
だいたい伝わってきました(^_^;

プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先: rigaya34589@live.jp
github twitter

最新記事
最新コメント
カテゴリ
月別アーカイブ
カウンター
検索フォーム
いろいろ
公開中のAviutlプラグインとかのダウンロード

○Aviutl 出力プラグイン
x264guiEx 3.xx
- x264を使用したH264出力
- x264guiExの導入紹介動画>
- x264guiExの導入
- x264guiExのエラーと対処方法>
- x264.exeはこちら>

x265guiEx
- x265を使用したH.265/HEVC出力
- x265guiExの導入>
- x265.exeはこちら>

QSVEnc + QSVEncC
- QuickSyncVideoによるHWエンコード
- QSVEnc 導入/使用方法>
- QSVEncCオプション一覧>

NVEnc + NVEncC
- NVIDIAのNVEncによるHWエンコード
- NVEnc 導入/使用方法>
- NVEncCオプション一覧>

VCEEnc + VCEEncC
- AMDのVCE/VCNによるHWエンコード
- VCEEnc 導入/使用方法>
- VCEEncCオプション一覧>

svtAV1guiEx
- SVT-AV1によるAV1出力
- svtAV1guiExの導入>
- SVT-AV1単体はこちら>

VVenCguiEx
- VVenCによるVVC出力
- VVenCguiExの導入>

ffmpegOut
- ffmpegを使用した出力
- ffmpegOutの導入>


○Aviutl フィルタプラグイン
自動フィールドシフト (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: aji様

clfilters 
- OpenCLベースの複数のGPUフィルタ集
- 対応フィルタの一覧等はこちら

エッジレベル調整MT (ミラー)
- エッジレベル調整の並列化/高速化
- SSE2~AVX512対応
- オリジナル: まじぽか太郎様

バンディング低減MT (ミラー)
- SSE2~AVX512による高速化版
- オリジナル: まじぽか太郎様

PMD_MT
- SSE2~AVX512による高速化版
- オリジナル: スレ48≫989氏

透過性ロゴ (ミラー)
- SSE2~FMA3によるSIMD版
- オリジナル: MakKi氏

AviutlColor (ミラー)
- BT.2020nc向け色変換プラグイン
- BT.709/BT.601向けも同梱

○その他
Amatsukaze改造版
- AmatsukazeのAV1対応版

x264afs (ミラー)
- x264のafs対応版

aui_indexer (ミラー使い方>)
- lsmashinput.aui/m2v.auiの
 インデックス事前・一括生成

auc_export (ミラー使い方>)
- Aviutl Controlの
 エクスポートプラグイン版
 エクスポートをコマンドから

aup_reseter (ミラー)
- aupプロジェクトファイルの
 終了フラグを一括リセット

CheckBitrate (ミラー, 使い方, ソース)
- ビットレート分布の分析(HEVC対応)

チャプター変換 (使い方>)
- nero/appleチャプター形式変換

エッジレベル調整 (avisynth)
- Avisynth用エッジレベル調整

メモリ・キャッシュ速度測定
- スレッド数を変えて測定
- これまでの測定結果はこちら

○ビルドしたものとか
L-SMASH (ミラー)
x264 (ミラー)
x265 (ミラー)
SVT-AV1 (ミラー)

○その他
サンプル動画
その他

○読みもの (ミラー)
Aviutl/x264guiExの色変換
動画関連ダウンロードリンク集
簡易インストーラの概要

○更新停止・公開終了
改造版x264gui
x264guiEx 0.xx
RSSリンクの表示
リンク
QRコード
QR