1

特に新しい関数を書いているとき、単一のコードをプロファイルしたいが、完全なプロファイルの実行は実際には必要なく、おそらく遅すぎる場合があります。

私は VS 2008 を使用しており、C++ で AMD プロファイラーを使用して良好な結果を得ていますが、もう少し軽量なものを探しています。

単一の機能をプロファイリングするために使用するツールは何ですか? おそらく、DEBUG モードでないときに除外されるマクロです。私は自分で書くことができましたが、私が欠けているものが組み込まれているかどうか知りたかったのです。私は次のようなことを考えていました:

void FunctionToTest()
{
    PROFILE_ENTER("FunctionToTest")
    // Do some stuff
    PROFILE_EXIT()
}

これは、関数の実行にかかった時間をデバッグ出力ウィンドウに表示するだけです。

4

3 に答える 3

1

特定の関数から最大速度を得たい場合は、それを適切な長期実行ループにラップして、この手法を使用します。所要時間はあまり気にしません。それだけの結果です。私が本当に知る必要があるのは、時間を短縮するために何をしなければならないかということです. 違いを見ます?速度のバグを見つけて修正した後、外側のループを削除すると、飛行します。

また、最適化されたコードのみをチューニングするという正統性には従いません。これは、コードがすでに可能な限りタイトになっていることを前提としているためです。new実際、かなりのサイズのプログラムでは、通常、同じ引数でサブ関数を何度も呼び出したり、以前のコピーを再利用できる場合にオブジェクトを繰り返し呼び出したりするなど、愚かなことが行われます。コンパイラのオプティマイザはそのような問題のいくつかをクリーンアップできるかもしれませんが、取り残された問題が支配的であるため、すべてをクリーンアップする必要があります。できることは、コードを混乱させることによって、それらを見つけにくくすることです。ばかげたものをすべて取り出したら (はるかに高速にします)、オプティマイザーオンにします。

「まあ、自分のコードにばかげたことは決して入れないだろう」と思うかもしれません。右。また、バグを入れることもありません。誰も間違いを犯そうとはしませんが、仕事をしていれば誰でも間違いを犯します。

于 2013-07-24T11:48:47.357 に答える
0

clock()OS が提供する高解像度タイマーのいずれかまたは 1 つを使用して、時間を測定します (リンク内のコードもこれを行います)。<chrono>C++11 では、ヘッダーからタイマーを使用できます。

適切なタイミングを得るために、常にデバッグ ビルドではなくリリース ビルドで測定する必要があることに注意してください。

于 2013-07-24T07:44:26.953 に答える