HaswellとIntel Media SDK 2013

これまでのHaswell
Haswellそのいち。 - ついに来たHaswell
Haswellそのに。 - Haswellでx264エンコードほか
Haswellそのさん。 - Haswellでオーバークロック
Haswellそのよん。 - HaswellでQSV

この前書いたとおり、HaswellでQSVEncCを使うと同じ設定でもIvyより遅くなってしまう。GPUの演算力は大幅に向上しているはずで、かなり不可解な結果になっている。また、QSV実行中はBoostのかかった1200MHzの状態を維持できていたので、Boostのかかり具合の問題ではない。

ただ、テストとしてはちょっと簡単すぎるものなので、もう少しいろいろ試した方がいいとは思う。ご指摘をもらったのだけど、おっしゃってることはもっともで、別のソースやCQP以外のモードでもためしてみるべきかもしれない。

一方、ソフトウェア面のチューニングも必要な可能性が高い。

そこで、HaswellでのQSVと、新しくIntelから出ているIntel Media SDK 2013の更新内容についていろいろと。

Haswellで追加されたとされているもの (QSV関連)



後藤弘茂のWeekly海外ニュース - 次世代CPU「Haswell」の2倍強力なGPUコア
IDF 2012 - 次期Intel Core「Haswell」の内部構造を探る - Uncore(GPU/Media Block)編
このへんを参考にして見ていくと、HaswellでQSVに関係有りそうな変更としては、

GPUの強化(演算性能の向上、DirectX 11.1対応)
QSVの速度にも効果あるかと。まあご存知かとは思うけど、こちらのPhoto 23にあるように、QSVはすべてハードウェアで行なっているのではなく、GPU EUとハードウェア回路を組み合わせた実装となっている。レート制御、動き探索、イントラ予測、イントラ・インターモード決定などはGPU EUで行われているようだ。なので、GPUの演算力は重要だし、ひいてはメモリ速度も重要になってくる。

これにより、柔軟性を維持しつつ(つまりある程度はドライバなどで拡張可能)、パフォーマンスを発揮できる、ということらしい。確かにドライバでなんとかなるかも…という期待もできなくはない。ただ、そのドライバも残念なことが多いのだが…。

MPEG2エンコードのサポート
MPEG2エンコ、Haswellからだみたいなこと書いてあるけど、Sandy/Ivyでもできるはず…。QSVEncはその機能を使用してないだけで。

MJPEGエンコードのサポート

画質の向上
一番期待したいところ。現状QSVは高速だけど、どう設定しても高圧縮・高画質は達成できない。

Video Qualtiy Engineの追加
たぶんフィルタリング処理のハードウェアあるいはGPU EUを使用する実装。

ノイズ除去
インタレ解除
Film mode detection
肌色検出
肌色補正
色調制御
適応的コントラスト補正
高品質拡大・縮小
ガンマ補正
フレームレート変換
Image Stabilization (ぶれ補正)
ガンマ補正

などが列挙されている。主にカメラで撮影された映像に対して行う処理系で、ウェブカメラ等での撮影をリアルタイムで処理するとか、そういうことを対象にしているんだと思う。




Intel Media SDK 2013 (API v1.6)で追加されるものの詳細



Intel® Media Software Development Kit 2013 Release Notes より。

・JPEG/MJPEGエンコードを追加。
Haswell新機能のやつ。ちなみにJPEG/MJPEGデコードの方はAPI v1.4から対応していたと思う。

・H.264/AVC Level 5.2のサポート。

・H.264 intra refresh(周期的イントラ更新)のサポート?
正直intra refreshがなんなのかあまりよくわかっていないのでなんとも。

・レート制御の拡張 その1 MBBRC
マニュアルには、「マクロブロックレベルのレート制御を行い、心理視覚的な画質を向上させる一方、(PSNR・SSIMのような)客観的画質とエンコード速度がやや低下するだろう。」とある。

・レート制御の拡張 その2 ExtBRC
マニュアルには、「レート制御を拡張し、心理的・客観的な画質を向上させる。しかし、エンコード速度がそれなりに低下し、またH.264のHRDに違反した出力になるかもしれない。」とある。

