Matlab里面如何计算程序运行所耗时间
Matlab代码的分析、优化和加速

Matlab代码的分析、优化和加速Profile(分析)在加速你的matlab程序之前,你需要知道你的代码哪一部分运行最慢。
matlab提供个简单的机制,让你能够知道你的代码的某一部分运行所占用CPU时间。
通过在代码段开始添加tic,及在结束添加toc;matlab就能计算出这一代码段的运行时间。
Tic和toc方法存在两个问题:(1)显示的时间是运行时间“wall clock”。
这个时间受你在运行你的代码时,你的计算机是否同时运行其它别的程序。
(2)你需要不断地压缩计时范围来查找你代码运行最慢的位置。
一个最好的方法是利用matlab 内嵌的代码分析器。
在你的程序前面通过添加命令profile on;及在程序结束添加profile viewer;并运行你的程序。
当程序正常运行结束时,代码分析器窗口将弹出,并显示分析结果。
它包含的信息有:Function Name :函数名;Calls :函数被调用次数;Total Time :执行该函数的CPU总用时,包含任何其它被它调用的函数的CPU时间。
Self Time :执行该函数的CUP总用时,不包含任何其它被它调用的函数的CUP时间。
Total Time Plot :时间用时的曲线图。
以上信息可进行各种排序和详细查看。
注意:当你完成你的代码分析后,请删除profile on和profile viewer,因为嵌入代码分析器会使用的程序运行变慢。
标准提示☆有问题找帮助文档。
学会使用帮助文档,学会针对待解决的问题检索文档资料。
☆性能查看MATLAB->Programming->Improving Performace and Memory Usage;或MATLAB->Programming Fundamentals->Performace->Techniques for Improveing Performace。
多线程如果你使用的是多核心的计算机,那么你就可以让Matlab同时运行多个线程,Matlab 程序中一些底层的函数(Low-level function)就有可能采用并行计算的方法。
Matlab 算法时间比较

matlab程序的编写也要注意执行效率,下面以三段程序为例,讲讲如何提高程序的效率matlab中有tic和toc命令来记录一段程序的cpu使用时间,可以用help tic命令查看相应的说明
先看第一段程序
clear all
clc
tic
for a=0:1:10000
b(a+1)=a^2-a+1;
end
toc
执行结果如下:
Elapsed time is0.244107seconds.
>>
再看第二段程序
clear all
clc
tic
b(1:10001)=0;
for a=0:1:10000
b(a+1)=a^2-a+1;
end
toc
与第一段程序的区别在于预先分配了b向量的空间大小,执行结果如下:
Elapsed time is0.000459seconds.
>>
最后看第三段程序
clear all
clc
tic
a=0:1:10000;
b=a.^2-a+1;
toc
这段程序与前面的区别在于不采用循环的方式运算
执行结果如下:
Elapsed time is0.000311seconds.
>>
从上面的实例可以明显的看出这三种方式编程的优缺点所在,最后一种向量运算方式最为节约CPUtime,而第二段程序由于事先分配了空间,相比于第一段程序执行效率明显的提高,而第三种方式在数据量更大的情况下,将会比第二种方式表现出更强的优越性。
改善Matlab的运行效率

改善Matlab的运行效率一叶方舟 2012.041.改善运行的技巧1.1分析程序的运行状况1)Profiler工具使用Profiler工具找到话费时间比较多的代码行的位置并优化这些代码2)查看运行时间的函数tic--程序段time=toc3)计算短程序运行所花费的时间有的程序很短,运行时,速度太快,以至于使用tic和toc不能得到有用的信息,可尝试把程序放到一个循环中来计算ticfor k=1:100--运行程序100次endtoc1.2循环矢量化1)矢量化方法矢量化是指将for循环和while循环转换为等价的矢量或矩阵操作2)使用矢量化的函数Table 1 MATLAB 中使用了矢量化的函数1.3 数组的内存预分配1)给数组预分配内存预分配使得不必在每次数组变大时进行改变,针对不同类型的数组使用合适的预分配函数 2) 给非double 型矩阵预分配内存下面的语句用zeros 函数预分配一个uint8型100*100的矩阵,首先,创建一个double 型满秩矩阵,然后把矩阵转换为uint8型,这将导致不必要的时间和内存花费A=int8(zeros(100));使用repmat 函数,只需要创建一个double 值,从而减少了对内存的需求 A=repmat(int8(0),100,100);在不能进行预分配的时候,看是否能通过repmat函数使数组变大,用repmat函数扩展矩阵时,可以获得连续的内存块1.4其他方法1)用MEX文件编写循环代码必须使用for循环时,把它写为MEX文件,因为不必在每次运行循环中的语句时都对他们进行解释2)操作实型数据MATLAB特意为实数设计了一些函数,如reallog,realpow,realsqrt等3)函数比脚本运行更快4)使用load函数和save函数比Matlab文件I/O过程更好5)避免大型后台处理2.程序运行情况监测-Profil erProfiler是一个能够检测程序运行状况的工具,它告诉你M文件中哪些代码行最花费时间,哪些行被调用的次数最多,然后就可以利用上面的方法对这些代码进行改进。
Matlab并行计算技术的应用指南

