10

誰もがRationalPurifyを使用しているわけではないことを願っています。

それで、あなたが測定したいとき、あなたは何をしますか:

  • 関数にかかる時間
  • ピークメモリ使用量
  • コードカバレッジ

現時点では、手動で実行しています[タイムスタンプ付きのログステートメントと別のスクリプトを使用してログを解析し、Excelに出力します。ふぅ...)

あなたは何をお勧めします?ツールやテクニックを指さしていただければ幸いです。

編集:申し訳ありませんが、私は最初に環境を指定しませんでした、独自のモバイルプラットフォーム上のそのプレーンC

4

9 に答える 9

6

私はこれをたくさんしました。IDE または ICE を使用している場合は、手作業が必要ですが、確実に機能する手法があります。

警告: 現代のプログラマーはこれを嫌っています。彼らはツールが大好きです。しかし、それは本当に機能し、常に優れたツールを持っているとは限りません。

あなたの場合、コードはタイマーで実行され、高速でなければならない DSP やビデオのようなものだと思います。タイマー ティックごとに実行するのがサブルーチン A だとします。サブルーチン A を単純なループ (たとえば 1000 回) で実行するテスト コードを記述します。これは、少なくとも数秒間待機させるのに十分な長さです。

実行中に一時停止キーでランダムに停止し、コール スタック (プログラム カウンターだけでなく) をサンプリングして記録します。(それが手動部分です。)これを数回、たとえば 10 回行います。1 回では不十分です。

次に、スタック サンプル間の共通点を探します。少なくとも 2 つのサンプルに表示される命令または呼び出し命令を探します。これらは多数ありますが、そのうちのいくつかは最適化できるコードになります。

そうすることで、素晴らしいスピードアップが保証されます。1000回の反復では時間がかかりません。

多くのサンプルが必要ない理由は、小さなものを探していないからです。たとえば、10 サンプル中 5 サンプルで特定の呼び出し命令が見られる場合、それは合計実行時間の約 50% を占めています。本当に知りたい場合は、より多くのサンプルがパーセンテージをより正確に教えてくれます。あなたが私のようなら、あなたが知りたいのはそれがどこにあるかだけなので、それを修正して次のものに進むことができます.

最適化するものが見つからなくなるまでこれを行い、最高速度またはそれに近い速度になります。

于 2008-11-04T22:53:26.613 に答える
4

おそらく、パフォーマンス プロファイリングとコード カバレッジ用に別のツールが必要になるでしょう。

プロファイリングには、MacOSX の Shark を好みます。Appleから無料で、とても良いです。アプリがバニラ C の場合、Mac を手に入れることができれば、それを使用できるはずです。

Windows でのプロファイリングには、LTProf を使用できます。安いですが、素晴らしいとは言えません: http://successfulsoftware.net/2007/12/18/optimising-your-application/

(Microsoft は、安価なバージョンの Visual Studio にまともなプロファイラーを提供しないことで、本当に自分自身を撃っていると思います。)

カバレッジについては、Windows の Coverage Validator を好みます: http://successfulsoftware.net/2008/03/10/coverage-validator/ リアルタイムでカバレッジを更新します。

于 2008-09-11T14:50:10.797 に答える
3

複雑なアプリケーションの場合、私は Intel のVtuneの大ファンです。これは、コードを計測する従来のプロファイラーとは少し異なる考え方です。これは、プロセッサーをサンプリングして、命令ポインターがどこにあるかを 1 秒間に 1,000 回確認することによって機能します。バイナリを変更する必要がないという大きな利点があります。これにより、測定しようとしているタイミングが変更されることはほとんどありません。

残念ながら、Vtune には従来のコードのように命令ポインターをシンボルにマップする方法がないため、.net や Java には適していません。

また、命令ごとのクロック、キャッシュのヒット/ミス、TLB のヒット/ミスなど、あらゆる種類のプロセッサ/ハードウェア中心のメトリックを測定できるため、コードの特定のセクションの実行に実際よりも時間がかかる理由を特定できます。コードを調べるだけで期待できます。

于 2008-09-11T14:39:47.547 に答える
2

「オンザメタル」の組み込み「C」システムを実行している場合(投稿で「モバイル」が何を暗示しているのかよくわかりません)、通常、ある種のタイマーISRがあり、サンプリングがかなり簡単です割り込みが発生したコードアドレス(スタックを掘り返すか、リンクレジスタなどを調べることにより)。次に、粒度/関心範囲の組み合わせでアドレスのヒストグラムを作成するのは簡単です。

通常、コード/スクリプト/Excel シートの組み合わせを作成して、ヒストグラム カウントをリンカー シンボル/リスト ファイルのアドレスとマージし、プロファイル情報を提供することはそれほど難しくありません。

RAM が非常に限られている場合、これを簡単かつ便利にするために十分なデータを収集するのは少し面倒かもしれませんが、プラットフォームについて詳しく教えていただく必要があります。

于 2008-09-11T15:23:30.577 に答える
1

nProf-無料、.NET用にそれを行います。

少なくとも80/20を見るのに十分な、仕事を終わらせる。(コードの20%、時間の80%を占める)

于 2008-09-11T14:26:58.857 に答える
0

Windows(.NETおよびネイティブエグゼス):AQTimeはお金のための素晴らしいツールです。スタンドアロンまたはVisualStudioプラグインとして。

Java:私はJProfilerのファンです。繰り返しになりますが、スタンドアロンで実行することも、Eclipse(または他のさまざまなIDE)プラグインとして実行することもできます。

どちらにも試用版があると思います。

于 2008-09-11T14:28:31.770 に答える
0

MSVC 6 と XP でdevpartnerを使用しています

于 2008-09-16T19:15:52.910 に答える
0

この点で、 Google Perftoolsは非常に便利です。

于 2008-09-12T05:09:43.820 に答える
-1

プラットフォームがプロプライエタリ OS である場合、ツールはどのように機能しますか? 今できることを精一杯やっていると思います

于 2008-09-12T05:50:38.730 に答える