2

アプリケーションの特定の実行で LLVM ビットコードの各命令が実行された回数を簡単かつ迅速に収集する方法が必要です。私が知る限り、私が取ることができるアプローチはいくつかあります。

  • PINを使用します。これには、DWARF デバッグ情報と命令デバッグ情報を使用して、バイナリ内の命令をビットコード内の命令にマップする必要があります。これがどれほど正確かは100%わかりません。

  • llvm-prof を使用します。ここで2つ質問です。まず、スタック オーバーフローoptで呼び出されるオプションを見てきました--insert-edge-profiling。しかし、そのオプションは 3.6 では利用できないようですか? 第 2 に、このようなプロファイリングでは、個々の命令レベルではなく、関数レベルでのみ実行回数が記録されるようです。あれは正しいですか?

  • AddressSanitizerに似た新しいツールを作成します。これはうまくいくかもしれませんが、やり過ぎのようです。

私が見逃している私の目標を達成するためのより簡単な方法はありますか?

4

1 に答える 1

1

博士課程の研究の一環として、プログラムによって実行される基本ブロックのトレースを収集するツールを作成しました。このツールは、各基本ブロックの LLVM 命令の数も記録するため、トレースを分析すると、動的な命令実行数が得られます。

もう 1 つの調査ツールはHarmonyです。これは、プログラム内の各基本ブロックの動的実行カウ​​ントを提供します。これは、静的命令カウントで拡張できます。

それ以外の場合は、独自のツールを作成することをお勧めします。基本ブロックごとに、そのブロック内の命令の数だけグローバル カウンターを (アトミックに) インクリメントします。

于 2015-05-28T15:02:35.003 に答える