一、 遵守Performance Acceleration的规则

关于什么是“Performance Acceleration”请参阅matlab的帮助文件。
1、只有使用以下数据类型,matlab才会对其加速:
logical,char,int8,uint8,int16,uint16,int32,uint32,double而语句中如果使用了非以上的数据类型则不会加速,如numeric,cell,structure,single,function handle,java classes,user classes,int64,uint64
2、matlab不会对超过三维的数组进行加速。
3、当使用for循环时,只有遵守以下规则才会被加速:
a、for循环的范围只用标量值来表示;
b、for循环内部的每一条语句都要满足上面的两条规则,即只使用支持加速的数据类型,只使用三维以下的数组;
c、循环内只调用了内建函数(build-in function)。
4、当使用if、elseif、while和switch时,其条件测试语句中只使用了标量值时,将加速运行。
5、不要在一行中写入多条操作,这样会减慢运行速度。即不要有这样的语句:
x = a.name; for k=1:10000, sin(A(k)), end;
6、当某条操作改变了原来变量的数据类型或形状(大小,维数)时将会减慢运行速度。
7、应该这样使用复常量x = 7 + 2i,而不应该这样使用:x = 7 + 2*i,后者会降低运行速度。

二、 遵守三条规则

1、尽量避免使用循环
改进这样的状况有两种方法:
a、尽量用向量化的运算来代替循环操作。


i=0;
for t = 0:.01:10
i = i+1;
y(i) = sin(t);
end
替换为:
t = 0:.01:10;
y = sin(t);
      速度将会大大加快。最常用的使用vectorizing技术的函数有:All、diff、ipermute、permute、reshapen squeeze、any、find、logical、prod、shiftdim、sub2ind、cumsum、ind2sub、ndgrid、repmat、sort、sum 等。    
     请注意matlab文档中还有这样一句补充:
“Before taking the time to vectorize your code, read the section on Performance Acceleration.You may be able to speed up your program by just as much using theMATLAB JITAccelerator instead of vectorizing.”。

b、在必须使用多重循环时下,如果两个循环执行的次数不同,则在循环的外环执行循环次数少的,内环执行循环次数多的。这样可以显著提高速度。

2、预分配矩阵空间
a、预分配矩阵空间,即事先确定变量的大小,维数。这一类的函数有zeros、ones、cell、struct、repmat等。
b、当要预分配一个非double型变量时使用repmat函数以加速,如将以下代码:
A = int8(zeros(100)); 换成:A = repmat(int8(0), 100, 100);
c、当需要扩充一个变量的大小、维数时使用repmat函数。
3、优先使用matlab内建函数
a、优先使用matlab内建函数,将耗时的循环编写进MEX-File中以获得加速。者利用matlab提供的工具将程序转化为C语言、Fortran语言。
b、使用Functions而不是Scripts 。
4、改用更有效的算法

文章最后发布于: 2015-05-08 20:56:00, 来自CSDN的迁移

参考文章

加速matlab运行的三重境界

最新文章

  1. QDEZ集训笔记【更新中】
  2. Struts2:类型转换器
  3. [DBW]一个小巧的Class方案
  4. 烂泥:KVM使用NAT联网并为VM配置iptables端口转发
  5. Flex调用java webservice
  6. 继承多态绕点 C#篇
  7. 【拓扑排序】【HDU3231】【Box Relations】
  8. osgi实战学习之路:8. Service-3之ServiceTracker
  9. ubuntu下安装myeclipse
  10. 应用CSS的page-break-after属性 实现WEB页面强制分页打印
  11. 使用ActionBar实现Tab导航
  12. localStorage学习总结
  13. navicat for mysql远程连接ubuntu服务器的mysql数据库
  14. php 将图片转成base64
  15. Linux下python2和python3共存
  16. 尝试Java,从入门到Kotlin(下)
  17. git之reset图解
  18. 【UOJ349】【WC2018】即时战略 LCT 动态点分治
  19. scoketserver模块(TCP协议 与 udp 协议)
  20. Linux:批量修改分隔符(awk、BEGIN、FS、OFS、print、tr命令)

热门文章

  1. Why you need to understand garbage collection
  2. java项目中使用ffmpeg剪辑部分视频
  3. Hash冲突的线性探测开放地址法
  4. 5G网络类型 ?
  5. HTTPS原理分析
  6. Spring 内部机制 Spring AOP
  7. Go 汇编入门
  8. Ubuntu 16.04 Roboware Turtlesim 测试
  9. Laya一个莫名其妙的报错laya.pathfinding
  10. Ubuntu16.04安装Supervisor