测量函数所花费的时间:clock_gettime

Jar*_*ary 27 c timing clock

我想测量一个函数需要多长时间.

我有一个小问题:虽然我想要精确,并使用浮点,每次我使用%lf打印我的代码我得到两个答案之一:1.000 ...或0.000 ....这让我想知道如果我的代码是正确的:

#define BILLION  1000000000L;

// Calculate time taken by a request
struct timespec requestStart, requestEnd;
clock_gettime(CLOCK_REALTIME, &requestStart);
function_call();
clock_gettime(CLOCK_REALTIME, &requestEnd);

// Calculate time it took
double accum = ( requestEnd.tv_sec - requestStart.tv_sec )
  + ( requestEnd.tv_nsec - requestStart.tv_nsec )
  / BILLION;
printf( "%lf\n", accum );
Run Code Online (Sandbox Code Playgroud)

大部分代码都不是由我做的.此示例页面包含说明clock_gettime使用的代码:http://www.users.pjwstk.edu.pl/~jms/qnx/help/watcom/clibref/qnx/clock_gettime.html

任何人都可以让我知道什么是不正确的,或者为什么我只得到整数值?

非常感谢你,

Jary

Mar*_*tos 26

将整数除以整数会产生整数.试试这个:

#define BILLION 1E9
Run Code Online (Sandbox Code Playgroud)

并且不要在行尾使用分号.#define是一个预处理器指令,而不是一个语句,并包括导致BILLION被定义为的分号1000000000L;,如果你试图在大多数情况下使用它,它会破坏.你很幸运,因为你在表达的最后和任何括号之外使用它.

  • 非常感谢你的帮助.谢谢你让我知道分号,这是我忘了的东西.非常感谢你! (2认同)
  • 为了性能.. #define ONE_OVER_BILLION 1E-9 并使用乘法。 (2认同)

Oli*_*rth 9

( requestEnd.tv_nsec - requestStart.tv_nsec )是整数类型,并且总是小于BILLION,因此在整数运算中将一个除以另一个的结果将始终为0.您需要将减法的结果转换为例如double在进行除法之前.