x265 ビルド msys2 gcc版 (AVX512対応)

これまでは、x265はVisual Studioでビルドしていたのだけど、AVX512対応版をビルドしようとするとなぜかうまくいかないため、gccでビルドすることにした。

2018/4/14 19:43にx265 2.7+336をここで紹介するgccでプロファイルによる最適化を実施した実行ファイルに差し替えました。




準備



msys2を使うと、非常に簡単にgccによるビルド環境が作れるので、それで。

そのほか、mercurial(hg)とcmakeをインストールしておく。

msys2
cmake
mercurial




msys2を最新へ。

まず、msys2のインストールフォルダにあるmsys2.exeを起動して、コアとパッケージシステムを更新。

pacman -Syu


一度、msys2.exeを再起動した後、残りを更新する。

pacman -Su


gccビルド環境と、そのほかx265のビルドに必要なものをインストール。

pacman -S base-devel
pacman -S mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
pacman -S nasm


一度msys2を終了する。

msys2のインストールフォルダには、
・msys2.exe
・mingw32.exe
・mingw64.exe
があるのだけど、32bit向けのコンパイルをしたい場合にはmingw32.exe、64bit向けのコンパイルをしたい場合にはmingw64.exeを起動すれば、自動的にそれ向けに環境が整備されて、あとは普通に gcc とかをたたけばよい。

このあたり、msys2はわかりやすくて非常に良い感じ。

あとは、プロファイル用の入力ファイルをy4m形式で作成しておく。

ffmpegでy4mを作る場合、
ffmpeg.exe -y -i <ソース動画> -an -pix_fmt yuv420p -f yuv4mpegpipe -frame 30 <出力.y4m>
とかで作れば良いと思う。



ビルド



msys2環境向けに、x265実行ファイルを作成するためのスクリプトを作ったので参考にしていただければ。
build_x265.sh

スクリプトの上のほうにある、

#cmake.exeのある場所
CMAKE_DIR="/C/Program Files/CMake/bin"
#hg.exeのある場所
HG_DIR="/C/Program Files/Mercurial"
#プロファイル用のソース
Y4M_PATH=$HOME/sakura_op_cut.y4m

を自分の環境にあったものに変更してから、実行すれば、

$HOME/build_x265/{x86, x64}/x265/build/msys/8bit

以下に x265.exe が作成される。(multilibバイナリでも8bitのフォルダの下に作成される)

このスクリプトは32bit/64bit両対応で、mingw32.exeのシェルで実行すればx86(32bit)版が、mingw64.exeのシェルで実行すればx64(64bit)版がビルドできる。

x86版(32bit向け)は普通の8bitのみの実行ファイルだが、x64版(64bit向け)はgccのプロファイル付き最適化を使用したmultilib(8bit+10bit+12bit)の実行ファイルができる。

flto(プログラム全体の最適化)もやってみたのだけど、うまくいかない(リンクでこける…)のであきらめ。



fprofiled(プロファイルによる最適化)の効果



実験環境
i9 7980XE (18C/36T, 4GHz、AVX offsetなし)
電源設定: 高パフォーマンス

Aviutl 1.00
x265guiEx 3.67v2
x265 3.6+336 (fprofiled あり版 と なし版)

x265オプション
--crf 21 --preset <各種プリセット> [--output-depth 10] --asm avx512

ソース
sample_movie_1080p.mpg (1920x1080, 29.97fps, 5203frame, 2分53秒)



fprofiledの最適化は、gccでもきちんと効果があるみたいで、3~5%ほど改善している。


コメントの投稿

非公開コメント

参考になりました+α

ビルドスクリプトがとても参考になりました。ありがとうございます。

なお、このままでは、ffmpeg との static link を試みた際に

 ・undefined symbol エラーが出る
 ・libstdc++ へのdynamic link が残る

という問題がありましたが、他のサイトの情報も参考にしつつ、最後の部分を以下のように工夫したところ、これらの問題は解消しました。

--------------------------------------------
make -j${NJOBS}

cat << EOF > libs.in
CREATE libx265.a
ADDLIB libx265_main.a
ADDLIB libx265_main10.a
ADDLIB libx265_main12.a
EOF

if [ "${ENABLE_SVT_HEVC}" = "ON" ]; then
cp $BUILD_DIR/${TARGET_ARCH}/SVT-HEVC/Bin/Release/libSvtHevcEnc.a .
echo "ADDLIB libSvtHevcEnc.a" >> libs.in
fi

sed -i.orig -e "/Libs.private/d;/Libs/a Libs.private: -lstdc++" x265.pc
mv libx265.a libx265_main.a

cat << EOF >> libs.in
SAVE
END
EOF

ar -M < libs.in

make install
--------------------------------------------

以上、ご参考まで
プロフィール

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