10

影響が少なく、OS に依存しない C++ コード用のプロファイラーを探しています。

影響が少ないと言うときは、valgrind よりも邪魔にならないものを指しています。私はMIPSベースの組み込み環境で使用する予定であり(したがってos-independent)、移植されたバージョンのvalgrindを試してみましたが、パフォーマンス特性が完全に変更されました(ハイゼンベルグの原理が働きすぎているため)。メモリ バスの速度がボトルネックであることはわかっていますが、これが valgrind が非常に煩わしい理由を説明している可能性が最も高いです。

コードの特定の部分を測定できるチェックポイントに基づいて、自家製のタイプのプロファイラーを作成しました。基本的に、コードを変更 (および再コンパイル) して、コード内の戦略的な場所にチェックポイントを設定する必要があります。次に、実行されると、各チェックポイントにヒットした回数と、最後のチェックポイントにヒットしてからの時間が格納されます。次に、それを実行した後、チェックポイントをダンプし、それぞれについて、ヒット数、最大時間、最小時間、平均時間などを計算します。

このプロファイラー (私は LowImpactProfiler と呼んでいます) は問題なく動作しますが、他にもっと良いものがあるのではないかと思います。

サンプリングプロファイラーであるoProfileを検討しましたが、Linuxを実行していないため、実装は非常に難しいと思います。

4

2 に答える 2

7

私はShinyを使用して、非常に限られた組み込みデバイスのプロファイリングを行い、大きな成功を収めました。あなたの説明から、それはあなたの LowImpactProfiler と同様のアプローチを取ります。

于 2012-05-03T14:59:37.563 に答える
3

Windows を使用している場合は、http://ravenspoint.wordpress.com/2010/06/16/timing/で説明されている私のプロファイラーを試すことができます。

あなたのものより使いやすいかもしれませんが、OSに依存しません。Windows API である QueryPerformanceCounter() への呼び出しを使用します。これはオープン ソースであるため、使用可能な高性能タイマーを使用して、OS に移植する価値があるかもしれません。

于 2012-05-03T15:54:49.583 に答える