已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
提高Matlab仿真程序执行性能,正文结构,背景与意义 影响仿真程序性能的因素 提高仿真程序性能的建议 执行速度测试方法,背景与意义,Matlab与其他语言的差异: 例如对于C或者C+来说,只要算法的思想不变、采用的数据结构相同,不同人写出来的语句在效率上一般不会产生太大的差别。所以,对于C来说,程序的好坏一般由算法来决定。 但是,在Matlab中,同样的算法、同样的结构、同样的流程,如果采用的语句不一样,在效率上就会大大不同。 所以,了解有关Matlab执行效率的内容,对我们的接下来的仿真实践会有很多帮助。,影响仿真程序性能的因素,很多书上都说Matlab是解释性语言,执行效率不如C/C+高。这曾令我对Matlab的执行速度失去信心; 然而这句话虽然是正确的,却非常不全面,导致我们将速度慢的原因归咎于工具语言本身; 实际上,Matlab通过借助混合编程的方法,其执行效率与编译型语言之间的差别已经不是很明显; 大多数情况下,执行效率的低下,是由于我们忽视了一些影响仿真程序性能的因素导致的,影响仿真程序性能的因素,For-循环 函数调用 内存分配 矩阵索引 其它,影响仿真程序性能的因素For循环,传统观点认为for-loop是影响性能的致命环节,让我们来对此验证: tic toc Elapsed time is 0.000001 seconds. tic for i=1:1000000 end Toc Elapsed time is 0.003144 seconds.,影响仿真程序性能的因素For循环,从上面的实验结果可以得出以下结论: tic/toc语句的时间开销可以忽略不计 for-loop语句本身的时间开销也非常小,关键的影响效率的地方不在于循环本身,而是在于循环的内部 接下来我们就借助for循环,分析一下其他的各个影响效率的因素,影响仿真程序性能的因素函数调用,函数的分类: build-in function MEX-function (“MATLAB executable“) m-function anonymous function inline function 其它相关内容(不讲): function handle feval,影响仿真程序性能的因素内建函数,tic for i=1:1000000 cos(0); end toc Mean elapsed time is 0.032866 seconds.,影响仿真程序性能的因素m-函数,tic for i=1:1000000 func(i); end toc Mean elapsed time is 0.185556 seconds.,function func( ) end,影响仿真程序性能的因素匿名函数,tic for i=1:1000000 funca(i); end toc Mean elapsed time is 0.561228 seconds.,funca=(x);,影响仿真程序性能的因素内联函数,tic for i=1:1000000 funci(i); end toc Mean elapsed time is 19.5606 seconds.,funci=inline(,x);,影响仿真程序性能的因素函数调用,影响仿真程序性能的因素函数调用,从上面的实验结果可以得出以下结论: 内联函数的调用时间开销最小,约为for-loop本身的10倍 m-函数的调用时间开销约为内联函数的6倍,约为for-loop本身的60倍 匿名函数的调用时间开销约为m-函数的3倍,约为for-loop本身的187倍 内联函数的调用时间开销过大,尽量不要在循环中使用 另外MEX-函数的调用时间开销,理应介于内联函数和m-函数之间,影响仿真程序性能的因素矩阵索引,tic A=zeros(1000000,1); for i=1:1000000 A(i)=i; end toc Mean elapsed time is 0.007592 seconds.,影响仿真程序性能的因素矩阵索引,tic A=zeros(1000000,1); for i=1:1000000 A(i,1)=i; end toc Mean elapsed time is 0.007954 seconds.,影响仿真程序性能的因素矩阵索引,tic A=zeros(1000000,1); for i=1:1000000 A(i:i,1)=i; end toc Mean elapsed time is 0.663598 seconds.,影响仿真程序性能的因素矩阵索引,tic A=zeros(1000000,1); for i=1:1000000 A(i,:)=i; end toc Mean elapsed time is 0.273345 seconds.,影响仿真程序性能的因素矩阵索引,tic A=zeros(1000000,1); for i=1:1000000 A(i,1:1)=i; end toc Mean elapsed time is 0.730042 seconds.,影响仿真程序性能的因素矩阵索引,tic A=zeros(1000000,1); for i=1:1000000 A(i:i,1:1)=i; end toc Mean elapsed time is 1.00852 seconds.,影响仿真程序性能的因素矩阵索引,影响仿真程序性能的因素内存分配,tic A=zeros(1000000,1); for i=1:1000000 A(i)=i; end toc Mean elapsed time is 0.009025 seconds.,影响仿真程序性能的因素内存分配,tic % A=zeros(1000000,1); for i=1:1000000 A(i)=i; end toc Mean elapsed time 20 minutes.,影响仿真程序性能的因素内存分配,因此,如果不预先分配好内存,将会大大增加仿真时间,拖慢执行效率; 所幸的是,由于这个现象的重要性,Matlab的编辑器能够发现并提示这个问题,会用红的波浪线标记出来,影响仿真程序性能的因素其它,关于Matlab还有很多细节及技巧,可以通过在程序中查询产品帮助,获得设计师的建议,一点一点积累 下面列举一些编程的建议,提高仿真程序性能的建议,向量化 函数化 预分配内存 随时用测试工具检测执行效率,提高仿真程序性能的建议向量化,N=0:0.1:1000; for i=0:10000 y(i)=cos(N(i); end 向量化: N=0:0.1:1000; y=cos(N);,提高仿真程序性能的建议向量化,Y=arrayfun(function, X); 向量化函数: accumarray arrayfun bsxfun cellfun spfun structfun,提高仿真程序性能的建议函数化,尽量使用内建函数,内建函数的速度是最快的 m-函数的执行效率也很高 MEX-函数的执行效率仅次于内建函数,将耗时的代码写成MEX-函数,将大大提高运行速度 匿名函数,内联函数,以及一些面向对象方法,尽量不要在执行次数多的循环体内使用,提高仿真程序性能的建议预分配内存,A = zeros(1000, 1); A = int8(zeros(100, 1); A = zeros(1000, 1, int8); 常用的预分配内存函数: zeros ones eye,执行速度测试方法,tic/toc语句 profile函数 profiler工具,执行速度测试方法tic/toc语句,tic/toc语句,前面已经介绍了实例。 tic/toc不一定要成对出现,一个tic后面可以有多个toc,但需要需要重新计时的时候,要再次执行tic toc的结果可以用变量接收下来,如 T=toc T(k)=toc;,执行速度测试方法profile函数,profile on script-name profile report profile off profile clear 对于单个m文件,你只需要简单的在Matlab 命令行窗口(Command Window)输入profile on,然后是m文件名,比如文件名为calculation.m的文件,直接输入calculation,执行完毕以后,输入profile report,就可以观察每条语句的耗时。结束后别忘了profile off。还可以使用profile clear清除之前执行的结果。,执行速度测试方法profile函数,运行到断点 profile on 单步执行 profile report profile off profile clear 对于在一大堆语句中单独调用的m文件,如果你仅仅需要用matlab观察这个函数的耗时,那么用断点运行到你需要查看的函数之前,然后按照上面仿真单个文件的方法,在命令行窗口执行profile on,然后调用函数, 接下来用profile report查看报告,最后输入profile off结束。,执行速度测试方法profiler工具,执行速度测试方法profiler工具,执行速度测试方法profiler工具,执行速度测试方法profiler工具,执行速度测试方法profiler工具,附:减少内存使用的建议,为变量定义合适的数据类型x=zeros(1,1000,uint8); 当使用大的矩阵变量时,预先指定维数并分配好内存,避免每次临时扩充维数 重用变量,避免生成大的中间变量,并删除不再需要的临时变量 当程序需要生成大量数据时,可以考虑定期将变量写到磁盘,然后清除这些变量。 当需要这些变量时,再重新从磁盘加载 当矩阵中数据极少时,将全矩阵转换为稀疏矩阵 clear, save, load, whos, pack,附:for-loop中的循环变量,for i=1:1000 i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司会议管理的行政工作计划
- 2026年老年大学下属事业单位选聘考试试题(附答案)
- 腾讯云技术专家面试全解析
- 音乐行业音乐制作人职位面试要点解析
- 京东进口业务中的物流与配送策略
- 家电行业市场策划专员工作手册
- 企业人力资源招聘与培养策略
- 数字电影特效技术面试全解
- 航空从业人员健康管理培训面试指南
- 医院服务行业客户服务部经理面试技巧
- AI与安全培训课件
- 2025年学历类高职单招医学综合-护理类参考题库含答案解析(5套试卷)
- 《三国演义》读书分享幻灯片课件
- 甘肃省张家川回族自治县2025年上半年公开招聘村务工作者试题含答案分析
- 2025年安徽省委党校在职研究生招生考试(政治理论)历年参考题库含答案详解(5套)
- 《智能制造技术基础》课件
- 2025年云南省初中学业水平考试地理试卷真题(含答案)
- 船舶态势感知技术-洞察及研究
- 城市社会学 课件 第0-5章 绪论、城市- 城市社会组织
- 实例要素式行政起诉状(行政补偿)
- 宾得全站仪R-422NM使用说明书
评论
0/150
提交评论