- 2005-06-16 (Thu) 02:26
- プログラミング
今回のプログラムの課題は 1024x1024 の画像を1度ずつ回転させろとこのこと.速度重視で秒間に何回まわせるかを追求する.で,早速速度度外視の Java でアルゴリズムの検証をば.
まず,ピクセルは回転先画像の各ピクセルからから元の画像の対応するピクセルをコピーすれば穴はなくなると.んで,対応するピクセルが存在するかの判定を毎回するのは馬鹿なので,各行に対して対応するピクセルが存在する範囲をあらかじめ求めておいてジャンプを減らすと.これをやると 16fps から 19fps に速度アップ(でもあまり大きく上がらないなぁ.)
もうひとつ,普通に走らせていると90度ごとに fps が遅くなることに気づく.これは,90度回転あたりで row major に格納されているデータを column major でアクセスし,キャッシュミスが大量に発生することによる.ということで,キャッシュを当てやすくするように90度回転したデータをも保持しておいて,角度の近いほうからコピーするように改善.これで結構速度が安定してきた.
あとは,メモリを倍喰うけど元画像の周りに黒塗りの領域を作っておいて if の判定自体をなくしてしまうのと,これに伴って90度回転以外の中間画像も作っておいてキャッシュを当てやすくする.んで,効果が確認できたら速度重視のC++に移ると.
- Newer: AWK - はじめ