c语言函数段测试时间方法及比较

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数段测试时间方法及比较

作者:Peter 2011.4.7

一.用四种函数测量同一程序所需时间

1.函数段的测试有4中方法,分别是clock,times,gettimeofday,getrusage来实现的。

2.四种函数的精度如下:

clock()函数的精确度是10毫秒(ms);

times()函数的精确度是10毫秒(ms);

gettimofday()函数的精确度是微秒(μs);

getrusage()函数的精确度是纳秒(ns)。

===============================================================

3.编写test5.c程序,测试1024*1024矩阵运行的时间,比较四种函数测量相同函数段所需的时间。

测试程序如下:

=======================/*调用所需的头文件*/=======================

#include

#include

#include

#include

#include

=================/*定义宏变量:所需的4中测试方法*/=================

#define TEST_BY_CLOCK (char)(0x00) //CLOCK测试

#define TEST_BY_TIMES (char)(0x01) //TIME测试

#define TEST_BY_GETTIMEOFDAY (char)(0x02) //GETTIMEOFDAY测试

#define TEST_BY_GETRUSAGE (char)(0x03) //GETRUSAGE测试

#define TEST_METHOD (TEST_BY_CLOCK) //选择需要的测试方法

====================== /*矩阵格式定义*/========================

#define COORDINATION_X (int)(1024)

#define COORDINATION_Y (int)(1024)

static int g_Matrix[COORDINATION_X][COORDINATION_Y];

=============/*geTimeval类型及gettimeofday和getrusage计算方法*/==========

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 _sec + (double)_usec*1E-6;

}

=======================/*主函数程序如下*/===========================

int main(){

int i, j;

int n = 0;

clock_t clockT1, clockT2; //时钟的 clockT1, clockT2分别计时所要测的程序开始和结束

double doubleT1, doubleT2; // doubleT1, doubleT2 分别计时所要测的程序开始和结束===============/*利用各种METHOD对测试程序进行开始取值*/===============

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_Matrix[i][j] = i * j;

}

}

=========/*利用各种METHOD对测试程序进行结束取值,并打出相应的提示*/======= if (TEST_METHOD == TEST_BY_CLOCK) {

clockT2 = clock();

printf("Time result tested by clock = %10.30f\n",

(double)(clockT2 - clockT1)/CLOCKS_PER_SEC);

} else if (TEST_METHOD == TEST_BY_TIMES) {

times(&clockT2);

printf("Time result tested by times = %10.30f\n",

(double)(clockT1 - clockT2)/sysconf(_SC_CLK_TCK));

} else if (TEST_METHOD == TEST_BY_GETTIMEOFDAY) {

doubleT2 = getTimeval();

printf("Time result tested by gettimeofday = %10.30f\n",

(double)(doubleT2 - doubleT1));

} else if (TEST_METHOD == TEST_BY_GETRUSAGE) {

doubleT2 = getTimeval();

printf("Time result tested by getrusage = %10.70f\n",

(double)(doubleT2 - doubleT1));

}

return 0;

}

========================/*程序结束*/=============================

调试命令:

$ gcc test5.c –o test5

$ ./test5

4.测试结果数据图

相关文档
最新文档