6スレッド詳細
今回のパッチもいつもの場所に置きました。
今回はSPU化は動かすのが第一目的なので速度は二の次です。ですのでDMAでデータを取ってくる処理は全部完了待ちを入れながら処理しますし、SIMD化していません。ですが、せっかくなので速度を見てみます。確認データはいつものスパイダーマン2のtrailerです。長さは1分。
オリジナルコードはr656リビジョンになります。
- オリジナルコード 1スレッド
$ ./x264 -q 26 ../spiderman2.y4m -o spiderman2.ppu.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:49.27 V:49.39 Avg:50.22 Global:44.05 x264 [info]: slice P:1783 Avg QP:26.00 size: 3911 PSNR Mean Y:42.51 U:41.15 V:42.11 Avg:42.05 Global:41.80 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:41.194 V:42.149 Avg:42.090 Global:41.813 kb/s:946.33 encoded 1792 frames, 5.92 fps, 946.42 kb/s
- オリジナルコード 2スレッド
$ ./x264 --threads 2 -q 26 ../spiderman2.y4m -o spiderman2.ppu2.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:44.88 V:45.71 Avg:46.11 Global:43.68 x264 [info]: slice P:1767 Avg QP:26.00 size: 3802 PSNR Mean Y:42.51 U:41.16 V:42.11 Avg:42.05 Global:41.81 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:41.209 V:42.158 Avg:42.110 Global:41.827 kb/s:950.47 encoded 1792 frames, 8.11 fps, 950.63 kb/s
- オリジナル 6スレッド
$ ./x264 --threads 6 -q 26 ../spiderman2.y4m -o spiderman2.ppu6.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:44.88 V:45.71 Avg:46.11 Global:43.68 x264 [info]: slice P:1767 Avg QP:26.00 size: 3802 PSNR Mean Y:42.52 U:41.16 V:42.11 Avg:42.05 Global:41.81 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:41.208 V:42.158 Avg:42.110 Global:41.827 kb/s:950.47 encoded 1792 frames, 8.12 fps, 950.63 kb/s
1スレッド時の速度が去年の12月に測定したときより落ちています。2スレッドにするとかなり速度があがります。これはPPUがSMPで2コアあるためです。カーネル起動時にペンギンが2匹でているわけですし。ですが、当然6スレッドにしても速度は向上しません。
次は今回のSPU化の結果です。
- SPU化 1スレッド
$ ./x264 -q 26 ../spiderman2.y4m -o spiderman2.spu.264 yuv4mpeg: 720x480@29970029/1000000fps, 0:0 x264 [info]: using cpu capabilities Altivec ^[[B^[[Bx264 [info]: slice I:9 Avg QP:23.00 size: 11150 PSNR Mean Y:51.27 U:49.27 V:49.39 Avg:50.22 Global:44.05 x264 [info]: slice P:1783 Avg QP:26.00 size: 3911 PSNR Mean Y:42.51 U:41.15 V:42.11 Avg:42.05 Global:41.80 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:41.194 V:42.149 Avg:42.090 Global:41.813 kb/s:946.33 encoded 1792 frames, 5.38 fps, 946.42 kb/s
- SPU化 2スレッド
$ ./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:44.88 V:45.71 Avg:46.11 Global:43.68 x264 [info]: slice P:1767 Avg QP:26.00 size: 3802 PSNR Mean Y:42.51 U:41.16 V:42.11 Avg:42.05 Global:41.81 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:41.209 V:42.158 Avg:42.110 Global:41.827 kb/s:950.47 encoded 1792 frames, 8.04 fps, 950.63 kb/s
- SPU化 6スレッド
$ ./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:44.88 V:45.71 Avg:46.11 Global:43.68 x264 [info]: slice P:1767 Avg QP:26.00 size: 3802 PSNR Mean Y:42.52 U:41.16 V:42.11 Avg:42.05 Global:41.81 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:41.208 V:42.158 Avg:42.110 Global:41.827 kb/s:950.47 encoded 1792 frames, 9.09 fps, 950.63 kb/s
1スレッドの場合PPUより落ちています。まー、コードを考えればしょうがないです。ですが、2スレッドにするとPPUに肉薄します。で、6スレッドにすると追い抜きます。いちおう6スレッド化による効果は出ているようです。
よかったよかった。次はSDK2.1を入れて、libspe2へ移行することも考えますかね。そいでもってPPU側の処理をできるだけ多くSPUへ持っていけばもうちっとましな速度になるかなー。