あけましておめでとうございます!
今年も一年よろしくお願いします。
ところで、皆さんは実行速度を上げるにはどうしていますか?
僕は
「A=A+1」を「A++」にしてみたり、
「A=A*2」,「A=A/2」みたいな2の倍数の掛け算割り算を「A=A<<1」「A=A>>1」にしたり、
極力Stringを使わないようにしています。
実行速度をあげる
-
- 記事: 893
- 登録日時: 2005年7月25日(月) 13:27
- お住まい: 埼玉県東松山市
速度を上げるべきところを関数化して、そこをアセンブリ言語で記述したDLLで置き換えるとか。
アセンブリ言語を使えば、足し算を行うのと同じ時間で3倍・5倍・9倍の値を求めることが可能な演算(LEA)があったりとかあるので便利だったりします。
ただし、ABより速いって程度の速度なら普通に出ますが、本格的に最適化をしようとすると
ペアリングがどうとかAGIストールだのパイプラインストールだのパーシャルレジスタストールだの
色々制約があったりして、最速コードを組み上げるのは結構難しかったりするのですが。
ABだけでやるなら、本当にその記述で速度が上がっているのかどうかを確認したりします。(数百万回実行してそれに要した時間を見るとか、実行ファイルを逆アセンブラにかけて解析するとかね。)
文字列系で速度を上げるならString使用は問題外としても、lstrcatをlstrcpyで置き換えるとか。
lstrcatだと文字列がどこで終わってるか判定する必要があるので、長い文字列を扱う場合に重くなるんですよね。
連結する文字列の長さがはっきりしている場合は、memcpyの方がいいと思います。
あとはVarPtrやらAddressOfやらの戻り値を何度も使う場合は、一度変数に代入しておくとか。
と、ここまで書いたのは本当に実行速度が求められるときに関して必要なことであって、
実行速度がそれほど重視されない場合は書きやすさ・読みやすさを優先するべきだとは思います。
アセンブリ言語を使えば、足し算を行うのと同じ時間で3倍・5倍・9倍の値を求めることが可能な演算(LEA)があったりとかあるので便利だったりします。
ただし、ABより速いって程度の速度なら普通に出ますが、本格的に最適化をしようとすると
ペアリングがどうとかAGIストールだのパイプラインストールだのパーシャルレジスタストールだの
色々制約があったりして、最速コードを組み上げるのは結構難しかったりするのですが。
ABだけでやるなら、本当にその記述で速度が上がっているのかどうかを確認したりします。(数百万回実行してそれに要した時間を見るとか、実行ファイルを逆アセンブラにかけて解析するとかね。)
文字列系で速度を上げるならString使用は問題外としても、lstrcatをlstrcpyで置き換えるとか。
lstrcatだと文字列がどこで終わってるか判定する必要があるので、長い文字列を扱う場合に重くなるんですよね。
連結する文字列の長さがはっきりしている場合は、memcpyの方がいいと思います。
あとはVarPtrやらAddressOfやらの戻り値を何度も使う場合は、一度変数に代入しておくとか。
と、ここまで書いたのは本当に実行速度が求められるときに関して必要なことであって、
実行速度がそれほど重視されない場合は書きやすさ・読みやすさを優先するべきだとは思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
-
- 記事: 154
- 登録日時: 2006年5月02日(火) 16:27
-
- 記事: 893
- 登録日時: 2005年7月25日(月) 13:27
- お住まい: 埼玉県東松山市
まともに読める(しかし遅い)コードをコメントアウトして、それと等価で高速なコードを書いておくとかそういう方法ならたまに取ったりしますが。
アセンブリ言語で書く場合は、割り算を掛け算に直して計算するとかしなければ
普通はとても読みやすいコードになるんですがね。
でもアセンブリ言語の場合は、大抵、
効率性(資源を無駄使いしない事)と実行速度は高くても保守性や移植性が低かったりと
非個人で開発する場合には導入は難しいのですが。
一般的に一番大事なのは小手先の技術力ではなくて、他人にとって読みやすいコードをいかにして書くかってことだと思います。
アセンブリ言語で書く場合は、割り算を掛け算に直して計算するとかしなければ
普通はとても読みやすいコードになるんですがね。
でもアセンブリ言語の場合は、大抵、
効率性(資源を無駄使いしない事)と実行速度は高くても保守性や移植性が低かったりと
非個人で開発する場合には導入は難しいのですが。
一般的に一番大事なのは小手先の技術力ではなくて、他人にとって読みやすいコードをいかにして書くかってことだと思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
-
- 記事: 154
- 登録日時: 2006年5月02日(火) 16:27
> まともに読める(しかし遅い)コードをコメントアウトして、それと等価で高速なコードを書いておくとかそういう方法ならたまに取ったりしますが。
その方法、僕もします。
>アセンブリ言語で書く場合は、割り算を掛け算に直して計算するとかしなければ
> 普通はとても読みやすいコードになるんですがね。
なるほど。
> でもアセンブリ言語の場合は、大抵、
> 効率性(資源を無駄使いしない事)と実行速度は高くても保守性や移植性が低かったりと
> 非個人で開発する場合には導入は難しいのですが。
う~む、高速化も難しいのですね。
> 一般的に一番大事なのは小手先の技術力ではなくて、他人にとって読みやすいコードをいかにして書くかってことだと思います。
わかりました。ありがとうございます。
その方法、僕もします。
>アセンブリ言語で書く場合は、割り算を掛け算に直して計算するとかしなければ
> 普通はとても読みやすいコードになるんですがね。
なるほど。
> でもアセンブリ言語の場合は、大抵、
> 効率性(資源を無駄使いしない事)と実行速度は高くても保守性や移植性が低かったりと
> 非個人で開発する場合には導入は難しいのですが。
う~む、高速化も難しいのですね。
> 一般的に一番大事なのは小手先の技術力ではなくて、他人にとって読みやすいコードをいかにして書くかってことだと思います。
わかりました。ありがとうございます。