VPP(フィルタリング)の拡張
Haswell新機能で出てきたブレ補正(Image Stabilization)と高品質拡大縮小。



レート制御の拡張は画質的に期待できそうな一方、やっぱダメみたいなオチもありそうで、実際Haswellを触ってみなきゃわからんところがある。個人的にはビットレート指定よりも品質一定系のレート制御の拡張をしてほしいものだが…?

マニュアルを見る限り、相変わらずあまり細かい設定はできなさそうだ。

現状QSVは、

・全体的に画質が悪い、特に実写だとディテールが相当潰れやすく、アニメだと輪郭付近やグラデーションなどが相当破綻する。

・実はIフレームの品質がそもそも悪いような…。

・適応的フレーム決定ができす、GOP構造は常に固定。0.15からQSVEncはシーンチェンジ検出させてるけど、あれはあくまで「任意のフレームをキーフレームにする」機能を使って、わたしが書いた謎コードでシーンチェンジ検出をしている。できればQSV(GPU側)でもっと高速にやって欲しいところ。

・ビットレート指定は使いにくいが、かといってCQPは動きが激しい動画などで容量膨れすぎ…

みたいな欠点があるけど、どうだろう。

また、これはQSVEncの課題だが、メモリ帯域が逼迫している…という問題。Haswellは相変わらずのDual-Channel DDR3なので、メモリ帯域の大幅な向上は見込めないし、公開されているベンチ等を見てもメモリアクセス速度は向上していない。Intelのここ最近のGPU強化路線からすると、メモリ帯域の向上は有効であるはずなので、なんとかならんものか。Quad Channel…は消費電力とかコストとかがやっぱり厳しいのかなあ。まあそもそも帯域よりもレイテンシの問題かもしれないけど。

そこでeDRAM、将来はTSVなんだろうけど、じゃあIrisちゃんをデスクトップにもおくれよ…。



最適化の余地は?



まず、新API v1.6への対応。ただこれによって速度が上がるとは思えない。

速度的に変わるかもしれないと思うのは、以下の2点。

・D3D11への対応
GPU側のメモリ確保に、DirectX系を使っているようなのだが、現在はDirectX9ベースとなっている。SampleプログラムにDirectX11系を使うサンプルがあるので、これを取り込む。

正直DirectXとかはよくわかっていないので、これがどういった効果があるかわからないけど、とりあえずやってみようと思う(サンプルプログラムのやつを取り込むだけのはずだし)。

・YUY2/YV12→NV12変換の修正等
まあ色変換といいつつメモリコピーのようなもんだけど、これをAVX2に対応させると速くなるかもしれない。たいして重い処理でもないので期待できないけど。

まあこんなところかなと。

でもその前に、もう少しいろいろなケースで測ってみて、本当に遅くなっているのか、遅くなっているならどこで遅くなっているのかを探るのが先だとは思う。



とりあえず今はafs + AVX2で苦戦してるので、QSVはそのあと?

追加機能も多そうなので、それなりに時間がかかると思う。


コメントの投稿

非公開コメント

No title

Haswellは “失敗作” なのか? ‐炎上騒ぎに見るCPU性能の検証と考察
http://ggsoku.com/2013/06/haswell-fire-cpu/

上記を読む限り、最初から4770系の統合GPU性能はIvy時代のそれと同程度だったみたいですね。逆にスコアが下がる…というのは、また別の問題かもしれませんが。

確かにどんなCPUにも同等のGPU性能、というのは少々疑問に感じてた部分でもありますが、まさかニーズを理由にハイエンド側のカットに踏み切るとは思いもしませんでした。

「Intel入ってる」はもう古い?

No title

たしかにmay様のおっしゃるように、4770Kに載っているGPUはHDG4600で、Haswellの最上位のGPUではありませんし、そのため性能向上も限定的なものとなっています。ただ、上記記事にはいくつか賛同しかねる部分があります。

上の記事では、Haswellががっかりされている原因が、Haswellのベンチマークスコアが低下していること、さらにデスクトップ製品にGT3(最上位のGPU)が載っていないことが周知されていなかったこととされています。

しかし、上記記事で引用されているベンチマークは、片方はES品の未成熟なものであり、片方は内蔵GPUの性能には触れていないものです。他の場所でいろいろな人の行っているベンチマークではHaswellはCPU・GPUともに少しではありますが性能が向上していることが示されています。

