Ubuntu下C语言函数运行时间测试.doc_第1页
Ubuntu下C语言函数运行时间测试.doc_第2页
Ubuntu下C语言函数运行时间测试.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最近突然有必要测试C语言中各个函数的运行时间,于是就搜索了一下,发现有4种方法可以达成测算程序运行时间的目的。它们分别是使用clock, times, gettimeofday, getrusage来实现的。下面就来逐一介绍,并比较它们的优劣点。程序做的处理很简单,就是填写一个1024*1024的矩阵。#include #include #include #include #include #define TEST_BY_CLOCK (char)(0x00)#define TEST_BY_TIMES (char)(0x01)#define TEST_BY_GETTIMEOFDAY (char)(0x02)#define TEST_BY_GETRUSAGE (char)(0x03)#define TEST_METHOD (TEST_BY_GETTIMEOFDAY) #define COORDINATION_X (int)(1024)#define COORDINATION_Y (int)(1024) static int g_MatrixCOORDINATION_XCOORDINATION_Y; double getTimeval() struct rusage stRusage; struct timeval stTimeval; if (TEST_METHOD = TEST_BY_GETTIMEOFDAY) gettimeofday(&stTimeval, NULL); else if (TEST_METHOD = TEST_BY_GETRUSAGE) getrusage(RUSAGE_SELF, &stRusage); stTimeval = stRusage.ru_utime; return stTimeval.tv_sec + (double)stTimeval.tv_usec*1E-6; int main() int i, j; int n = 0; clock_t clockT1, clockT2; double doubleT1, doubleT2; if (TEST_METHOD = TEST_BY_CLOCK) clockT1 = clock(); else if (TEST_METHOD = TEST_BY_TIMES) times(&clockT1); else if (TEST_METHOD = TEST_BY_GETTIMEOFDAY) doubleT1 = getTimeval(); else if (TEST_METHOD = TEST_BY_GETRUSAGE) doubleT1 = getTimeval(); * for (i = 0; i COORDINATION_X; i+) for (j = 0; j COORDINATION_Y; j+) g_Matrixij = i * j; * if (TEST_METHOD = TEST_BY_CLOCK) clockT2 = clock(); printf(Time result tested by clock = %10.30fn, (double)(clockT2 - clockT1)/CLOCKS_PER_SEC); else if (TEST_METHOD = TEST_BY_TIMES) times(&clockT2); printf(Time result tested by times = %10.30fn, (double)(clockT2 - clockT1)/sysconf(_SC_CLK_TCK); else if (TEST_METHOD = TEST_BY_GETTIMEOFDAY) doubleT2 = getTimeval(); printf(Time result tested by gettimeofday = %10.30fn, (double)(doubleT2 - doubleT1); else if (TEST_METHOD = TEST_BY_GETRUSAGE) doubleT2 = getTimeval(); printf(Time result tested by getrusage = %10.70fn, (double)(doubleT2 - doubleT1); return 0;使用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得到的是程序对系统资源的占用信息。只要指定了RUSA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论