使用MATLAB Profiler提升程序運行的效率

很多同學在研究和學習的過程中都會經常使用 MATLAB。很多時候當編好一個程序之後,我們發現程序運行的效率達不到預想的要求。盲目的去找程序的缺陷往往既花時間也沒有什麼太大效果。這裏我想告訴大家 MATLAB 很重要的功能 – Profiler – 能夠幫助你很快找到程序的問題,然後可以很快的提高程序的效率。

當你寫完一個程序之後,首先要試着運行。試着運行的時候有兩個目的,一個是驗證是否正確(這個不在我們討論的範圍),另外就是要看一下效率是否滿意。對於後者你要做的是從主界面選擇Desktop – Profiler. (見下圖)在這裏插入圖片描述然後從profiler 運行程序(運行的指令和你在這個主界面想運行程序的指令一樣, 可以有參數也可以沒參數)在這裏插入圖片描述Profiler運行的結果也會在主界面顯示。其結果與正常的運行的都一樣,但是它可以給你顯示出運行中每一行所執行的次數和花費的時間(見下圖)。在這裏插入圖片描述然後你需要重點做的是仔細研究那些花費時間很長的步驟。很多情況下,整個程序裏的某一行或者某兩行會佔據絕大多數的計算時間,而通常那幾行都是因爲程序寫的不好所以效率很低(通常容易出現的問題是,1)重複計算一些可以只計算一次的事情,比如每次循環計算同一個normcdf,而實際你可以事先算好儲存在一個數組, 2) 使用太多層的for循環,而實際可以用矩陣計算來代替,3)可以把一些計算有序的結合起來,比如當計算某些乘法的順序時候,應該刻意安排一些需要計算少的順序)。在調試中,一般只需要focus在這幾行比較花時間的地方,其他的行都可以忽略。

在真正執行大規模的運行之前(當然極爲小的程序就無所謂了),我建議先保證佔據超過20%計算時間的行的效率已經都達到最優了。(注意當你改完一行之後,可能那行的時間一下就變成接近於0了,然後你應該接着看新的最佔據計算時間的行,直到最重要的行都已經最優化爲止。)這樣會事半功倍。

多數時候,當用MATLAB比較熟練以後,用profiler分析之後立刻就知道自己哪兒沒寫好(很多時候寫的時候就知道,但是不知道會有多大影響,就先按照比較好寫的方法寫)。總的來說,這是一個非常實用的工具,這篇文章的目的就是希望沒有使用過的同學能夠知道,會大大提高你們使用MATLAB的效率。

注:雖然此文是針對MATLAB的Profiler,但對於其他科學計算語言(如Python),也有類似的功能,使用好類似的工具可以幫助大家很快的提升科學計算的程序水平。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章