2011-02-01 11 views
2

私はゲームをコーディングしており、レンダリングコードで速度計算を行うことは非常に重要です。操作速度

いくつかの操作の速度をどのようにすることができますか?

たとえば、乗算が高速か、sqrtかなどを知る方法はありますか?あるいは、テストをして時間を計算する必要があります。

プログラミング言語はC++です。ありがとう。

+0

プロセッサリファレンスを見つけて、レイテンシ/スループットを調べます。例:http://download.intel.com/design/processor/manuals/248966.pdf – Anycorn

+5

プロファイル、比較してください。 –

+1

マイクロ命令の最適化を見ているよりも、ますます大きくなる10億ものことがあります。コンパイラは既にこれをある程度まで行います(そしてこれまで以上に優れています)。コードのプロファイルでボトルネックを見つけます。次に、ボトルネックのアルゴリズムを改善します(コンパイラはアルゴリズムにあまり良くありません)。 –

答えて

5

このようなマイクロ最適化は、最小限の利益のために時間を無駄にすることに過ぎません。

プロファイラを使用して、独自のアルゴリズムとコードを使用して、プロファイラがゲームのほとんどの時間を費やしていることを知らせます。

より効率的な設計を実装するためには、ソフトウェア全体またはその大部分をオーバーホールする必要がある場合があることに注意してください。その場合、プロファイラの結果は経験の浅い人に誤解を招く可能性があります。例えば。複雑な計算を最適化すると、その結果を1回キャッシュするのと比較して、最小限の利益を得ることができます。

this somewhat related threadも参照してください。

0

ベスト・ベットは、AQTimeのようなツールを使用してプロファイリングを実行することです。それから、あなたの時間をどこで最適化するかを知ります。しかし、それを途中でやったり、推測作業に基づいたりすることは、あなたに多くの手間をかけることなく、コードを複雑にしたり、何かを壊したりするだけです。最良のことは、浮動小数点計算、特にsin、cosなどを取ることです。可能であれば、任意のループからsqrtを取り除くことです。 NC * NC平方根を計算

for i = 0 to nc 
    for j = 0 to nc 
     aij = sqrt(a[i]*b[j]) 

は、私はかつてこのような何かを持っていました。しかし、sqrt(a * b)はsqrt(a)* sqrt(b)に等しいので、すべてのaとbの平方根をあらかじめ計算しておくことができます。したがって、nc * nc平方根の代わりに、2 * nc平方根があります。

for i = 0 to nc 
    for j = 0 to nc 
     aij = asqrt[i]*bsqrt[j] 
0

あなたが質問している質問は、ハードウェアレベルで開発しているプラ​​ットフォームに大きく依存しています。異なるチップセット(Intel/AMD)間にばらつきがあるだけでなく、プラットフォームにもばらつきがあります(私は、iPhoneが特定のことをもっと速く行うための多くの指示を持っていないと考えています)。

「レンダリングコード」についてご説明していることをご質問ください。 CPUの代わりにGPU(シェーダーコード)上で実際に実行されるコードについて言えば、ルールは大規模に変化します。

@thkalaが述べているように、私はあなたが始める前にこれについて心配しないでしょう。私は、コードをプロファイリングするときに遅いビットを書き直すだけで、簡単ではありませんが、最初に動作するようにコードを記述する方が速いことがわかりました。より良いアルゴリズムは、通常、特定の機能のみを使用しようとするよりも優れたパフォーマンスを提供します。

私たちがiPhone用に開発しているゲームでは、大きな数値演算(sqrt)が遅い(基本的な数学ではない)こと、実行するループすべてのフレームがすぐにCPUを使い果たす可能性があります。そのことを念頭に置いて、私たちはどんなコードでもほとんど最適化する必要はありませんでした.60fpsで実行されるので、最初は心配していなかったのでうれしいです。

1

特定の操作の速度を決定することは、プロファイリングと呼ばれることがよくあります。操作をプロファイリングするための最良のソリューションは、プロファイラを使用することです。 Visual Studioには優れたプロファイラがあります。 Linuxはgprofです。コンパイラにプロファイラがない場合は、コードをプロファイリングすることが多いコンパイラを購入する価値があります。

あなたがプロのプロファイラを使用せずにすることによって取得する必要があります場合は、通常、いくつかのプロファイラのコードの

check this outあなたのプログラムにあなた自身を埋め込むことによって得ることができます。

関連する問題