Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1427993
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-05-12 18:22:22




    1. #include<stdio.h>
    2. #include<sys/time.h>
    3. #include<unistd.h>
    4. #include<time.h>

    5. int main(){
    6.     long t;
    7.     struct timeval tv;
    8.     struct timezone tz;
    9.     gettimeofday(&tv,&tz);
    10.     t=tv.tv_usec;
    11.     xxxx(......);//本行为你要测试的函数,调用该函数
    12.     gettimeofday(&tv,&tz);
    13.     t=tv.tv_usec-t; //t为你要的函数调用的时间(微秒),你可以用printf输出。
    14.     printf("%u\n", t);
    15.     return 0;
    16. }

    以上是使用gettimeofday()方法的代码,精度为微妙。

    以下是摘自的关于几种方法的分析与对比。

    使用clock的方法:
    clock是ANSI C的标准库函数,关于这个函数需要说明几点。
    首先,它返回的是CPU耗费在本程序上的时间。也就是说,途中sleep的话,由于CPU资源被释放,那段时间将不被计算在内。
    其 次,得到的返回值其实就是耗费在本程序上的CPU时间片的数量,也就是Clock Tick的值。该值必须除以CLOCKS_PER_SEC这个宏值,才能最后得到ss.mmnn格式的运行时间。在POSIX兼容系统 中,CLOCKS_PER_SEC的值为1,000,000的,也就是1MHz。
    最后,使用这个函数能达到的精度大约为10ms。

    使用times的方法:
    times的用法基本和clock类似,同样是取得CPU时间片的数量,所不同的是要除以的时间单位值为sysconf(_SC_CLK_TCK)。

    使用gettimeofday的方法:
    用gettimeofday直接提取硬件时钟进行运算,得到的结果的精度相比前两种方法提高了很多。
    但是也正由于它提取硬件时钟的原因,这个方法只能计算程序开始时间和结束时间的差值。而此时系统中如果在运行其他的后台程序,可能会影响到最终结果的值。如果后台繁忙,系统dispatch过多的话,并不能完全真实反映被测量函数的运行时间。

    使用getrusage的方法:
    getrusage得到的是程序对系统资源的占用信息。只要指定了RUSAGE_SELF,就可以得到程序本身运行所占用的系统时间。
    可以说是精度最高的测量方法了。

    自己试用了这四种方法,感觉需要高精度测试的话,getrusage和gettimeofday都可以选择。需要长时间测试的话,clock也是不错的,尤其是考虑到它的通用性。

阅读(382) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~