作者potter1529 (宋代才女唱元曲)
看板MATLAB
标题[讨论] 请问如何debug提升运算效能
时间Fri Dec 9 05:11:52 2016
想跟各位大大请教一下 我目前写的程式实在跑太久了 必须得提升运算时间
想说多少介绍一下
这是一个通讯领域的程式
目前这个程式大约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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1481231515.A.665.html
※ 编辑: potter1529 (1.161.58.223), 12/09/2016 05:21:17
1F:推 sunev: profile 12/09 06:19
2F:推 YoursEver: 回圈请试着改成parfor能处理的格式,记得开matlabpool 12/09 10:22
3F:推 cerebellum: 先找出回圈最多的地方着手 改成矩阵式运算就会快很多 12/09 23:25
4F:→ cerebellum: 另一个方法就是改成多台电脑一起跑 12/09 23:33
5F:→ cerebellum: parfor不是所有回圈都能加速 有些功能内建多核运算的 12/09 23:35
6F:→ cerebellum: 用parfor就不会加快太多 12/09 23:35
7F:推 hoshinouta: 我之前也有类似经验,用显卡试试,但相关文献不多 12/13 16:06
8F:推 yea107: tic;toc; 12/15 08:14
9F:推 yea107: 先找出瓶颈在哪边 12/15 08:16
10F:推 s12788: 先看一下matlab对code有没有建议的修改,例如回圈内重配矩 12/17 02:42
11F:→ s12788: 阵大小之类的或是有没有很常从array里抓subarray出来,这 12/17 02:42
12F:→ s12788: 对matlab来说也是重配矩阵,另外楼上大大有提到profile, 12/17 02:43
13F:→ s12788: 那个超好用,在执行时也可以开工作管理员看CPU有没有跑满 12/17 02:43
14F:→ s12788: , 12/17 02:43
15F:推 sunev: 嗯,新手有时会不小心用光记忆体,时间都花在硬碟读写上。 12/18 20:21
16F:推 sppmg: 记得fft用显卡加速会差很多。 12/22 09:55
17F:→ sppmg: 印象中是设一个gpu array,存进去後就与一般无异 F1看看吧 12/22 09:56