一.出現的問題/現象:
近期調試程序時,發現同一段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)非首次運行時間主要受到電腦運行狀態影響。
參考:
