c语言函数段测试时间方法及比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.测试结果数据图