私のコードでいくつかのCPU命令を数えたいと思います。例えばどのように多くの加算、いくつの乗算、どのように多くの浮動小数点演算、私のコードが実行する分岐の数を知っていると思います。私は現在、Linuxでgprofを使用してC++コードのプロファイリングを行っていますが、関数への呼び出し回数を指定するだけで、手動で命令数を見積もります。私のためのトリックを行う可能性のあるツールはありますか?多分いくつかの仮想マシン?プロファイリングの指示
答えて
あなただけの好奇心のうち、この
実際に命令を数える必要があるのであれば、おそらくアセンブラを生成し、その出力をインテリジェントなgrep同等物に渡すのが最良です。 gcc
の場合は、-S
スイッチを試してください。
を達成するために--dump-instr=yes
フラグとValgrindのCallgrindを使用することができるかもしれ、コードのパフォーマンスをプロファイリングする便利な方法を指示がカウントされますか?
「シンプルな」CPU設計の時代には、各オペコードがCPUの実行にかかるCPU時間がちょうど多すぎると思うかもしれませんが、最近はすべての複雑なメモリキャッシュ方式で、パイプライン処理、スーパースカラ・アーキテクチャ、および現代のCPUに投げ込まれたすべてのものは、オペコード実行の単純なカウントによって、実行するコードの長さがわかります。あるいは、実行時間は、メモリアクセスパターンやopcodeの実行の生の頻度と同じようにopcodeが実行されるかどうかに基づいて多少異なるでしょうか?
最近、コードのパフォーマンスを確実に予測する唯一の方法は、実際にターゲットアーキテクチャでコードを実行して時間を掛けることです。つまり、コンパイラが非効率的なコードを発行したように見える場合は、現代のCPUアーキテクチャーの微妙な機能を利用して、賢明なことをしてください。
確かに、今までより多くの変数があり、正確な予測は難しいです。命令数よりも重要な要素が多くあります。それにもかかわらず、ある種の関係は真実であり、コスト(追加)<=コスト(掛け算)<=コスト(分割)<=コスト(平方根)のような予測可能な将来には真実のままです。乗数を乗じて除算を置き換えると、パフォーマンスが低下する可能性は低く、助けになる可能性があります。 –
あなたは正しいパフォーマンスを発揮します。しかし、私の目標はパフォーマンスのためにコードを最適化するのではなく、他のタイプの分析(命令の種類と頻度)を行うことです。 –
これは一般的なアドバイスであり、Linux特有のものではありません。代わりにCPUサイクルに関心があります。パフォーマンスの指標としての命令数を忘れてしまいます。 1つの手順で他の10と同じコストがかかる場合がありますので、何も教えてくれません。
CPUサイクルとマルチスレッド環境(今日ではないにしても大部分ではないにしてもほとんど)にスレッドをスリープ状態にしておくことに焦点を当てる必要があります。 I/O、DBなどが完了するのを待っており、CPU特権時間に影響を与えます。
+1そしてメモリアクセス(キャッシュヒット/ミス)は実際のパフォーマンスを決定する際に大きな役割を果たすことができますオペレーションはそれについて何も言わないでしょう。 – sharptooth
pin-instatはPINツールです。それを使用するには、PINをインストールする必要があります。しかし、命令数だけではパフォーマンスについてはあまり言いません。キャッシュミス、分岐予測も大きな役割を果たします。
免責事項:私はpin-instatの著者です。
- 1. Mavenのプロファイリング
- 2. dllプラグインのプロファイリング
- 3. Chromeアプリケーションのプロファイリング
- 4. Pythonマルチプロセッシングプールのプロファイリング
- 5. Dコンパイラのプロファイリング
- 6. ブタのプロファイリング
- 7. ディスクアクセスのプロファイリング
- 8. スタンフォードパーサーのプロファイリング
- 9. プロファイリングのGrailsメニュー
- 10. NetBeansでのプロファイリング
- 11. JNIアプリケーションのプロファイリング
- 12. C++プログラムのプロファイリング
- 13. スタックでのプロファイリング
- 14. firefoxプラグインのプロファイリング
- 15. ビルドのプロファイリング
- 16. Drupalサイトのプロファイリング
- 17. JNIライブラリのプロファイリング
- 18. Djangoプロファイリング
- 19. HashMapプロファイリング
- 20. MacでのC++プロファイリング
- 21. Ruby Minitestテストのプロファイリング
- 22. CコードのプロファイリングR
- 23. Silverlightの軽量プロファイリング?
- 24. ウェブワーカーのデバッグとプロファイリング
- 25. ライブDjangoサーバのプロファイリング?
- 26. valgrind自体のプロファイリング
- 27. C + Python(SWIG)のプロファイリング
- 28. C++マルチスレッド・アプリケーションのプロファイリング
- 29. ActionScript-3コードのプロファイリング
- 30. Visual StudioのプロファイリングAPI
命令を直接カウントするのではなく、非常に便利な方法でアセンブリをブラウズするのに役立ちます。ありがとう。 –