x264_fdec_filter_rowのSPU化

x264_fdec_filter_rowのSPU化が動作するようになったのでパッチをアップします。2月にプロファイルを取ったときに全体の約20%の処理時間がかかっていた所です。場所はいつものところ

ベースのコードはr656のままです。

  • SPU化 1スレッド
$ time ./x264 -q 26 ../spiderman2.y4m -o spiderman2.spu.264
yuv4mpeg: 720x480@29970029/1000000fps, 0:0
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:9     Avg QP:23.00  size: 11150  PSNR Mean Y:51.27 U:54.89 V:54.90 Avg:52.13 Global:46.43
x264 [info]: slice P:1783  Avg QP:26.00  size:  3911  PSNR Mean Y:42.51 U:46.64 V:47.31 Avg:43.54 Global:43.32
x264 [info]: mb I  I16..4: 68.6%  0.0% 31.4%
x264 [info]: mb P  I16..4:  4.3%  0.0%  4.5%  P16..4: 16.1%  6.8%  1.6%  0.0%  0.0%    skip:66.6%
x264 [info]: SSIM Mean Y:0.9736544
x264 [info]: PSNR Mean Y:42.551 U:46.685 V:47.345 Avg:43.586 Global:43.328 kb/s:946.33

encoded 1792 frames, 5.56 fps, 946.42 kb/s

real    5m22.410s
user    3m37.496s
sys     0m9.006s
  • SPU化 2スレッド
$ time ./x264 --threads 2 -q 26 ../spiderman2.y4m -o spiderman2.spu2.264
yuv4mpeg: 720x480@29970029/1000000fps, 0:0
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:25    Avg QP:23.00  size: 15437  PSNR Mean Y:46.90 U:50.35 V:50.51 Avg:47.77 Global:45.57
x264 [info]: slice P:1767  Avg QP:26.00  size:  3802  PSNR Mean Y:42.51 U:46.69 V:47.34 Avg:43.55 Global:43.33
x264 [info]: mb I  I16..4: 63.9%  0.0% 36.1%
x264 [info]: mb P  I16..4:  4.1%  0.0%  4.2%  P16..4: 16.2%  6.9%  1.6%  0.0%  0.0%    skip:67.0%
x264 [info]: SSIM Mean Y:0.9737038
x264 [info]: PSNR Mean Y:42.575 U:46.736 V:47.384 Avg:43.613 Global:43.350 kb/s:950.47

encoded 1792 frames, 8.46 fps, 950.63 kb/s

real    3m32.154s
user    5m17.233s
sys     0m13.426s
  • SPU化 6スレッド
$ time ./x264 --threads 6 -q 26 ../spiderman2.y4m -o spiderman2.spu6.264
yuv4mpeg: 720x480@29970029/1000000fps, 0:0
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:25    Avg QP:23.00  size: 15437  PSNR Mean Y:46.90 U:50.35 V:50.51 Avg:47.77 Global:45.57
x264 [info]: slice P:1767  Avg QP:26.00  size:  3802  PSNR Mean Y:42.52 U:46.69 V:47.34 Avg:43.56 Global:43.33
x264 [info]: mb I  I16..4: 63.9%  0.0% 36.1%
x264 [info]: mb P  I16..4:  4.1%  0.0%  4.2%  P16..4: 16.2%  6.9%  1.6%  0.0%  0.0%    skip:67.0%
x264 [info]: SSIM Mean Y:0.9737074
x264 [info]: PSNR Mean Y:42.577 U:46.737 V:47.387 Avg:43.615 Global:43.351 kb/s:950.47

encoded 1792 frames, 9.81 fps, 950.63 kb/s

real    3m3.142s
user    5m44.396s
sys     0m16.975s

相変わらず1スレッドはPPUの方が速い。うーむ。どこかに妙な待ちが入っているのか?2スレッドと6スレッドはPPUより速いです。前回の6スレッド版よりも速いので、少しはSPU側で実行する部分が増えて効果が出たということにします。

全体の20%の部分なので、この速度が0になっても処理時間は4/5にしかならないので、まーこんなもんですかね。

さてさて次はx264_macroblock_analyse関数が本命ですが、大きそうなのでx264_me_search_ref関数あたりから攻めますか。コードを見ながら考えましょう。