VCの最適化
STATUS: 故障中
コメント
「赤く塗れ」を改良中。
画面の赤い部分を徐々に暗くする処理を高速化しようと思い、再内周ループを最適化してます。
for ( int x=0; x<m_dibsec.m_nWidth; x++ ) {
いま、こんな感じで、ループの条件判断の度にメンバ変数を見に行くので、これは無駄すぎ。
このコードでは1000回ループで、400msくらいかかっています。
ということで次のように変えてみました。
int nWidth = m_dibsec.m_nWidth;
for ( int x=0; x<nWidth; x++ ) {
一度ローカル変数に代入するようにしてみました。
が、これでベンチをとると1000回ループで、500msくらいかかるようになってしまいまいた。逆に遅くなってるよ。
リスティングファイルのASMコードをみると、このループ自体はループ変数がレジスタに割り当てられて高速化しているのですが、ループ内部の処理でレジスタが足りなくなってメモリアクセスを行うようになってしまったようです。
x86はレジスタ少なすぎ。
とか文句をいっていてもしょうがないので、もうちょっと改良したら1000回ループで350msくらいで終わるようになりました。
もともと突込みどころが沢山あるコードだったぽい。