我有这样的事情:
clock_t start, end; start=clock(); something_else(); end=clock(); printf("\nClock cycles are: %d - %d\n",start,end);
而且我总是得到“时钟周期为:0-0”的输出
知道为什么会这样吗?
(仅给出一点点细节,something_else()函数使用蒙哥马利表示法执行从左到右的求幂运算,而且我不确定不确定something_else()函数确实花费了一些不可忽略的时间。)
这是在Linux上。uname -a的结果是:
Linux snowy.*****.ac.uk 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux
clock 该功能不测量CPU时钟周期。
clock
C说:clock “ 从实现定义的仅与程序调用有关的时代开始,就将 实现的最佳近似 返回到程序所使用的处理器时间。”
如果在两次连续clock调用之间,您编程的时间少于该clock函数的一个单位的时间,则可以得到0。
0
POSIX clock将统一定义CLOCKS_PER_SEC为1000000(然后统一为1微秒)。
CLOCKS_PER_SEC
http://pubs.opengroup.org/onlinepubs/009604499/functions/clock.html
要测量x86 / x64中的时钟周期,可以使用内联汇编来获取CPU时间戳计数器寄存器的时钟计数rdtsc。
rdtsc