AviSynthCUDAFiltersをビルドに挑戦 (まだ課題あり)

Amatsukazeでは、nekopanda氏が開発されたCUDAフィルタが使用でき、そのおかげで高速にフィルタリングできる。

それらのフィルタ類のソースコードはこちらで公開していただけている。

ただ、当時のビルド環境は、Visual Studio 2015 + CUDA 8.0だったようなので、これをより新しい環境でビルドしてみた。

以前もAviSynthCUDAFiltersのビルドに挑戦した話を書いたのだけど、そのときは2つほど課題があった。そのうちひとつは解消できたという話。

ということで、forkさせていただいて、Visual Studio 2019/2022 + CUDA 11~12でビルドできるようにしてみた。(fork版はこちら)

Visual Studio 2019か2022とCUDA11-12がインストールされていれば、一応問題なくビルド自体はできるはず。(CUDA10はC++17が使えないので対応せず)

ビルドにはsubmoduleも必要なので、下記コマンドでソースコードをダウンロードする必要がある。

git clone --recursive https://github.com/rigaya/AviSynthCUDAFilters.git



以前は再ビルドした時の課題として、KNNEDIを最近のCUDAでビルドして動かすとフリーズしてしまうということを書いた。具体的には、エンコード開始後GPU 使用率100%のままフリーズしてしまった。

調べてみると、新たにビルドしたKNNEDIでは、nnedi3_kernel.cuのkl_prescreeningという関数でフリーズしていることがわかった。また、RTX4080ではフリーズするが、GTX1060ではフリーズしないこと、さらにオリジナルのCUDA8.0のビルドではRTX4080でもフリーズしないことも考えると、CUDA 9.0で追加された__xxx_sync系の関数のあたりが一番怪しそう。

調べてみると、warp内(32スレッド)で条件の成立不成立の異なるif文の中で__shfl_up_syncがフルマスクで使われている箇所があった。

__xxx_sync系の関数は、適用するマスクのスレッドがif文の条件分岐の結果、その関数を実行しないとフリーズしてしまうとされている。(参考 → https://developer.nvidia.com/blog/using-cuda-warp-level-primitives/)

おそらくここかなあという感じで、フルマスクでなく適切なマスクを使用するように修正すると、無事フリーズは解消することができた。(→具体的な変更はこちら)



ただ、前の記事で書いたもう一つの問題は未解決。

現行のAmatsukaze付属のKFMDeint.avsiにはis120というオプションがあり、KFMSwitchなる関数でこれを指定している。おそらく120fps精度でtimestampを計算するオプションなのかなあと思う。

が、ソースコード(AviSynthCUDAFiltersのほう)のKFMSwitchのほうにはis120オプションがなく、これをコンパイルしてもエラーで終了してしまう。

AviSynthCUDAFiltersのほうのKFMDeint.avsiにはたしかにis120オプションはないので、どこかにタイミングでAmatsukaze付属のものだけ更新されたのかもしれないが、なんともいえない。探し切れていないだけ?

is120が実際の計算で具体的になにをやっているのかも私にはよくわからない…

ということで、まだ再ビルドしたもので動かせるようになるまでの道のりは遠そう。
スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

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様

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