2012-11-09 3 views
5

Cプログラムの実行中に実行される命令の数を簡単に数えられる方法がありますか?Cプログラムで実行された命令の数を素早くカウントする方法

私はx86_64 GNU/Linuxマシンでgcc version 4.7.1 (GCC)を使用します。あなたはアセンブラ命令を求めているため

+2

私はDonessの答えに同意します。一般的に、人々は機能ごとに実行時間をプロファイルしたいと考えています。しかし、実際に実行された各命令の正確な数を取得したい場合は、http://www.simplescalar.com/のような命令セットシミュレータでコードを実行する必要があります。 – TJD

+0

しようとしていることを詳しく説明できますか達成する? x86では、命令実行のパフォーマンスは、実際の命令よりもはるかにコンテキストに依存しています。たとえば、ほとんどの場合、すべての命令は任意にロードまたはストアになります。純粋にレジスタ間命令は、最新のCPU上のパイプライン状態に複雑に依存することになります。これは私にとって有用な情報のようには聞こえません。 –

+1

あなたはなぜ尋ねますか?通常、*プロファイリング*は別のことを意味します。たとえば、gcc -pg -Wall -O'でコンパイルし、 'gprof'またはおそらく' oprofile'を使用します!! –

答えて

3

はおそらくthis question

の重複は、私はおそらく言うが、その質問には、コードのCレベルのプロファイリングを処理します。

しかし私の質問は、あなたが実際に実行された機械命令をプロファイルする理由は何ですか?非常に最初の問題として、これはさまざまなコンパイラとその最適化設定によって異なります。より現実的な問題として、あなたは実際にその情報で何をすることができますか?あなたがボトルネックを検索/最適化する過程にある場合、コードプロファイラがあなたが探しているものです。

ここでも重要なことがあるかもしれませんが、

+0

CPU命令の数*実行*は、命令セットに依っても処理能力に依存せず、ひどいことや他のプログラムとのリソースの競合を起こさずにアルゴリズムを比較する簡単な方法です。 – mpen

+1

@mpen:必ずしもそうではありません。ラージ・ルックアップ・テーブルを使用するアルゴリズムが1つの場合と、より計算上のアプローチを使用して同じことを行うアルゴリズムの場合、最初の命令は多くのロード命令を持つ可能性があります。同様に、多くの高価な命令を使用する1つのアルゴリズムがあるとします。 '' FSQRT'などの高価な命令を避け、さらにいくつかの加算/乗算を使用する別のアルゴリズムを使用します。 –

1

ハードウェアパフォーマンスカウンタ(HPC)を使用して実行された命令の数を簡単に数えることができます。 HPCにアクセスするには、HPCへのインターフェイスが必要です。 PAPI パフォーマンスAPIを使用することをお勧めします。

関連する問題