测一段代码的运行时间
Posted 我即狂澜,且力不可挽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测一段代码的运行时间相关的知识,希望对你有一定的参考价值。
2017-09-1613:35:56
感觉很实用。
/**************************************
time ./a.out 命令所花费的real时间、user时间和sys时间。
real时间是指挂钟时间,也就是命令开始执行到结束的时间。
这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
user时间是指进程花费在用户模式中的CPU时间,
这是唯一真正用于执行进程所花费的时间,
其他进程和花费阻塞状态中的时间没有计算在内。
sys时间是指花费在内核模式中的CPU时间,
代表在内核中执系统调用所花费的时间,
这也是真正由进程使用的CPU时间。
**************************************/
/**************************************
得到进程花费在用户模式中CPU执行时间.
其他进程和花费阻塞状态中的时间没有计算在内。
#include <time.h>
clock_t clock(void);
clock函数返回的是cpu时间,并不是秒数,
真正的一秒钟可能包含若干个CPU时间,
这个值通常是由宏CLOCKS_PER_SEC来定义,
表示一秒中有CLOCKS_PER_SEC这么多个cpu时间,
不同的编译器可能不同
**************************************/
/**************************************
得到命令开始执行到结束的时间。
这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
#include <sys/time.h>
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);
**************************************/
#include <stdio.h>
#include <sys/time.h>
int main(int argc , char *argv[])
{
long i,j,k,r;
long n = 800;
long a[800][800]={0};
long b[800][800]={0};
long c[800][800]={0};
for(i = 0 ; i < n ; i++)
{
for(j = 0 ; j < n ; j++)
{
a[i][j] = i*j-i-j;
b[i][j] = i*j+i+j;
}
}
/************************************/
//定义两个结构体,来记录开始和结束时间
struct timeval start;
struct timeval end;
//记录两个时间差
double usedTime;
//第一次获取时间,即表示开始记时
gettimeofday(&start,NULL);
for(k = 0 ; k < n ; k++)
{
for(j = 0 ; j < n ; j++)
{
r = a[j][k];
for(i = 0 ; i < n ; i++)
{
c[j][i] += r * b[k][i];
}
}
}
//第二次获取时间,即表示结束记时
gettimeofday(&end,NULL);
/************************************/
//计算时间差,并打印
usedTime = (double)(end.tv_sec-start.tv_sec)+ ((double)(end.tv_usec-start.tv_usec))/1000000;
printf("usedTime : %.4f s\n",usedTime);
return 0;
}
----------------------------------------------------------
#include <stdio.h>
#include <time.h>
int main(int argc , char *argv[])
{
long i,j,k,r;
long n = 800;
long a[800][800]={0};
long b[800][800]={0};
long c[800][800]={0};
for(i = 0 ; i < n ; i++)
{
for(j = 0 ; j < n ; j++)
{
a[i][j] = i*j-i-j;
b[i][j] = i*j+i+j;
}
}
/******************得到本机时间年月日时分秒******************/
time_t rawTime;
struct tm *timeInfo;
time(&rawTime);
timeInfo = localtime(&rawTime);
printf("\n%s\n" , asctime(timeInfo));
/************************************************************/
double usedTime;
double clockSec = (double)CLOCKS_PER_SEC;
printf("CLOCKS_PER_SEC : %.4f ticks per second\n" , clockSec);
clock_t start , finish;
start = clock();
printf("\n Start : %.4f ticks \n" , (double)start);
for(k = 0 ; k < n ; k++)
{
for(j = 0 ; j < n ; j++)
{
r = a[j][k];
for(i = 0 ; i < n ; i++)
{
c[j][i] += r * b[k][i];
}
}
}
finish = clock();
printf(" Over : %.4f ticks \n\n" , (double)finish);
/************************************/
usedTime = (double)(finish-start);
usedTime = usedTime/clockSec;
printf("usedTime : %.4f s \n\n" , usedTime);
return 0;
}
以上是关于测一段代码的运行时间的主要内容,如果未能解决你的问题,请参考以下文章