mplayer-bvdd + iwmmxt

ぴろさんにsoftvfpなtool chainの作り方を教えて頂いたので(ありがとうございます)、iWMMXt版IPPとリンクしてみた。


$ time ../mplayer/mplayer -vo bvdd /hdd3/RL_XQ_480x640_1500_128.avi -really-quiet -hardframedrop
163.42s user 4.23s system 96% cpu 2:53.83 total

あれ?遅くなってる……。なんか間違えた?

あ、libmadをビルドするのを忘れていた。


$ time ../mplayer/mplayer -vo bvdd /hdd3/RL_XQ_480x640_1500_128.avi -really-quiet -hardframedrop
143.61s user 3.39s system 93% cpu 2:36.57 total

おー、速くなった。見た目にも速くなっているのがわかる。苦労せずにこれだけ速くなれば満足。

CFLAGSに-staticを追加すれば全てのライブラリを静的リンクしてくれるので、softfloat環境にchrootする必要が無くていい感じ。バイナリサイズも4MByteちょいとほとんど変わらず。

とりあえず、memcpyを使っているdraw_slice_420()をアセンブラで最適化、次にdsputil系をiWMMXt化してみよう。

単純なメモリコピーをiWMMXtレジスタを使って64-bit単位で行なうようにすると、速くなるんだろうか。

ちょっとだけiWMMXtのコードを書いてみた。gccのフラグは-mcpu=xscale -Wa,-mcpu=iwmmxtって感じにする。

どうもメモリの速度で律速しているようで、もとのARM版とほとんど変わらない。かなり広範囲にわたって最適化しないと有意な差は出てこなさそう。大変だ。