【发布时间】:2017-02-27 19:36:19
【问题描述】:
假设我想测量特定功能的总时间。现在这个函数调用其他函数(f1 和 f2)。所以我想计算f1和f2的总时间。
我期待的是f total time = f1 total time + f2 total time
void f(){
struct timespec total_start, total_end;
struct timespec f1_start, f1_end;
struct timespec f2_start, f2_end;
clock_gettime(CLOCK_MONOTONIC, &total_start);
clock_gettime(CLOCK_MONOTONIC, &f1_start);
f1();
clock_gettime(CLOCK_MONOTONIC, &f1_end);
clock_gettime(CLOCK_MONOTONIC, &f2_start);
f2();
clock_gettime(CLOCK_MONOTONIC, &f2_end);
clock_gettime(CLOCK_MONOTONIC, &total_end);
f_total_time = (total_end.tv_sec - total_start.tv_sec) + (total_end.tv_nsec - total_start.tv_nsec)/1e9 ;
f1_total_time = (f1_end.tv_sec - f1_start.tv_sec) + (f1_end.tv_nsec - f1_start.tv_nsec)/1e9 ;
f2_total_time = (f2_end.tv_sec - f2_start.tv_sec) + (f2_end.tv_nsec - f2_start.tv_nsec)/1e9 ;
}
我的问题是,这是测量函数内部函数时间的正确方法吗?
问题:我面临的问题是 f1 和 f2 的总时间加起来不等于 f 的总时间。即f total time != f1 total time + f2 total time实际发生的是f total time > f1 total time + f2 total time
我做错了吗?
【问题讨论】:
-
调用
clock_gettime需要一点时间,所以总时间自然会超过单个函数调用的时间。没有什么不对。如果你想避免这种情况,只需自己添加函数时间:在计算函数时间之后,f_total_time = f1_total_time + f2_total_time;。 -
你用的是c++吗?
-
不正确,但调用
clock_gettime需要时间! -
@TonyD 我明白了,但
f total time greater then f1 total time + f2 total time by factor of 100 , eg: 0.38 > 0.01 + 0.03 -
我尝试并获得了连贯的结果...
标签: c++ performance time