[討論] 請問matlab如何debug提升運算效能

看板MATLAB作者 (宋代才女唱元曲)時間8年前 (2016/12/09 05:11), 8年前編輯推噓9(908)
留言17則, 7人參與, 最新討論串1/1
想跟各位大大請教一下 我目前寫的程式實在跑太久了 必須得提升運算時間 想說多少介紹一下 這是一個通訊領域的程式 目前這個程式大約600行左右 大概可以分成12個部分 其中大概有10個部分用到迴圈 而且幾乎是迴圈中有迴圈 而且每個部分都有call function,這些我自己寫的function中可能又再有迴圈或幹嘛的 而以上所提的 還得再加入大量使用的matlab內建函式 例如fft這種超耗效能的內建函式使用次數比加法還多次 於是這樣子搞下來 一次陽春的程式 得要跑1.5秒左右 (內建timer計時) 而我一張圖要跑42次才能畫得出來 於是一張圖等於1分鐘 而通常一次得畫4~6張圖比較才有意義 所以等於程式每次執行都是4分鐘起跳 但由於這是個模擬程式 "一次"其實是個充滿變數的環境 意義不大 得要 "大量運算後平均"才能比較我的演算法效能 所謂的大量運算就是要把一開始那個1.5秒 跑個可能3000次到30000次以後平均 就以3000次來說好了,變成說跑一張圖要52.5個小時,四張圖就是8.75天 .....30000次我根本想都不敢想 跑出來人家博士都唸完了 因為這個大程式的構築是目的取向 因此我寫的時候完全沒有去想效能要怎樣 (因為程式沒寫對 什麼都別談) 而到現在得要開始大量運算後平均 才發現這是個嚴重的問題 我想要debug去尋找程式中各種耗效能的地方 以換寫法的方式去提升效能 請問matlab有沒有辦法step by step去看每一行或是每幾行執行了多少時間 讓我有辦法去找出那些程式中特別耗效能的地方 目前程式太大太雜太亂 知道哪裡算最久 才可能去改寫那些地方 希望能一次起碼降到0.1秒都好啊........... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.58.223 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1481231515.A.665.html ※ 編輯: potter1529 (1.161.58.223), 12/09/2016 05:21:17

12/09 06:19, , 1F
profile
12/09 06:19, 1F

12/09 10:22, , 2F
迴圈請試著改成parfor能處理的格式,記得開matlabpool
12/09 10:22, 2F

12/09 23:25, , 3F
先找出迴圈最多的地方著手 改成矩陣式運算就會快很多
12/09 23:25, 3F

12/09 23:33, , 4F
另一個方法就是改成多台電腦一起跑
12/09 23:33, 4F

12/09 23:35, , 5F
parfor不是所有迴圈都能加速 有些功能內建多核運算的
12/09 23:35, 5F

12/09 23:35, , 6F
用parfor就不會加快太多
12/09 23:35, 6F

12/13 16:06, , 7F
我之前也有類似經驗,用顯卡試試,但相關文獻不多
12/13 16:06, 7F

12/15 08:14, , 8F
tic;toc;
12/15 08:14, 8F

12/15 08:16, , 9F
先找出瓶頸在哪邊
12/15 08:16, 9F

12/17 02:42, , 10F
先看一下matlab對code有沒有建議的修改,例如迴圈內重配矩
12/17 02:42, 10F

12/17 02:42, , 11F
陣大小之類的或是有沒有很常從array裡抓subarray出來,這
12/17 02:42, 11F

12/17 02:43, , 12F
對matlab來說也是重配矩陣,另外樓上大大有提到profile,
12/17 02:43, 12F

12/17 02:43, , 13F
那個超好用,在執行時也可以開工作管理員看CPU有沒有跑滿
12/17 02:43, 13F

12/17 02:43, , 14F
12/17 02:43, 14F

12/18 20:21, , 15F
嗯,新手有時會不小心用光記憶體,時間都花在硬碟讀寫上。
12/18 20:21, 15F

12/22 09:55, , 16F
記得fft用顯卡加速會差很多。
12/22 09:55, 16F

12/22 09:56, , 17F
印象中是設一個gpu array,存進去後就與一般無異 F1看看吧
12/22 09:56, 17F
文章代碼(AID): #1OISoRPb (MATLAB)
文章代碼(AID): #1OISoRPb (MATLAB)