ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年9月20日(水) 02:11

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
 記事の件名: 実行速度をあげる
投稿記事Posted: 2008年1月05日(土) 17:58 
オフライン

登録日時: 2006年5月02日(火) 16:27
記事: 154
あけましておめでとうございます!
今年も一年よろしくお願いします。

ところで、皆さんは実行速度を上げるにはどうしていますか?
僕は
「A=A+1」を「A++」にしてみたり、
「A=A*2」,「A=A/2」みたいな2の倍数の掛け算割り算を「A=A<<1」「A=A>>1」にしたり、
極力Stringを使わないようにしています。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年1月05日(土) 23:32 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
住所: 埼玉県東松山市
速度を上げるべきところを関数化して、そこをアセンブリ言語で記述したDLLで置き換えるとか。
アセンブリ言語を使えば、足し算を行うのと同じ時間で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を主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年1月07日(月) 09:52 
オフライン

登録日時: 2006年5月02日(火) 16:27
記事: 154
> と、ここまで書いたのは本当に実行速度が求められるときに関して必要なことであって、
> 実行速度がそれほど重視されない場合は書きやすさ・読みやすさを優先するべきだとは思います。
やっぱりそうですよね。
汚いコードだとやる気さえなくなってしまいますよね。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年1月07日(月) 19:35 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
住所: 埼玉県東松山市
まともに読める(しかし遅い)コードをコメントアウトして、それと等価で高速なコードを書いておくとかそういう方法ならたまに取ったりしますが。


アセンブリ言語で書く場合は、割り算を掛け算に直して計算するとかしなければ
普通はとても読みやすいコードになるんですがね。

でもアセンブリ言語の場合は、大抵、
効率性(資源を無駄使いしない事)と実行速度は高くても保守性や移植性が低かったりと
非個人で開発する場合には導入は難しいのですが。


一般的に一番大事なのは小手先の技術力ではなくて、他人にとって読みやすいコードをいかにして書くかってことだと思います。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年1月13日(日) 18:58 
オフライン

登録日時: 2006年5月02日(火) 16:27
記事: 154
> まともに読める(しかし遅い)コードをコメントアウトして、それと等価で高速なコードを書いておくとかそういう方法ならたまに取ったりしますが。
その方法、僕もします。

>アセンブリ言語で書く場合は、割り算を掛け算に直して計算するとかしなければ
> 普通はとても読みやすいコードになるんですがね。
なるほど。

> でもアセンブリ言語の場合は、大抵、
> 効率性(資源を無駄使いしない事)と実行速度は高くても保守性や移植性が低かったりと
> 非個人で開発する場合には導入は難しいのですが。
う~む、高速化も難しいのですね。

> 一般的に一番大事なのは小手先の技術力ではなくて、他人にとって読みやすいコードをいかにして書くかってことだと思います。
わかりました。ありがとうございます。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke