
for文内に、例えば100個の関数があったとします。
その中の、ある1つの関数(仮にこの関数をhoge()とする)の実行時間計測を以下の2つの方法で行います。
- for文内のhoge()以外の関数を無くした状態で、hoge()のみを時間計測
- for文内の全ての関数が有る状態で、hoge()のみを時間計測
1と2の計測結果を比較すると、2の方が1よりも計測時間が長くなります。
ということは、for文内の関数が少ない方がhoge()のみを時間計測しているにも関わらず、hoge()の実行時間が短くなっているということになります。
疑問に思っているのは、なぜこの2つで差が出るかです。
考えられる理由としては、LinuxにおけるTickというものが関係しているのかな、と思っています。
自分が使用しているLinuxのCONFIG_HZは1000でしたので、1[msec]の精度でしか時間計測ができないのだと解釈しています。
なので、時間計測をしても、1[msec]進むごとにCPUが時間をカウントしているので結局それよりも細かな精度では時間計測をする事ができないのだと解釈しています。
ですが、それだけだと1と2でなぜ差ができてしまうのかを理解できません。2の場合、hoge()以外の関数がfor文内に有る事で、hoge()の実行が待たされていて、その待たされた分だけ実行時間が伸びたりしているのでしょうか?
以上、よろしくお願い致します。
main() // 1の時の例
{
uint64_t nsec, sec;
struct timespec start, end;
int ERROR=0;
int ii;
for(ii=0; ii<1000000; ii++){
clock_gettime(CLOCK_MONOTONIC, &start);
hoge();
ERROR = clock_gettime(CLOCK_MONOTONIC, &end);
if(ERROR==0){
if((end.tv_nsec - start.tv_nsec) < 0){
end.tv_nsec += 1000000000;
end.tv_sec -= 1;
}
nsec = (end.tv_nsec - start.tv_nsec)/1000; // microsec
sec = (end.tv_sec - start.tv_sec)*1000000; // microsec
}else{
nsec = 0;
sec = 0;
}
ofs << sec << "¥t" << nsec << endl;
}

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/01/04 13:21
2017/01/04 13:42
退会済みユーザー
2017/01/04 14:07
2017/01/04 15:02
退会済みユーザー
2017/01/05 10:34
2017/01/05 12:30
退会済みユーザー
2017/01/09 12:54
2017/01/09 13:22