一.出现的问题/现象:
近期调试程序时,发现同一段matlab程序在配置相似的电脑上运行时间相差5倍以上:
右图电脑的配置和左图电脑配置相似,只是左图内存更大(左图电脑内存为16GB,右图为8GB),但左图程序运行速度不仅没有更快,反而比右图慢了5倍以上,便开始分析是什么原因导致这一现象。
二.查阅相关资料,分析可能原因:
影响其运行时间的因素有很多,首先想到电脑硬件配置不同,可是两台电脑只有内存不同,其他基本相同,便寻找其他可能原因,想到在嵌入式板级编程中影响程序编译时间的因素有编译优先级等因素影响,便开始把两边matlab参数设置成一样。
三.实验验证:
matlab中利用tic; toc; 函数可以测量一段程序的运行时间,用法:
1 tic; 2 你想测量的程序; 3 toc;
这里为了结果可靠性更高,取十次实验的时间和再平均后的值作为一次实验的结果,代码如下:
1 for mmm = 1 : 10 2 tic; 3 你想测量的程序; 4 end 5 timeTotal = toc; %总时间 6 timeAve = timeTotal/ length(mmm) %平均时间
在仅控制了matlab版本、文件目录、matlab设置参数相同后,得到的运行时间基本相同:
图1比图2的代码运行时间仍然快一些,这里猜测可能是电脑运行内存更大(左图为16GB、右图为8GB)、系统当前运行的软件不同致使资源占用率不同所影响。
四.得出结论:
1.matlab程序运行的速度受到如下因素影响:
(1)matlab版本(有较大影响,以本篇博客出现的现象为例);
(2)电脑配置(CPU主频、内存大小、计算机位数等);
(3)电脑当前运行状态(资源占用率等,因为电脑每时每刻的资源占用率都不一样,因此这一点为测量matlab程序运行时间带来较大随机性);
(4)matlab文件和所调用文件的目录深度;
(5)matlab运行的程序复杂度(循环的次数,开辟的空间大小,是否有画图以及是几维的画图等);
(6)matlab自身的设置(如默认的变量长度和精度等设置不同会导致开辟的内存空间大小不同);
(7)每次运行程序是否预分配内存;
(8)是否是第一次运行(和第七条有相似的道理,第二次运行程序可以使用第一次已经开辟的内存空间;很多人把这一点理解为matlab的“记忆性”);
2.同一段matlab程序在同一机器上每次运行时间亦不同:
(1)第一次运行时间较长;
(2)非首次运行时间主要受到电脑运行状态影响。
参考: