4

私はこれに歯を食いしばっています...

ARM ボードでプロファイリングを行い、コール グラフを表示する必要があります。OProfile、Kernel perf、Google パフォーマンス ツールを試してみました。すべて正常に動作しますが、コールグラフ情報は出力されません。

これにより、コードを正しくコンパイルしていないという結論に達しました。

C++ コードをコンパイルするときは、次のフラグを使用します。

アーチ固有:

-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3

全般的:

-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra

デバッグ (最適化あり):

-O2 -g -fno-omit-frame-pointer

私は多くの Google 検索を行い、いくつかの関連トピックを見つけました。

  • libunwind ?
  • 小人
  • (非同期) アンワインド テーブル
  • -mapcs-frame

しかし、これらがどのように接続されているかは完全にはわかりません。コール グラフを機能させる方法に関するヒントはありますか?

注(Rianの回答による):ARMでx86-64よりも一部のメソッドが(他のメソッドに比べて)時間がかかるかどうか、およびその理由を調べることに興味があります。別のプラットフォームでこれを行うことは役に立ちません (私のコードは両方でコンパイルされ、x86-64 でコールグラフを実行できますが)。

4

1 に答える 1

2

ARM cortex-A8でプロファイリングを実行したいのはわかっていますが、コールグラフに興味がある場合は、x86用にコンパイルしてvalgrindのcallgrindツールを実行し、kcachegrindで結果を調べてみませんか?

コールグラフは、2つのアーキテクチャ間で同じである必要があります。関数のコンパイルが少し異なっていても、関数間の関係は変わらないはずです。

特別なフラグは必要ありません:

valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &
于 2011-11-30T17:32:49.337 に答える