【发布时间】:2017-12-01 09:26:41
【问题描述】:
我运行了基本的 sn-p 代码。
void emptyFunction(){
};
int main(){
const int conversion = 1000000000;
unsigned long long func_sum = 0;
clock_gettime(CLOCK_REALTIME, &funcTimeStart);
emptyFunction();
clock_gettime(CLOCK_REALTIME, &funcTimeEnd);
func_sum=((funcTimeEnd.tv_sec*nanoConversion)+funcTimeEnd.tv_nsec)-((funcTimeStart.tv_sec*nanoConversion)+funcTimeStart.tv_nsec);
这是为了测试运行一个空函数所需的时间。
我每个运行 10 次,我的值如下:
如果我用过:
CLOCK_REALTIME - 我的值是 57-108 纳秒
CLOCK_MONOTONIC - 我的值是 39-98 纳秒
CLOCK_MONOTONIC_RAW - 我的值是 282-487 纳秒
CLOCK_PROCESS_CPUTIME_ID - 我的值是 662-1049 纳秒
据我了解,CLOCK_REALTIME 使用挂钟时间来衡量,而 CLOCK_PROCESS_CPUTIME_ID 使用 CPU 运行代码的时间。那么 CLOCK_PROCESS_CPUTIME_ID 不会总是有一个较小的数字吗?为什么这里不是这样?
【问题讨论】:
-
您是否禁用了中断?您测量的时间还包含 ISR 事件。我认为这将是所有措施。此外,如果你用来调用一个什么都不做的函数,编译器可能不会生成调用(尤其是当你使用优化时)
-
您没有测量空函数的执行时间,而是测量了clock_gettime() 函数实现中的开销量。当然,这取决于你通过什么clockid_t。