0

コードのパフォーマンスを最大限の精度で測定する必要があります。

現在私が使用している:
- タイミングを測定するためのストップウォッチ
- 常に同じ CPU コアを使用するようにプロセス アフィニティを設定する
- スレッドの優先度を最大に設定する -
測定前にウォームアップを実行する
- テストを 1000 回実行して平均を計算する

ただし、ベンチマークの実行にはまだ違いがあります (最大約 1%)。この測定をより正確にする方法はありますか?

4

3 に答える 3

2

これは明らかかもしれませんが、CPU は単一のプロセス専用ではありません。また、OS やハードウェアに関するその他の多くのことも担当します。

また、メモリ使用量、HDD 使用量、および GC の動作は、実行ごとに異なる可能性があります。計算には、RAM アクセスよりもはるかに遅い仮想メモリが必要な場合があります。等々...

GC については、「GCSettings.LatencyMode」のさまざまな設定を試して、何かが変わるかどうかを確認できます ( http://blogs.microsoft.co.il/blogs/sasha/archive/2008/08/10/lowを参照)。 -latency-gc-in-net-3-5.aspxなど)。

同じコンピューター上の単一のセッションでは、ストップウォッチは非常に正確です。実行ごとに期間が異なる場合、それはおそらく測定の精度が低いためではなく、プロセス自体が常に同じ時間ではないためです...明らかに、テストの各「反復」には少なくとも数百ミリ秒かかる必要があります。ストップウォッチはナノ秒単位で期間を測定することはできません...

そして、1% の変動はまったく驚くべきことではありません。

于 2013-03-21T09:21:57.723 に答える
0

外付け部品など、性能が異なる理由はありますか?

1% の変動は、特に DB やサービスへの接続などの外部に依存している場合、パフォーマンスが 1000 回を超えることはありません。

ストップウォッチは時間を測定する最も正確な方法なので、私はそれについて心配しません

于 2013-03-21T08:55:16.557 に答える
0
  1. Run warm-up code for at least 10 seconds before starting my measurements. It's necessary to ensure CPU is running at the maximal speed.

  2. Measure the lowest run time, rather than average.

With these 2 improvements, I've achieved very stable measurement results.

于 2013-06-21T06:15:53.747 に答える