x264はCPUの拡張命令を使うことで、どんどん速くなっている。
--asmオプションを使うことで、x264が使用する拡張命令を選択することができるので、どのレベルの拡張命令が効くのかを試してみた。
環境
Win7 x64
Aviutl 0.99k
x264guiEx 1.26
Core i5 2500 (4C/4T, L3=6MB, ~AVX) 3800MHz
RAM 4GB, DDR3-1333, Dual Channnel
素材
H.264 High Profile
1920x1080p 23.976fps
2154frames (1m 30s)
ましろ色シンフォニー OPを1920x1080に拡大してエンコードしたもの
lsmashinputで読み込み
x264
x264.nlの64bit版
r2120/r2146の8bit
x264 オプション
ちょい重め。
--crf 20 --ipratio 1.5 --qpstep 12 --qcomp 0.75 --no-mbtree --rc-lookahead 60 --vbv-bufsize -1 --vbv-maxrate -1 --aq-strength 0.4 --psy-rd 1:0.2 --keyint 240 --min-keyint 4 --b-adapt 2 --me umh --subme 10 --merange 32 --direct auto --ref 4 --no-fast-pskip --no-dct-decimate --trellis 2 --colormatrix auto --colorprim auto --transfer auto
Aviutlのフィルタはなし
4回同じエンコードを行い、その最速値を結果として採用
比較
--no-asm アセンブラコードを使用しない
--asm MMX2/SSE2Fast/SSE3/SSSE3/SSE4.1/SSE4.2/AVX
x264のログ表示
--no-asm
using cpu capabilities: none!
--asm MMX2
using cpu capabilities: MMX2
--asm SSE2Fast
using cpu capabilities: MMX2 SSE2Fast
--asm SSE3
using cpu capabilities: MMX2 SSE2
--asm SSSE3
using cpu capabilities: MMX2 SSE2Fast SSSE3
--asm SSE4.1
using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1
--asm SSE4.2
using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
--asm AVX
using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
SSE3命令は使われていないのかな。まあ整数演算に効きそうな命令ないよね。
結果

こうしてみるとやっぱr2120→r2146でだいぶ速くなったねえ…
さて、予想通りSSE2はないと厳しいわけだけど、その後SSSE3、SSE4.1、意外とAVXとかも少しづつ速度を押し上げてる。
PhenomIIx6とかであんま速度が出ないらしいけど、やっぱSSSE3あたりがないのも関係してるんだろうなあ…