2017-02-25 7 views
0

時間をプロファイルする関数が1つあります。実際には、メイン機能でチェックされたときに、13222668マイクロ秒(13秒)の時間が表示されます。私は、最小限の例が以下に示され、機能の異なる部分をプロファイルし始め:C++プログラムのプロファイリング

#include <iostream> 
#include <sstream> 
#include <string> 
#include <chrono> 
using namespace std::chrono; 
unsigned int match_time; 
int func(){ 
    unsigned int i = 0; 
    while(i < 20){ 
    high_resolution_clock::time_point t1 = high_resolution_clock::now(); // if I start the time from here, it shows me just `827687` milliseconds (827 milliseconds). 
    //code.... 
    { 
     //code... 

     { 
      //code.... 
     } 
      //code.... 
    } 
     high_resolution_clock::time_point t2 = high_resolution_clock::now(); 
     auto duration = duration_cast<microseconds>(t2 - t1).count(); 
     match_time += duration; 
     i++; 
    } 
    return 0; 
    } 

Iは、whileループ内の時間を開始した場合、それだけ827687マイクロ秒(827ミリ秒)を示し、私はしばらくの上に起動した場合ループ

high_resolution_clock::time_point t1 = high_resolution_clock::now(); 
while(i < 20){ 
} 
high_resolution_clock::time_point t2 = high_resolution_clock::now(); 
auto duration = duration_cast<microseconds>(t2 - t1).count(); 
match_time += duration; 

は私が高い時に私が疑う13222668マイクロ秒(13秒)、得ました。私は別の文の実行のための時間を確認するとき

はまた、私は(私は印刷の問題だと思います)を印刷0時間とどのショー(827ミリ秒)の実行の何百万もの間に合計match_time += duration;を取得します。

時間プロファイリングの方法が正しいかどうか、whileループと外側ループの時間が変わる理由を知りたいと思います。他の理由により私のコードはしばらくぶら下がっていますか?

+0

[this](http://stackoverflow.com/q/42457605/841108)は、関連する質問です。 –

+0

@BasileStarynkevitchありがとうございます。しかし、なぜ時間が変化するのかを知る必要があります。whileループの外で時間を使うと、コードがしばらく保持されていることが明らかです。 –

+0

ベンチマークを数回繰り返します。実行時間は再現できません(多くのキャッシュのため) –

答えて

0

あなたのmatch_timeが初期化されていないことはありませんか?

関連する問題