前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab衡量代码的性能

Matlab衡量代码的性能

作者头像
用户9925864
发布2022-07-27 09:35:13
6390
发布2022-07-27 09:35:13
举报

衡量代码的性能

性能计时函数概述

timeit 函数和秒表计时器函数 tic 和 toc 可以计算代码运行所需的时间。使用 timeit 函数严格测量函数执行时间。使用 tic 和 toc 可估算运行较小部分代码而非整个函数的时间。

计时函数

要测量运行函数所需的时间,请使用 timeit 函数。timeit 函数多次调用指定的函数,并返回测量结果的中位数。它采用要测量的函数的句柄并返回典型执行时间(以秒为单位)。假设定义了一个函数 computeFunction,它采用两个在工作区中定义的输入 x 和 y。您可以使用 timeit 计算执行函数所需的时间。

代码语言:javascript
复制
function a = myComputeFunction(x,y)
a = 0;
for  i = 1:1000
    a = x.*y+x/y+a;
end
代码语言:javascript
复制
f = @() myComputeFunction(1,3);
timeit(f)
代码语言:javascript
复制
ans =

   1.1029e-05
代码语言:javascript
复制
显示计算时间为1.1029e-05。

计算部分代码的时间

要计算某部分程序需要多长时间运行或者比较各部分程序的不同实现的速度,可使用秒表计时器函数 tic 和 toc。调用 tic 可启动计时器,紧接着 toc 可读取已用时间。

代码语言:javascript
复制
tic
   % 统计运行时间的代码. 
toc

有时程序运行速度太快,导致 tic 和 toc 无法提供有用的数据。如果您的代码运行速度快于 1/10 秒,请考虑测量它在循环中运行的时间,然后求平均值以计算单次运行的时间。

代码语言:javascript
复制
tic
f = @() myComputeFunction(1,3);
timeit(f)
toc
代码语言:javascript
复制
>> Untitled2

ans =

   1.3954e-06

历时 0.005282 秒。

Cputime 函数与 tic/toc 和 timeit

建议使用 timeit 或 tic 和 toc 来度量代码的性能。这些函数会返回挂钟时间。与 tic 和 toc 不同,timeit 函数会调用代码多次,因此会考虑首次成本。

cputime 函数会测量总 CPU 时间并跨所有线程进行汇总。此测量值不同于 timeit 或 tic/toc 返回的挂钟时间,可能会造成误解。例如:

pause 函数的 CPU 时间通常很小,但挂钟时间会考虑暂停 MATLAB 执行的实际时间。因此,挂钟时间可能更长。

如果函数均匀使用四个处理核,则 CPU 时间可能约是挂钟时间的四倍。

测量运行 surf(peaks(40)) 所用的 CPU 时间。

代码语言:javascript
复制
tStart = cputime;
surf(peaks(40))
代码语言:javascript
复制
tEnd = cputime - tStart

pause 的 CPU 时间通常很小:

代码语言:javascript
复制
tStart = cputime;
pause(1)
tEnd = cputime - tStart

tEnd =

    0.1094

但是,挂钟时间会考虑暂停 MATLAB 执行的实际时间:

代码语言:javascript
复制
tic
pause(1)
toc
代码语言:javascript
复制
Elapsed time is 1.000483 seconds.

有关测量性能的提示

在测量代码的性能时,还需要考虑以下:

  • 计算足够大的一部分代码的时间。理想情况下,进行计时的代码运行时间应该超过 1/10 秒。
  • 将要尝试计时的代码放在函数中,而不是在命令行或脚本内部对其计时。
  • 除非是尝试测量首次成本,否则请多次运行代码。使用 timeit 函数。
  • 请不要在测量性能时执行 clear all。
  • 将输出分配给一个变量,而不是使其保留默认值 ans。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 衡量代码的性能
    • 性能计时函数概述
      • 计时函数
        • 计算部分代码的时间
          • Cputime 函数与 tic/toc 和 timeit
            • 有关测量性能的提示
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档