0

私はコア Java で画像処理アルゴリズムを開発しました (サードパーティの API を使用せずに)。今、そのアルゴリズムの実行時間を計算する必要があります

public class MyAlgo {

   public MyAlgo(String imagePath){
     long stTime = System.currentTimeMillis();
     // ..........................
     // My Algorithm
     // ..........................
     long endTime = System.currentTimeMillis();
     System.out.println("Time ==> " + (endTime - stTime));
   }

   public static void main(String args[]){
     new MyAlgo("d:\\myImage.bmp");
   }
}

しかし問題は、このプログラムを実行するたびに実行時間が異なることです。どうすればこれを行うことができるか教えてください。

4

3 に答える 3

2

外部プロファイリング ライブラリを使用したくない場合は、アルゴリズムを for() ループでラップして 1000 回実行し、合計時間を 1000 で割ります。アウト。

注: 全体の測定時間は、アルゴリズムのコード命令が必要とする合計時間ではなく、アルゴリズムの予想終了時間を反映します。たとえば、アルゴリズムが大量のメモリを使用し、平均して Java VM がアルゴリズムの実行ごとにガベージ コレクタを 2 回呼び出す場合、ガベージ コレクタの時間も考慮する必要があります。これはまさに for() ループが行うことなので、良い結果が得られます。

于 2013-07-11T06:48:19.917 に答える
2

1 回の実行だけでは信頼できる結果を得ることができません。Java (まあ、JVM) はランタイムの最適化を行います。さらに、CPU 時間/リソースへのアクセスを競合する他のプロセスがあります。また、入力が何であれ、アルゴリズムが一定時間で実行されますか?

可能な限り信頼性の高い計算を行うための最善の策は、パフォーマンス測定専用のライブラリを使用することです。それらの1つはキャリパーです。

異なる入力/出力などでベンチマークを設定して実行します。

于 2013-07-11T04:50:04.303 に答える
0

アルゴリズムの複数回の実行に統計分析を適用する必要があります。たとえば、1000回実行して、最小、最大、平均時間を分析します。

さまざまなシナリオで複数回実行すると、たとえば、さまざまなハードウェアやさまざまな解像度の画像で洞察が得られる場合があります。

あなたのアルゴリズムは複数のステップに分割できると思います。ステップを個別に監視して、各ステップの影響を理解できます。

たとえば、Marvin Image Processing Frameworkは、アルゴリズムの各ステップの時間と実行回数を監視および分析する方法を提供します。

于 2013-07-18T13:34:30.967 に答える