Matlab并行计算技术的应用指南1. 引言在现代科学和工程领域中,计算机模拟和数据处理已经成为不可或缺的工具。
而在这个过程中,高性能计算成为了关键。
Matlab作为一种功能强大的科学计算软件,在处理大规模数据和计算复杂模型时发挥着重要作用。
而并行计算技术的应用可以帮助Matlab进一步提升计算效率,加速模拟和数据分析的速度。
本文将介绍Matlab并行计算技术的应用指南,帮助读者更好地利用这种技术提升计算效率。
2. 并行计算的基础知识在了解如何应用Matlab并行计算技术之前,我们先来了解一些并行计算的基础知识。
并行计算是一种利用多个处理单元(例如多个CPU或GPU)同时进行计算的技术。
这样做可以将一个计算任务划分成多个子任务,分配到不同的处理单元上进行并行计算,从而加速计算过程。
常见的并行计算技术包括向量化计算、多线程计算和分布式计算等。
3. Matlab中的并行计算工具Matlab提供了多种并行计算工具,用于实现并行计算。
其中最常用的有Parallel Computing Toolbox和Distributed Computing Server。
3.1 Parallel Computing ToolboxParallel Computing Toolbox是Matlab中用于实现并行计算的工具箱。
它提供了函数和工具,用于将计算任务分解为独立的子任务,并将其分配到多个处理单元上并行计算。
通过使用Parallel Computing Toolbox,可以充分利用多核处理器和集群计算资源,提升Matlab的计算效率。
3.2 Distributed Computing ServerDistributed Computing Server是Matlab中的一个可选工具,用于进行分布式计算。
分布式计算是一种将计算任务分配到多个机器上进行并行计算的技术。
通过使用Distributed Computing Server,可以将Matlab计算任务分布到远程机器或者云服务上进行计算,从而进一步提升计算效率。
MATLAB程式设计进阶篇程式计时

範例1-2:etime01.m
t0 = clock; a = inv(rand(2000)); elapsedTime = etime(clock, t0)
% 記錄現在的時間 % 執行反矩陣運算 % 計算所耗費的總時間
% 計算 CPU 所耗費的時間
❖ 結果: cpuTime = 3.6972
1-1 整段程式碼的計時方法
cputime:
cputime 指令回傳的時間並不包含讀檔、關檔等 I/O 運算,所以其值會小於整段程式碼的實際執行時間
下面範例測試 etime 和 cputime 的差異
1-1 整段程式碼的計時方法
% inv 指令是用來計算反矩陣
toc
% 結束計時
結果: Elapsed time is 0.987552 seconds
多個碼表計時:tic & toc
多個碼表計時:
需指定馬表(或計時器)如下
timer=tic; …
time=toc(timer);
tim範er1例=tic:; tictoc02.m % 馬表一開始計時 n=100*(1:10);
1-3 程式計時器的其他功能
profile('status'):
結果: elapsedTime = 0.9370
cputime 指令
❖ cputime:
cputime可傳回 MATLAB 從啟動後所占用的 CPU 時 間
範例1-3:cputime01.m
t0 = cputime;
% 記錄現在的時間
a = inv(rand(500));
% 執行反矩陣運算
matlab中程序运算时间计算

3、cputime函数来完成
使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下
t0=cputime
。。。。。。。。。。。。。
t1=cputime-t0
复制代码
上面说到了三种方法,都是可以进行程序运行时间计算的,但是Matlab官方推荐使用tic/toc组合,When timing the duration of an event, use the tic and toc functions instead of clock or etime.
复制代码
2、etime(t1,t2)并和clock配合
来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式
t1=clock;
。。。。。。。Βιβλιοθήκη 。。。 t2=clock;
etime(t2,t1)
复制代码
至于例子我就不举了,因为在上面的例子中使用了etime函数了
% by dynamic of Matlab技术论坛
% see also
% contact me matlabsky@
% 2009-08-18 12:08:47
clc
tic;%tic1
t1=clock;
for i=1:3
etime计算程序从开始到现在运行的时间:2.562
======================================
toc计算第2次循环运行时间:2.8108
etime计算第2次循环运行时间:2.813
etime计算程序从开始到现在运行的时间:5.375
Matlab中计算程序运行时间的三种方法

Matlab中计算程序运行时间的三种方法经常我们需要计算我们程序到底运行多长时间,这样可以比较程序的执行效率。
当然这个对于只有几秒钟的小程序没有什么意义,但是对于大程序就有很重要的意义了。
下面我们就说说Matlab中计算程序运行时间的三种常用方法吧!注意:三种方法由于使用原理不一样,得到结果可能有一定的差距!1、tic和toc组合(使用最多的)计算tic和toc之间那段程序之间的运行时间,它的经典格式为1. tic2. 。
3. toc复制代码换句话说程序,程序遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。
这个有点拗口,下面我们举个例子说明1. % by dynamic of Matlab技术论坛2. % see also 3. % contact me matlabsky@4. % 2009-08-18 12:08:475. clc6. tic;%tic17. t1=clock;8. for i=1:39. tic ;%tic210. t2=clock;11. pause(3*rand)12. %计算到上一次遇到tic的时间,换句话说就是每次循环的时间13. disp(['toc计算第',num2str(i),'次循环运行时间:',num2str(toc)]);14. %计算每次循环的时间15. disp(['etime计算第',num2str(i),'次循环运行时间:',num2str(etime(clock,t2))]);16. %计算程序总共的运行时间17. disp(['etime计算程序从开始到现在运行的时间:',num2str(etime(clock,t1))]);18. disp('======================================')19. end20. %计算此时到tic2的时间,由于最后一次遇到tic是在for循环的i=3时,所以计算的是最后一次循环的时间21. disp(['toc计算最后一次循环运行时间',num2str(toc)])22. disp(['etime程序总运行时间:',num2str(etime(clock,t1))]);复制代码运行结果如下,大家可以自己分析下1. toc计算第1次循环运行时间:2.56282. etime计算第1次循环运行时间:2.5623. etime计算程序从开始到现在运行的时间:2.5624. ======================================5. toc计算第2次循环运行时间:2.81086. etime计算第2次循环运行时间:2.8137. etime计算程序从开始到现在运行的时间:5.3758. ======================================9. toc计算第3次循环运行时间:2.046210. etime计算第3次循环运行时间:2.04611. etime计算程序从开始到现在运行的时间:7.42112. ======================================13. toc计算最后一次循环运行时间2.047914. etime程序总运行时间:7.421复制代码2、etime(t1,t2)并和clock配合来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式1. t1=clock;2. 。
如何精确计算程序运行时间

如何精确计算程序运行时间如何精确计算程序运行时间?2010-07-10 08:48在VC++6.0平台下如何精确计算程序运行时间?不太可能计算可以通过1。
GetTickCount来做,精确到msgettickcount()1 yourprogam()gettickcount()2 1-2做差在C/C++程序中常用time()来获取系统时间,但它是以秒为单位的,一需要小于1秒的时间间隔或者精度高于1秒的时间时就不再适用。
此时可以利用一种直接利用Pentium CPU内部时间戳进行计时的高精度计时手段来实现,可以用RDTSC指令来得到这个时间戳,祥见Kacker的文章,在Programming版精华区X-4-11-8。
得到CPU内部时间戳的方法如下:undefinedview plaincopyto clipboardprint?inline unsigned __int64 GetCycleCount(){__asm _emit 0x0F __asm _emit 0x31}inline unsigned __int64 GetCycleCount(){__asm_emit 0x0F __asm _emit 0x31}这里得到的是CPU自上电起经过的时钟周期数,假设CPU的时钟频率为1G,则一秒钟内该数值的变化约为2^30,CPU内部是一个64位的计数器,那么在2^34秒(即544.8年)内不会回归零,就当前来说,一台机器的持续运行时间是不会超过这个的,因而不用考虑计数器溢出。
用上面的函数得到的只是CPU的经过的时钟周期数,并不是时间,得考虑用其他方法将它转化成时间。
不知道有没有办法通过读取BIOS信息来得到CPU频率的方法,目前好多计算CPU频率的方法就是利用RDTSC指令来实现。
其中会用到sleep()或delay()等方法来得到一段粗略的时间,然后根据这段时间内计数器的变化得到相应的计数器变化值对应的粗略时间。