- UID
- 856476
|
在matlab中,为了验证比较两个算法直接的效率,我们常常需要计算某段程序的运行时间,而常用的也就是三种方法:
1、tic和toc命令对;格式如下面一段程序。
tic;
a=0;
for i1=1:100000
for j1=1:10000
a=a+1;
end
end
toc;
tic命令表示开启一个matlab的计时器,toc则表示停止之前与之对应的tic开启的计时器,并得到最后的计时结果,上一段程序结果如下:
Elapsed time is 3.720372 seconds.
2、clock加etime函数;程序结构如下面一段。
t1=clock;
b=0;
for i2=1:100000
for j2=1:10000
b=b+1;
end
end
t2=clock;
etime(t2,t1)
其中,clock命令是获取系统的时间矢量,而etime函数则是计算两个时间矢量之间的差并以秒单位形式表示。clock作为时间矢量包含了年月日时分秒六个参数,如在matlab单独执行这一命令可得到:
>> clock
ans =
1.0e+003 *
2.0120 0.0080 0.0180 0.0140 0.0180 0.0507
3、cputime命令计算运行时间;
m1=cputime;
c=0;
for i3=1:100000
for j3=1:10000
c=c+1;
end
end
m2=cputime;
m=m2-m1
cputime命令是获取matlab自启动后所占用cpu的运行时间,这里需要详细介绍下,cputime不是代表matlab的运行时间,而是指matlab占用cpu的时间。大家知道,window系统的多进程管理类似于我们所说的时分复用概念,即cpu完成多进程是通过时间划分来实现的,这一时刻运行的是进程一,下一时刻运行的是进程二,由于速度非常快,所以对于用户来说看起来就是同时运行的。我们可以做个试验,在一打开matlab的时候,执行cputime命令得到:
>> cputime
ans =
13.1197
说明我们matlab打开用了13秒多的时间,大家可以自我感觉下是不是这个时间。
既然大概的原理我们知道了就可以来比较比较这三者的区别。首先,tic和toc的方法是最优的,这也是matlab帮助中提倡的一种。从精度上来说,第一种方法精度最高,由于是matlab自身的计时器,精度上要比后两者高,其次是cputime,最低的是clock只有毫秒级的精度。再者,从最接近实际电路运行时间上来说,也是第一种方法最为接近,这点我们仔细分析下。
我们知道,想得到某段程序在matlab中运行的时间,目的是在于对该程序所实现的算法在实际电路中处理的时间有个大概的估计与比较,所以我们最想要的是它在cpu运行的时间。这一点第二种方法则不太适合了,因为它采用的是系统时间作为计算参数,在这个时间内肯定还有着别的后台运行程序等。而对于第三种方法,cputime所对应的测量对象是matlab整个程序,而并不是对于我们所测量的这段程序而言(matlab也可以看做是一个编译器,对我们编写的m代码进行编译,所以它还需要进行着别的操作)。再看看我们的第一种matlab推荐的方法,tic是启动一个matlab内部的计时器,所以说它也是一种基于cpu时间的计时,而且更重要的是,计时开始的时间是我们设定在代码前的,可以说tic和toc中间对于matlab来说,大部分时间就是运行这段代码,所以时间上是最接近实际在电路中运行的时间的。
关于上面的比较,个人闲来无事做了个实验:同样的代码,将matlab在任务管理器中的进程优先级进行改动,我们可以明显看到运行时间上的变化。 |
|