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へ持っていけばもうちっとましな速度になるかなー。