teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

2017/01/04 11:38

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -5,4 +5,38 @@
5
5
  2. for文内の全ての関数が有る状態で、hoge()のみを時間計測
6
6
 
7
7
  1と2の計測結果を比較すると、2の方が1よりも計測時間が長くなります。
8
- ということは、for文内の関数が少ない方がhoge()のみを時間計測しているにも関わらず、hoge()の実行時間が短くなっているということになります。
8
+ ということは、for文内の関数が少ない方がhoge()のみを時間計測しているにも関わらず、hoge()の実行時間が短くなっているということになります。
9
+
10
+ 疑問に思っているのは、なぜこの2つで差が出るかです。
11
+ 考えられる理由としては、LinuxにおけるTickというものが関係しているのかな、と思っています。
12
+ 自分が使用しているLinuxのCONFIG_HZは1000でしたので、1[msec]の精度でしか時間計測ができないのだと解釈しています。
13
+ なので、時間計測をしても、1[msec]進むごとにCPUが時間をカウントしているので結局それよりも細かな精度では時間計測をする事ができないのだと解釈しています。
14
+
15
+ ですが、それだけだと1と2でなぜ差ができてしまうのかを理解できません。2の場合、hoge()以外の関数がfor文内に有る事で、hoge()の実行が待たされていて、その待たされた分だけ実行時間が伸びたりしているのでしょうか?
16
+
17
+ 以上、よろしくお願い致します。
18
+
19
+
20
+ main() // 1の時の例
21
+ {
22
+ uint64_t nsec, sec;
23
+ struct timespec start, end;
24
+ int ERROR=0;
25
+ int ii;
26
+ for(ii=0; ii<1000000; ii++){
27
+ clock_gettime(CLOCK_MONOTONIC, &start);
28
+ hoge();
29
+ ERROR = clock_gettime(CLOCK_MONOTONIC, &end);
30
+ if(ERROR==0){
31
+ if((end.tv_nsec - start.tv_nsec) < 0){
32
+ end.tv_nsec += 1000000000;
33
+ end.tv_sec -= 1;
34
+ }
35
+ nsec = (end.tv_nsec - start.tv_nsec)/1000; // microsec
36
+ sec = (end.tv_sec - start.tv_sec)*1000000; // microsec
37
+ }else{
38
+ nsec = 0;
39
+ sec = 0;
40
+ }
41
+ ofs << sec << "¥t" << nsec << endl;
42
+ }