2

コード内のいくつかの CPU 命令をカウントしたい。たとえば、私のコードが実行する加算、乗算、浮動小数点演算、分岐の数を知りたいです。私は現在 Linux で gprof を使用して C++ コードをプロファイリングしていますが、関数の呼び出し数しか表示されず、手動で命令数を見積もっています。私のためにトリックを行うツールはありますか? 多分いくつかの仮想マシン?

4

6 に答える 6

5

これは一般的なアドバイスであり、Linux 固有のものではありません。代わりに、CPU サイクルに関心を持つ必要があります。パフォーマンスの尺度としての命令数は忘れてください。1 つの命令は、他の 10 の命令と同じコストになる可能性があるため、何もわかりません。

CPU サイクルに注目し、マルチスレッド環境 (今日のすべてではないにしてもほとんど) では、スレッドがスリープ状態 (「スイッチ/アウト」) になる時間に注目する必要があります。これにより、I/ O、DB などを完了する必要があり、CPU の特権時間に影響を与えます。

于 2009-07-12T17:07:37.080 に答える
1

インテルの vtune は Linux ユーザーには無料です。私の知る限り (インテル ベースの x86 Linux マシンについて話していると仮定して)。それはあなたが必要とするすべての情報をあなたに提供します.

于 2009-07-12T17:03:21.817 に答える
1

PINツールであるpin-instatを使用できます。使用するには、PIN をインストールする必要があります。ただし、命令数だけではパフォーマンスについてはあまりわかりません。キャッシュミス、分岐予測も大きな役割を果たします。

免責事項: 私は pin-instat の作成者です。

于 2014-05-18T17:21:11.587 に答える
0

好奇心から、命令カウントはコードのパフォーマンスをプロファイリングするのに役立つ方法ですか?

「単純な」CPU 設計の時代には、各オペコードの実行に正確に数ナノ秒の CPU 時間がかかると合理的に推測できましたが、最近ではすべての複雑なメモリ キャッシング スキームがオンザ-フライ オペコードの並べ替え、パイプライン処理、スーパースカラー アーキテクチャ、および最新の CPU に投入されたその他すべての機能について、オペコードの実行を単純にカウントするだけで、コードの実行にかかる時間を適切に示すことができますか? または、実行時間は、(たとえば) メモリ アクセス パターンと、オペコードの実行の生の頻度と同じように、オペコードが実行されるシーケンスに基づいて変化しますか?

私の疑いでは、最近のコード パフォーマンスを確実に予測する唯一の方法は、ターゲット アーキテクチャ上で実際にコードを実行し、時間を計ることです。最新の CPU アーキテクチャの微妙な機能を利用します。

于 2009-07-12T16:44:48.170 に答える