加えて、Haswellのデスクトップ製品に最上位のGPU(GT3)が搭載されず、GT2しか来ないことは以前から知られ、残念がられていました。(このことは私が参考にした2012年9月の記事でも述べられています。)

may様のおっしゃる通り、デスクトップ向けに最上位のGPUが搭載されないのは残念でなりません。やっぱりIrisちゃん(GT3e)をデスクトップで欲しいです…。

No title

Irisデスクトップでも出ますよ。BGAで提供されますが。

AVX2はちょっとだけクセがあるというか、まあ、このクセはIntel特有というかなんというか……設計が透けて見えるので個人的には好みではあります。
私は2時間ほどいじってたらどうにかなるようになりました。
その中でもvextracti128とvinserti128が以外と使い勝手がよいですね。
1日作業程度でSSE2コードの1.4倍以上の速度が稼げました。エンコード用途にはちょっと向かないかなとは思いますが、フィルタリングならかなりイイ命令が多いですよ。

Re: No title

> Irisデスクトップでも出ますよ。BGAで提供されますが。
4770Rですね。もう4770K買ってしまったのであれですが、ベンチ結果等楽しみです。

>AVX2
1.4倍とはすごいですね!
わたしはAVX2の"クセ"にはまり、ちょっと難儀しました。

そういえば「MFX_FRAMETYPE_xIDR」で死ぬ件って...

QSVEncありがたく利用させていただいている者です。

(QSVEncシーンチェンジ検出インタレ対応の)「MFX_FRAMETYPE_xIDR」で死ぬ件って
案外Intel Media SDK 2013だとあっさり動いた なんてオチは無いです...よねぇ?

MFX_FRAMETYPE_xIDR

ああ、了解です、ちょっと調べてみます。

認識してない?

現在i5-4670K+B85M+GTX650+Win8で組んだ状態です。
http://www.4gamer.net/games/128/G012877/20130404012/
を読んでから「haswellにしたの失敗か?」と思ったのですがIntelMediaSDK2013でのデモは高速(瞬間?)に動作しました。
喜び勇んでqsvencを起動するとHWが対応してないとの冷たいお言葉。
でもSDKが動いているんだから動くはずと色々やってみてlibmfxhw32.dllなるものを発見。
試しに同じフォルダに入れたら動いたではないですか。
・・・しかし。速度はなんと26fps程度。試しにとiGPUだけで起動させたら160fps出てる。
もしかするとSDK2013で何か違いがあるのではという前の人の話も納得できそうです。
可能であればSDK2013を取り込んだqsvencを試作してほしいのですが・・・。
自分でコンパイルしようとしたらエラー多発でお手上げです。
よろしくお願い致します。

No title

まず、Media SDK 2013の取り込み自体はほぼ終わっています。

SDK2013のMFX_FRAMETYPE_xIDRですが、相変わらず落ちてしまいました(3770K, 4770K両方)。報告が遅くなり申し訳ありません。

シーンチェンジ検出をすると階段上のフェード部分でおかしくなるとの報告を頂き、これの回避法を探っています。なので、回避法が見つかり次第公開したいと思っています。

ちなみにSDK2013で速くなったりはしないです…(@4770K)。

QSVEnc動作確認しました

上で書いたTakaです。
色々調べた所動くようになりました。
URLに入れたのですがこちらのような方法で
dGPUとiGPUを同時に動かすのが必要だったんですね。
VirtuMVPとかも試してみましたが必要なし!
欠点とすれば拡張した側のディスプレイにマウスが
行った時手探りで戻すしかないという部分程度。
160fpsも無事に稼動してます。
お騒がせしました。
プロフィール

rigaya

Author:rigaya
アニメとか見たり、エンコードしたり。
連絡先: [email protected]
github twitter

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

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

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

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

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

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

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

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

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


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

clcufilters 
- OpenCL/CUDAの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対応版

tsreplace
- tsの映像のみを置き換えて圧縮

rkmppenc
- Rockchip系SoCのhwエンコーダ

fawutil
- FAW(FakeAACWave)⇔aac変換
- 二重音声の取り扱いにも対応

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