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を起動して、コアとパッケージシステムを更新。
一度、msys2.exeを再起動した後、残りを更新する。
gccビルド環境と、そのほかx265のビルドに必要なものをインストール。
一度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
スクリプトの上のほうにある、
を自分の環境にあったものに変更してから、実行すれば、
以下に 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%ほど改善している。
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%ほど改善している。