ページ 11

効率化・処理速度について

Posted: 2007年9月26日(水) 20:27
by 夏天
自分が今つくってるプログラムは
動作が重くカクカクしています。

プログラムの効率化などを図って
処理速度を早くしようとしています。

そこでどのようなプログラムが効率的なのか
教えてください。

Re:効率化・処理速度について

Posted: 2007年9月26日(水) 20:55
by box
> 動作が重くカクカクしています。

差し支えなければ、どういった種類のプログラムですか?

> そこでどのようなプログラムが効率的なのか
> 教えてください。

「効率が高い」の定義は2つあるとおもいます。
一つは、書かれているように処理速度を上げること、
もう一つは、メモリの使用量を減らすことです。

いずれにしても、データ構造とアルゴリズムに関する
いくらかの知識が必要です。

Re:効率化・処理速度について

Posted: 2007年9月26日(水) 22:54
by たかぎ
処理系も実際のコードも不明なので、あくまでも一般論として...

プロファイラを用いてボトルネックになっている部分を見つけ出し、その部分を最適化します。
最適化にあたっては、

1. アルゴリズムの改善
2. データ構造の改善
3. 不要な処理の削減
4. 静的に処理できるものは静的に行う
5. コンパイル結果を調べながら、より高速なコードが生成されるように修正

などを行うことになります。

Re:効率化・処理速度について

Posted: 2007年9月28日(金) 13:52
by 夏天
データ構造とルゴリズム・・・面妖な・・・
頑張ってみます

ありがとうございました。

Re:効率化・処理速度について

Posted: 2007年9月28日(金) 14:17
by たかぎ
> 頑張ってみます

それでいいんですか?
コードの最適化はかなり難しい部類に入ります。
もっと具体的な情報を出していただければ、即効性のある回答が得られるのではないでしょうか?

Re:効率化・処理速度について

Posted: 2007年9月28日(金) 17:06
by 管理人
もう少しご質問を具体的にしていただければ皆様ももっと具体的に回答してくださると思いますが、もう解決されたのでしょうか?

以前何度かDXライブラリのご質問をなさっていることと、動作がカクカクするという内容を受けて、DXライブラリでのプログラムだという可能性も考えて回答します。

2をかけたり、4をかけたりする掛け算はビットシフトの方が早いなど、一般的に色々早くする方法はあると思いますが、DXライブラリに限っては、重くなる関数を避けるという方法があります。

例えばフォントを変更する関数などは、毎回処理ごとによんでいたのでは、FPSが下がります。
この辺にそれが書いてあります。
http://dixq.net/g/#55

また、描画先に指定されている画面をキャプチャするGetDrawScreenGraph関数も処理に時間がかかるので、
毎回使用するわけにいきません。
http://homepage2.nifty.com/natupaji/DxL ... html#R3N12

処理に時間がかかる関数はリファレンスページに注意書きとして書かれているものもありますが、書かれていないものもあります。
また、一つの小規模な処理では重くならないものも、大きな範囲で使用すると知らないうちに処理が重くなってしまうものもあります。
例えばαブレンドがいい例だと思います。
私はいつも自分のPCでしか実行した事が無いので、気づかなかったのですが、例えばSPボムマンを作ったとき、
http://www.youtube.com/watch?v=CUkQ4RBE ... hin%2Ehtml
最初、暗い画面から段々明るくなって行くシーンを作ったとき、これは1024x768の範囲すべてにαブレンドしているんですが、
こうすると少し古いPCで実行するとここだけすごく重くなりFPSがガクッと下がりました。
なので次からは画面全てにαブレンドするようなエフェクトはさけ、違うエフェクトで代用するようにしました。

また、DrawGraph関数などで書いた画像は、「画面外」でも全て計算されているのだと思います。
つまり見えない部分に間違っていくつも表示させるようなプログラムを書いてしまうと、
目には見えないのに重くなるという事が発生します。
RPGのスクロールがいい例で、現在いる場所のみ書くようなプログラムではなく、画面に表示されない場所まで全て表示するようなプログラムを書くと非常にFPSが遅くなります。

どのような事をお答えすればいいか分からなかったので、こんな事しか言えませんが、参考にしていただければ幸いです。

Re:効率化・処理速度について

Posted: 2007年9月28日(金) 17:25
by 管理人
後、言語による処理の早さもあるのではないでしょうか。
具体的にどれ位違うのかはわかりませんが、自分の頭の中では勝手に
速い←                                   →遅い
C言語 C++ Delphi  C# VB  JAVA   Perl  PHP  Script系
 
こんな感じを想像しています。(順番は勝手な想像です)
JAVAで書かれたコードをわざわざ処理速度を上げる為にCに書き換えたという話をどこかで聞きました。

Re:効率化・処理速度について

Posted: 2007年9月28日(金) 18:17
by 夏天
皆さんは処理速度を上げるためにどのような工夫をしてるんですか~?
みたいなノリだったのですよ・・・^^;

自分のプログラムはフォントデータを作っては消してを繰り返していた模様で
そこを消したら早くなりましたww

Re:効率化・処理速度について

Posted: 2007年9月28日(金) 20:23
by tk-xleader
コンパイラの最適化を掛けてみるというのも一つの手ではないでしょうか。