实验室经常需要使用到matlab,for循环非常慢,自己找了一些matlab中for循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是不可避免需要遇到的问题~。
方法1:循环多不要紧,要紧的是循环嵌套得太多,要解决这个问题,需要从根本上找原因,用更好的数据结构和算法,从根源上减少对于循环的需求
方法2:将循环次数多的放在里面,循环次数少的放在外面做大循环
方法3:for循环中少用if——else if判断,用switch——case,效率更高
方法4:多线程并发替代单循环么,尽可能利用CPU
for(int i = 0; i < 100; ++i)
{
a[i] = xxx;
}
优化:
for(int i = 0; i < 25; i += 4)
{
a[i] = xxx;
a[i + 1] = xxx;
a[i + 2] = xxx;
a[i + 3] = xxx;
}
减少循环次数,而且还能意外增加指令级的并行运算几率,其次,用多线程,最简单的就是openmp。要是对数据的处理,就用SSE指令什么的。
这样下来。整个程序不不止快那么一点点
方法5:结合具体的循环,利用时间和空间的相互转换,也就是用空间换时间
方法6:vectorization(向量化)处理后,效率也有很大提高
方法7:最基本的方面,别在窗口中显示矩阵,每条语句的结尾加分号
方法8:找一台性能好的电脑,用服务器跑那就更好了!
在高性能计算领域,优化这种涉及到一些算法的东西不可能随随便便地告诉别人,尤其是双线性插值优化,在65nm的Core2 Duo上优化度超过300%(别人说的,我也不会~)。所以优化不能一拍脑袋就做,需要结合具体的实际情况,找到优化的方法。