自動フィールドシフト 高速化版 +18

去年(2015年)は自動フィールドシフトを高速化できず、まことに遺憾であった。

でも、やっぱり執念深く高速化しようとは思っているわけで、やっとネタを思いついて、実装してみた。ところが、演算量が少し減るぐらいの話だったので、計っても全く分からない程度という情けない結果に終わった。

やはり演算量なんぞよりメモリアクセスを減らさないと速くならないようだ。全く残念だ。

なので、メインはプリセットボタンの追加、コンパイルオプションの修正など。



更新内容



・「デフォルト」ボタンを追加した。
設定をデフォルトに戻す。実はなかった。

・「24fps固定 (HD)」ボタンを追加した。
これがベストではないと思うけど参考程度に追加。とりあえずそんなに誤爆はしない…と思う。もともとの「24fps固定」はこのフィルタが作られた当時主流だったSD向けで、あまりHDには向いていないような気がしている。

・AVX2使用時に128bit境界またぎを減らしてわずかに高速化。
AVX2命令では、256bit演算とか言いつつ、ただの128bit演算×2をする命令がほとんどになっている。特にshuffle系とかvpalignr命令の「これじゃない感」はなかなか。まあこれを生かして上側128bitだけ電源を落として省電力化とかいう小細工をやっているようだが…。

で、128bit境界をまたぐためにはやや遅めの命令を使わないといけない。なのでこれが減るよう工夫した。

・afsvf.aufで、一部関数が遅くなっていた可能性があるのを修正。
AVX/AVX2命令を含む関数は、/arch:AVXオプションをつけてコンパイルしないと遅くなることがある。プロジェクト全体に/arch:AVXをつけると、プラグイン全体がAVX非搭載のCPUでは動かなくなってしまうため、AVX/AVX2を使う関数は専用のファイルにまとめて、そのファイルだけ/arch:AVXをつけてコンパイルするようにしている。

これをafsvf.aufのほうで、ある一つのファイル("afs_filter_avx2.cpp")で忘れてしまっていた。

今回、AVX/AVX2を使う関数のあるファイルに、以下のようにして、コンパイル時に、/arch:AVXをつけたかどうかチェックするようにした。念のため、のつもりだったのだが、見事にひっかかったので気づくことができた。


#if _MSC_VER >= 1800 && !defined(__AVX__) && !defined(_DEBUG)
static_assert(false, "do not forget to set /arch:AVX or /arch:AVX2 for this file.");
#endif


・その他、無駄な計算を減らしてわずかに高速化。
一部の演算にMMX命令とかを使ってみた。



自動フィールドシフトは遅いとか遅いとか、よく聞くので、さらに速くしたいものである。

ところが、いまは完全にメモリの速度に律速されていて、これを打破する方法が思いつかない(というかやりつくした)ため、このままいくとまた今年も速くなりそうにない。やはりYUY2フィルタモードとか、あるいは輝度だけ解析するモードとか、ともかく大きくSIMDコードを追加することになる更新をしないといけないかもしれない。



ダウンロード>> (skydrive) (dropbox)



スポンサーサイト



コメントの投稿

非公開コメント

No title

突然失礼します
afsのプリセットを変えるには「afs.cpp」内の下のほうを変えるだけでいいのでしょうか?

Re: No title

そうなります。その辺の値をいじくるだけで変えられます。

プリセットの名前は、2479行目のinit_dialog()の中、各プリセットの値はその下のon_lv~~_button()のなかです。

No title

返信ありがとうございました

No title

VFって、ビデオフィルターじゃなくてVery Fastの略だと思ってました(笑)

Re: No title

なるほど…いや、Very Fastにはしたいです!

No title

おお、常用してるafs高速版がまた更新されるとは。
ありがたいですね~ちょっぴり期待します。

No title

rigaya様、いつもお世話になっております

afs_7.5a+18において、解除Lv1の状態でシーンチェンジ検出(解除Lv1)にチェックを入れると「aviutl.exeは動作を停止しました」と出てaviutlごと落ちます
逆の手順でも同じく落ちます
ビデオフィルタ版では発生しないようです

環境
win8,1、i5 4690S、HD4600、MEM16GB、aviutl1.00、afs7.5a+18

Re: No title

不具合のご指摘いただきありがとうございました。+19で修正できていると思います。
http://rigaya34589.blog135.fc2.com/blog-entry-754.html
プロフィール

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