2010年4月4日日曜日

プログラムの最適化まとめ2

前に似たような物を書いた覚えがありますが…

だいたいのハードウェアに当てはまる事。



  • アルゴリズムの見直し 基本ですね。

  • 関数呼び出しを減らす。 これも基本。小さくて呼び出し回数の多い関数はinline関数にするかマクロにしちゃいましょう。

  • 条件分岐を減らす 最近のプロセッサは大抵パイプライン処理をしているので、条件分岐なんかでそれが途切れるとその分だけ遅くなります。

  • メモリアクセスを最適化する。 単に減らすのではなく、キャッシュを考慮に入れます。少しくらい参照量が増えても一箇所に情報が固まっていればキャッシュのヒット率が上がりますしね。

  • ハードウェアによる演算支援を活用する。 PCならCUDAやDirect3Dです。PSPならGuやVFPUを使えって事ですね。適材適所



  • 実際に動かして、遅いルーチンをしっかり把握する。 プロファイラーが使える場合は活用しましょう。思わぬ場所が遅かったりします。



  • 処理のボトルネックを探し、可能な限り隠蔽する。 時間がかかる処理は別の処理と平行して行うのが吉です。

  • マルチスレッド化する。 時代はマルチコアですね。シングルコアの限界を超えましょう。


PSP



  • inline関数を使いすぎない。 あまり多用するとコード長が伸びてキャッシュから溢れます。結果として関数を使った場合より遅くなることがあります。

  • double型を使わない。x86系列のPCはdoubleの方が速いこともしばしばありますが、PSPでは遅くなるだけなので必ずfloatにしましょう。

  • fastmathを使う。 math.hに含まれている算術関数はかなり遅いです。

  • VFPUの活用。 使うことでスレッドの切り替えコストは上がってしまいますが、演算支援だけでなく128個のレジスタをメモリ代わりに使う事もできます。それから行列演算は必ずVFPUで行うべきです。

  • スレッドを作り過ぎない。 スレッドの切り替えコストがそれなりに大きいです。

  • VRAMのデータはなるべくGEに任せる。 CPUからVRAMへのアクセスはかなり遅いです。ロード時程度にしておきましょう。

  • GEのテクスチャキャッシュに留意する。 8KBのテクスチャキャッシュをうまく使うことができれば、大きな画像の描画がかなり高速になります。



以下広告
お手軽価格で使いがい、あります。
月額250円~で、容量5GB、独自ドメイン、CGI使用、商用利用可能!
FC2レンタルサーバーLite

1 件のコメント:

  1. そう言えば、動的ライブラリの作り方の記事はとても勉強になったよん、と報告。PSPでカキコ中。

    返信削除