|
今回は分岐とループの最適化の一例を示します。 問題: 配列の中で、負の値が500個続くかどうかを調べる。
これを分岐について最適化します
この場合はar[x]の値が負の値が多いので速度に差は出ませんが もっと正の値が出やすくなると差がはっきりしてきます。 次はWhileをForにします。
これは速くなりました。 なぜ速くなるかというと Whileの場合は inc 加算 cmp 比較 jl ジャンプ となっていたのが forのときは dec 減算 jnz ジャンプ となるためです。 これを if ag>=500 thenのところでもやってみようとしましたが
速度は変わりませんでした。 しかたないのでアセンブラで書いてみました
これは速くなりました。 run6では // test ecx,ecx が余分にはいっていたのでそれを抜いただけです。 私は、あまり資料はみないで 実験してみて速かったらまあいっかと考えているので 結構いい加減です。 |