25

kcachegrind の結果に関心を持たせる方法を教えてください。

コードの 2 つのバージョン (v1、v2) を両方ともデバッグ モードでコンパイルしました。オプションを指定して valgrind を実行しました。

valgrind --tool=callgrind -v ....

このようにして生成された出力ファイルは、kcachegrind で開かれます。現在、コードのバージョン v2 が最初のバージョンである v1 よりも高速に実行されることが既にわかっています。しかし、どうすれば kcachegrind のコール グラフから結果を取得できますか。

kcachegrindAll Callersタブには、次の列がありますIncl. , Distance, Called, Caller

IIUC でCalledありcaller、「発信者」がプログラムで呼び出された回数です。しかし、私は他の人について知りません。

もう 1 つのことは、特定の機能を選択してから「呼び出し元」タブを選択すると、さらに情報が表示されることです。Ir, Ir per call, count, caller および [タイプ] タブ: `EventType, Incl. セルフ、ショート、フォーミュラ。

私はここで何の考えも持っていません。

これまでのところ、私はこれらの質問を読みました:

KCachegrind の解釈の混乱 プロファイリング結果についての混乱

4

1 に答える 1

28

私は QCacheGrind を使用しているので、画面上の何かがあなたが見ているものとまったく同じでない場合は申し訳ありません. 私が理解していることから、QCacheGrind は KCacheGrind の直接の Qt ポートです。さらに、Instruction Count と % of total instruction を切り替えることができます。一貫性を保つために、この方法で切り替えることができるすべての列の [Instruction Count] ビューを参照します。

[すべての発信者] タブの列には、次の内容が表示されます。

  • Incl.: この関数が全体として生成した命令の数を呼び出し元ごとに分類したもの。呼び出し元は階層であるため (したがって、距離列)、呼び出しスタックが深い場合、同じ値を持つものがいくつかある可能性があります。

  • 距離: フラット プロファイル パネルで選択された関数から選択された行が分離された関数呼び出しの数。

  • 呼び出された: 最終的に選択した関数の実行につながった関数を呼び出し元が呼び出した回数)。

  • 呼び出し元: 選択した関数の別の呼び出し元を直接呼び出した、または呼び出した関数 (距離によって決定)。

[発信者] タブはより簡単です。選択した関数からの距離が 1 の関数が表示されます。つまり、これらは選択した関数を直接呼び出す関数です。

  • Ir: この呼び出し元によって呼び出された後、選択された関数によって実行された合計命令数。

  • Ir per call: 呼び出しごとに実行された命令の数。

  • カウント: 選択した関数が呼び出し元によって呼び出された回数。

  • Caller: 選択した関数を直接呼び出した関数。

イベントについては、ハンドブックのこのページを参照してください。独自のタイプを定義していない場合、表示されるのは「Instruction Fetch」とおそらく「Cycle Estimation」だけだと思います。これらの列の簡単な内訳は次のとおりです。

  • Incl.: この関数によって実行される命令の合計と、その下で呼び出されるすべての関数。

  • Self: この関数によって排他的に実行される命令。このカウンターは、この関数によって呼び出される関数によって使用される命令ではなく、この関数によって使用される命令のみを追跡します。

  • Short and Formula: これらの列は、カスタム イベント タイプを定義するときに使用されます。独自のタイプを定義しない限り、空白または非常に短い (CEst = Ir のように) 必要があります。

于 2018-06-10T07:01:14.067 に答える