2009-03-09 6 views
0

実行時を測定する必要のあるCPUバインドテストを実行する必要があることがあります。テストは1分単位で続きます。問題は、実行から実行までのランタイムがかなり異なる(+/- 5%)ということです。私たちは、例えば、変動がシステム上の他のアプリケーション/サービスから活性によって引き起こされると思われる。彼らのアイドル時間(のIntelliSenseを更新するなどのVisual Studio)で Windowsで反復可能なCPUバウンド・ベンチマーク・ランタイムを取得するにはどうすればよいですか?

  • ファイルシステムのインデクサー
  • など家事をやって

    • アプリケーション。

    ベンチマークのタイミングをより安定させるためのヒントはありますか?

    は現在、我々は、他のすべてのアプリケーションを最小化する「上ノーマル」優先度でテストを実行し、それがテストを実行中のマシンに手を触れません。

  • 答えて

    1

    通常のアプローチは、繰り返しの多くを実行し、外れ値を破棄することです。したがって、ディスクインデクサーのような気を散らすことが1時間に1回しか起こらず、24時間繰り返して5分間実行すれば、何も得られなかった多くの結果が得られます。確率密度関数をプロットして、何が起こっているのかを確実に理解することをお勧めします。また、プロセッサのキャッシュにすべてを渡すなどの起動効果に興味がない場合は、実験を実行してそれらを重要視しないようにしてください。

    +0

    複数の実行を実行する際の問題は、編集 - ビルド実行サイクルが大幅に増加することです。これにより、コードの最適化に取り組んでいるときに私たちの速度が大幅に低下します。 – pauldoo

    1

    まず第一に、それはアプリケーション自体のベンチマークについてだけだ場合、あなたは対策として、時間を壁時計、CPU時間を使用する必要がありません。それは、(ほとんど)他のプロセスやシステムの影響から解放されます。第二に、Dickon Reed pointed outとして、より多くの反復は信頼を増加させる。

    +0

    WindowsでCPU時間(壁時計時間ではない)を測定するにはどうすればよいですか? – pauldoo

    +0

    タスクマネージャ、またはpslist、またはGet-Process | Powershellで[名前]、[PrivilegedProcessorTime]、[UserProcessorTime]を選択します。 – Joey

    +0

    そしてプログラム的にはどうですか? Win32 APIの対応する関数は何ですか? – pauldoo

    0

    I次の操作を行います。

    1. 呼び出し方法のx回と時間
      • を測定し、このn回行い、それらの測定値の平均値と標準偏差を計算

    xを、測定ごとに1秒以上になるようにしてください。これにより、ノイズが少し低減されます。

    平均は、あなたのテストの平均パフォーマンスと標準偏差テスト/計測の安定性を教えてくれます。

    は、私も非常に高い優先度で自分のアプリケーションを設定し、私はシングルスレッドのアルゴリズムをテストするとき、私はオーバーヘッドがスケジュールされていないことを確認するために1つのCPUコアに関連付けます。

    このコードは、この中に操作を行う方法を示しています。NET:VC++チームのブログから

    Thread.CurrentThread.Priority = ThreadPriority.Highest; 
    Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; 
    if (Environment.ProcessorCount > 1) 
    { 
        Process.GetCurrentProcess().ProcessorAffinity = 
         new IntPtr(1 << (Environment.ProcessorCount - 1)); 
    } 
    
    1

    引用、彼らがどのようにperformance tests

    1. 停止など多くのサービスをして:

      はベンチマークマシン上のノイズを低減するために、我々はいくつかのステップを取ります可能な限りプロセス。

    2. ネットワークドライバを無効にする:ブロードキャストパケットによって引き起こされるNICからの割り込みをオフにします。
    3. テストのプロセッサアフィニティを1つのプロセッサ/コアでのみ実行するように設定します。
    4. 実行を高優先度に設定すると、コンテキストスイッチの数が減少します。
    5. いくつかの反復テストを実行します。
    関連する問題