如何获得高精度的CPU时间
2011-12-22 22:27
127 查看
很多时候,我们想要统计一段代码运行的时间,但是这段代码运行的时间很短很短,以至于用clock()等函数获得时间的方法几乎是无效的。
那么我们该粗和获得高时间呢?
很多Intel的CPU有一条获得系统时钟的指令。我们可以用这条指令来获得时间。
rdtsc.h
《编程之美》中正是用这种方式获得高精度时间,进而控制任务管理器的显示。
参考:rdtsc详解
那么我们该粗和获得高时间呢?
很多Intel的CPU有一条获得系统时钟的指令。我们可以用这条指令来获得时间。
rdtsc.h
#if defined(__i386__) static __inline__ unsigned long long rdtsc(void) { unsigned long long int x; __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); return x; } #elif defined(__x86_64__) static __inline__ unsigned long long rdtsc(void) { unsigned hi, lo; __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 ); } #elif defined(__powerpc__) static __inline__ unsigned long long rdtsc(void) { unsigned long long int result=0; unsigned long int upper, lower,tmp; __asm__ volatile( "0: \n" "\tmftbu %0 \n" "\tmftb %1 \n" "\tmftbu %2 \n" "\tcmpw %2,%0 \n" "\tbne 0b \n" : "=r"(upper),"=r"(lower),"=r"(tmp) ); result = upper; result = result<<32; result = result|lower; return(result); } #endif用法:
#include <stdio.h> #include "rdtsc.h" int main(int argc, char* argv[]) { unsigned long long a,b; start_time = rdtsc(); //do something... end_time = rdtsc(); printf("%llu\n", end_time-start_time); return 0; }有了这个超高精度的时间函数,以后应用中对效率的比较会更准确。
《编程之美》中正是用这种方式获得高精度时间,进而控制任务管理器的显示。
参考:rdtsc详解
相关文章推荐
- C++中获得CPU高精度时间戳( 纳秒级 )
- C++中获得CPU高精度时间戳( 纳秒级 )
- C++中获得CPU高精度时间戳
- C++中获得CPU高精度时间戳
- C++中获得CPU高精度时间戳( 纳秒级 )
- C++中获得CPU高精度时间戳( 纳秒级 )
- 要获得表中每一个时间time对应的f_value的最大值,该sql应该如何实现
- 获取系统时间几种方法 和 使用CPU时间戳进行高精度计时
- 如何选择CPU和网络压力都比较小的时间发送数据包?
- Android中如何修改系统时间(应用程序获得系统权限)
- 如何获得系统时间
- 获取系统时间几种方法 和 使用CPU时间戳进行高精度计时
- ios 如何获得系统时间和日期
- c#如何获得cpu,硬盘的物理序列号
- C语言如何获得精确到毫秒的时间
- 请问如何从网上获得格林威治标准时间, 并将其转变为本地的北京时间?
- 获取系统时间几种方法 和 使用CPU时间戳进行高精度计时收藏
- 如何获得系统当前时间 毫秒
- 如何用三个月的时间获得三年的工作经验
- PHP如何获得flv视频缩略图和视频时间