全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最近突然有必要测试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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026建信金融资产投资有限公司校园招聘8人备考题库及答案详解(名校卷)
- 2026年陕西省选调生招录备考题库(面向西安电子科技大学)含答案详解(能力提升)
- 2025广东汕尾市城区招聘“网格+警格”辅助人员30人备考题库含答案详解(研优卷)
- 2025沈阳市苏家屯区总工会公开招聘工会社会工作者备考题库附答案详解(满分必刷)
- 2025广西农村合作金融机构秋季新员工招聘390人备考题库附答案详解
- 2026浙江农商联合银行校园招聘备考题库含答案详解(培优)
- 2025年天津出版中考真题及答案
- 2025广东广州越秀区光塔街招聘城管协管员4人备考题库及完整答案详解1套
- 2025湖南湘西自治州消防救援支队政府专职消防员招聘78人备考题库含答案详解(精练)
- 2024-2025学年陕西省咸阳市旬邑县中考数学适应性模拟试题含解析
- 四川省成都市部分中学2026届高三上学期期中考试语文试卷及答案
- 辽宁省名校联盟2025年高三12月份联合考试生物试卷(含答案详解)
- 2026年中考英语一轮复习:一词多义(按字母顺序编排共233个)
- 新人教八年级上英语课件Unit 7 When Tomorrow Comes Section B(1a-2c)课件
- 2025年超星尔雅学习通《生态环境监测与数据分析》考试备考题库及答案解析
- 2025年内蒙古行政执法考试试题及答案
- 热能动力工程认识实习 教学大纲
- GB 31247-2014电缆及光缆燃烧性能分级
- 世界之最-家长进课堂课件
- 电气安装工程施工工艺培训课件
- 硬笔书法纸(A3)-制作模板63WORD
评论
0/150
提交评论