cputime测试代码运行时间可能不及tic/toc准确是众所周知的事情。本文并非旧话重提,而是期望起到抛砖引玉的效果,从而找到cputime与tic/toc内在的区别。望不吝赐教!

用tic/toc测试如下代码

  1. tic
  2. pause(10);
  3. t=toc

复制代码

会发现matlab处于busy状态并持续10秒,然后输出:

t =

10.0007

然而用如下cputime测试:

  1. t1=cputime;
  2. pause(10);
  3. t2=cputime;
  4. t=t2-t1

复制代码

会发现matlab也会处于busy状态并持续10秒,然后输出:

t =

0.1875

为何差别如此巨大? 于是本人阅读了help,发现了:

Using tic and toc Versus the cputime Function

Although it is possible to measure performance using the cputime function, it is recommended that you use the tic and toc functions for this purpose exclusively. It has been the general rule for CPU-intensive calculations run on Microsoft Windows machines that the elapsed time using cputime and the elapsed time using tic and toc are close in value, ignoring any first time costs. There are cases however that show a significant difference between these two methods. For example, in the case of a Pentium 4 with hyperthreading running Windows, there can be a significant difference between the values returned by cputime versus tic and toc.

原来Mathworks自己也是推荐用tic toc,而非cputime,他们也发现了超线程奔四CPU用cputime测试时间跟tic toc差距很大,根据我个人的理解,这应该跟CPU多核间运算分配(多核CPU情况)、多线程之间运算分配(超线程CPU),以及CPU内部运算优化等多种因素有关。cputime测试的并非代码实际执行时间,而是CPU实际运行的时间。通过CPU内部多核间任务调度、线程间调动、cpu自身优化(如被称为turbo睿频的软超频技术等)等,每个cpu实际运行时间会大大低于代码执行时间,因而也就出现了cputime测试时间大大低于tic/toc的时间。比如你的电脑是双核同时还支持超线程,那么你用cputime测试的时间最大不会超过代码运行时间的1/4,实际情况中恐怕会更小。

然而,tic/toc是直接测试代码实际执行时间,不论cpu有多少内核、多少线程、做何种优化,tic/toc都会给出代码实际运行时间的总和,因此tic/toc可以比较准确反映代码的真实运行时间。正因为如此,Mathworkss自己也是推荐用tic toc,而非cputime。

如今是多核的时代,并且Intel绝大多数cpu同时支持超线程,稍微高端一定的cpu都支持turbo技术,那么cputime测试的时间恐怕只会更加不准,所以,还是用tic toc把

以上纯属个人观点,欢迎批评指正,以期进步!

tic/toc/cputime测试时间的更多相关文章

  1. 关于MATLAB中的tic toc的问题

    关于MATLAB中的tic toc的问题 其一) MATLAB实际单位时间计时函数的具体应用,在编写程序时,经常需要获知代码的执行实际时间,这就需要在程序中用到计时函数,matlab中提供了以下三种方 ...

  2. [T-ARA][Tic Tic Toc]

    歌词来源:http://music.163.com/#/song?id=22704478 Tic Tic Toc RA Tic Tic Toc RA [Tic Tic Toc RA Tic Tic T ...

  3. MATLAB 秒表函数 tic toc 计算程序运行时间

    若需要测试出程序运行所需时间,或对不同的运行方式所需时间进行对比,则可利用秒表函数tic和toc.Tic函数启动定时器,第一个紧跟它的toc函数终止定时器并报告此时定时器的流逝时间.其语法如下:  t ...

  4. [Matlab] tic toc

    tic Start a stopwatch timer.    tic and TOC functions work together to measure elapsed time.    tic, ...

  5. How to have matlab tic toc in C++?

    Reprinted form: https://stackoverflow.com/questions/13485266/how-to-have-matlab-tic-toc-in-c/1348558 ...

  6. Matlab中tic和toc用法

    简单地说,tic和toc是用来记录matlab命令执行的时间 tic用来保存当前时间,而后使用toc来记录程序完成时间. 两者往往结合使用,用法如下: tic operations toc 显示时间单 ...

  7. MATLAB——时间,日期及显示格式

    一.日期和时间 1.生成指定格式日期和时间 标准日期格式 2.获取当前时间的数值 >> datestr(now,) ans = -- :: >> datestr(now,'yy ...

  8. Matlab编程基础

    平台:Win7 64 bit,Matlab R2014a(8.3) “Matlab”是“Matrix Laboratory” 的缩写,中文“矩阵实验室”,是强大的数学工具.本文侧重于Matlab的编程 ...

  9. 【转载】让你的MATLAB代码飞起来

    原文地址:http://developer.51cto.com/art/201104/255128_all.htm MATLAB语言是一种被称为是"演算纸"式的语言,因此追求的是方 ...

随机推荐

  1. VC++NMAKE

    目录 第1章 NMAKE    1 1.1 运行NMAKE    1 1.1.1 NMAKE的实质    2 1.2 描述块    3 1.2.1 定义    3 1.2.2 多个描述块    3 1 ...

  2. redis.conf详解

    # Redis示例配置文件 # 注意单位问题:当需要设置内存大小的时候,可以使用类似1k.5GB.4M这样的常见格式: # # 1k => bytes # 1kb => bytes # 1 ...

  3. 资源 之 4.4 Resource通配符路径(拾贰)

    4.4.1  使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配 ...

  4. MySQL 函数积累

    IFNULL(expr1,expr2) // 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值 IF(expr1,expr2,e ...

  5. robotframework笔记24

    侦听器接口 机器人框架有一个侦听器接口,可以用于接收 对测试执行通知. 示例用法包括 外部测试监控,测试失败时发送邮件消息, 与其他系统进行通信. 侦听器API版本3也使得 它可以修改测试在测试执行和 ...

  6. js 继承inheritance/extends

    主要就是<javascript语言精粹>语言精粹中的内容 5.1伪类 Function.prototype.method = function(name,func){ this.proto ...

  7. 通过chrome 获取网站的cookie信息

    通过chrome 打开网页 审核元素 登录网站后 network列表中查看 home?开头列表项的 cookie信息

  8. Git分支管理详解

    内容来源:http://blog.jobbole.com/25775/ Git简介 Git是分布式版本控制工具:Git 收取的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本 ...

  9. hdu----(2222)Keywords Search(trie树)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  10. 《精通javascript》几个简单的函数

    转载http://www.cnblogs.com/jikey/archive/2011/07/25/2116696.html /** * 隐藏元素 * @param {String} elem */f ...