SL-C3000予約した

とりあえずAmazonで。すぐには届きそうにないけど。

ぼけーっとiWMMXtの情報を眺めてみたり。

2.3.3.2 Memory Alignment
The General-Purpose registers can contain the offset from a word boundary when unaligned data is loaded using a standard ARM*-aligned load. This offset lets the WALIGN instruction extract the correct 64-bit double word from two aligned double words that have already been loaded. The memory-alignment value is set by extracting the lower order address bits from the ARM* Base register and transferring these to the Wireless MMXTM technology Destination General-Purpose register.

いいなぁこれ。今はshiftとorを使い手動でアラインメントを調整してるんだけど、これが1命令で出来るみたい。

  • -

コール数の参考に。stubなんで時間は参考にならない。


5.71 131.86 23.59 2242217 0.01 0.01 put_pixels8_xy2_c
3.66 226.97 15.13 2236191 0.01 0.01 put_pixels8_c
5.47 154.45 22.59 2139783 0.01 0.01 put_no_rnd_pixels8_xy2_c
0.04 409.64 0.15 1264581 0.00 0.01 put_no_rnd_pixels8_y2_c
0.04 409.31 0.18 1257958 0.00 0.01 put_pixels8_y2_c
0.06 407.80 0.25 1211569 0.00 0.01 put_pixels8_x2_c
0.05 409.13 0.19 1209277 0.00 0.01 put_no_rnd_pixels8_x2_c
0.01 412.10 0.04 506653 0.00 0.01 put_no_rnd_pixels8_c
0.03 410.35 0.13 410283 0.00 0.02 put_pixels16_xy2_c
0.04 409.79 0.15 392091 0.00 0.02 put_no_rnd_pixels16_xy2_c
0.03 410.58 0.11 311284 0.00 0.01 put_pixels16_c
0.02 410.98 0.09 277018 0.00 0.03 put_no_rnd_pixels16_y2_c
0.01 412.14 0.04 268308 0.00 0.03 put_pixels16_y2_c
0.03 410.69 0.11 255870 0.00 0.01 put_no_rnd_pixels16_c
0.02 411.21 0.07 256186 0.00 0.03 put_no_rnd_pixels16_x2_c
0.00 412.56 0.02 256046 0.00 0.03 put_pixels16_x2_c

元動画 150s / 最適化前のプロファイル版 362s / あと 212s
元動画 150s / put_pixels8_c, put_pixels8_x2_c 最適化 347s / あと 197s
元動画 150s / put_no_rnd_pixels8_c 最適化 341s / あと 191s
元動画 150s / put_no_rnd_pixels8_x2_c 最適化 338s / あと 188s
元動画 150s / put_pixels16_c, put_no_rnd_pixels16_c 最適化 332s / あと 182s
元動画 150s / put_pixels16_x2_c, put_no_rnd_pixels16_x2_c 最適化 313s / あと 163s
元動画 150s / put_pixels8_y2_c, put_pixels16_y2_c 最適化 294s / あと 144s
元動画 150s / put_no_rnd_pixels8_y2_c, put_no_rnd_pixels16_y2_c 最適化 278s / あと 128s

xy2は難しいなぁ。レジスタが32本欲しい。

mpeg4_decode_blockがコール回数約2200万、プロセッサクロックが400MHzだから、18クロック削ればこの場合1秒の高速化なのか。意外とデカいな。

xy2苦戦中。

元動画 150s / put_pixels8_xy2_c 最適化 272s / あと 122s
元動画 150s / put_no_rnd_pixels8_xy2_c, put_pixels16_xy2_c, put_no_rnd_pixels16_xy2_c 最適化 234s / あと 84s

一通り終わったので、gccの最適化を掛けて検証。


$ mplayer-1.0pre5.2 /mnt/card/RL_XQ_640x480_1500_128.avi -vo null -ao null
254.24s user 13.72s system 94% cpu 4:42.49 total
$ ./mplayer /mnt/card/RL_XQ_640x480_1500_128.avi -vo null -ao null
229.89s user 14.50s system 94% cpu 4:19.47 total
10%の速度向上。うーん、あんまり変わらんなぁ。