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関数あたりから攻めますか。コードを見ながら考えましょう。