6

私は自分のコードをプロファイリングしていますが、すでにその中で最も高価な部分を見つけました。ただし、インライン関数で発生します。影響を測定するために、関数をインライン化しないように強制しました。

次に、正確なプロファイリングデータを報告したいと思います。インラインがないと、大きなオーバーヘッドが発生します(関数は基本的に単一のループですが、非常に頻繁に呼び出されます)。

関数を強制的にインライン化せずに、コードの特定のセクションをそれ自体が関数(makros CALLGRIND_START_INSTRUMENTATION、CALLGRIND_STOP_INSTRUMENTATIONなど)として処理するようにvalgrindに指示できるかどうか疑問に思います。

4

3 に答える 3

5
valgrind --tool=callgrind

CPU(およびキャッシュなどの他のコスト)が費やされた場所に関する多くの詳細を表示できます。kcachegrind(視覚化ツール)は、さまざまなコスト(インライン機能を含む)を簡単に表示できます。

たとえば:で実行してみてください

valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes 

注:命令レベルでコストを確認するには、kcachegrindを使用する必要があります

于 2012-12-04T19:58:17.737 に答える
0

関数を呼び出す直前と関数の開始時に、関数の終了と関数の呼び出しの直後にCALLGRIND_TOGGLE_COLLECTマクロを呼び出すことができます。例えば

int main()
{
    CALLGRIND_TOGGLE_COLLECT;
    myFunction();
    CALLGRIND_TOGGLE_COLLECT;
}

__attribute__((noinline))
void myFunction()
{
    CALLGRIND_TOGGLE_COLLECT;
    //Do stuff
    CALLGRIND_TOGGLE_COLLECT;
}

トリックを行う必要があります。

于 2012-12-04T14:06:21.083 に答える
-1

これがあなたが望むものであるかどうかはわかりませんが、そうではないかどうかはわかりません:):http:
//valgrind.org/docs/manual/cg-manual.html#cg-manual.overview

また、実行される命令ごとに1つの命令キャッシュ読み取りが実行されるため、行ごとに実行される命令の数を確認できます。これは、従来のプロファイリングに役立ちます。

于 2012-10-23T13:26:53.383 に答える