24小时热门版块排行榜    

查看: 2176  |  回复: 13

duhb655

金虫 (著名写手)

引用回帖:
10楼: Originally posted by jerkwin at 2014-03-27 22:31:28
运行了下你的程序, 确实很慢
在不改代码的情况下最简单的加速方法就是使用多核
把for循环改为parfor
还有, 输出不要写xls文件, 直接写文本文件
不是很了解原理, 不能估计改为fortran能加速多少
而且改成fortra ...

谢谢,我是PARFOR运行的,8核,一个站7-8分钟,我不用EXCEL也挺慢,我想了想,应该主要还是里面的循环的事,循环太大太多,MATLAB优势在于矩阵,FORTRAN优势就在于循环,我想FORTRAN应该能加速吧,??
11楼2014-03-27 22:44:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

引用回帖:
10楼: Originally posted by jerkwin at 2014-03-27 22:31:28
运行了下你的程序, 确实很慢
在不改代码的情况下最简单的加速方法就是使用多核
把for循环改为parfor
还有, 输出不要写xls文件, 直接写文本文件
不是很了解原理, 不能估计改为fortran能加速多少
而且改成fortra ...

写XLS文件慢主要是因为每写一次就要打开EXCEL程序并关了EXEL程序,这是XLS慢的主要原因,特别是读或写的EXCEL表多或表内SHEET多时,这个慢的效果就很明显了,不过有专们解决多个SHEET这种慢的程序,如果你要的话可以给你。FORTRAN不方便的一点就在于您说的,很多都得自己写,不知道谁能帮帮我啊。
12楼2014-03-28 00:19:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jerkwin

专家顾问 (正式写手)

【答案】应助回帖

看你还算好学, 也很有礼貌
可以站内联系下我
13楼2014-03-28 07:28:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

duhb655

金虫 (著名写手)

★ ★ ★ ★ ★
nono2009: 金币+5, 鼓励交流 2014-04-04 07:05:23
感谢jerkwin老师.
现在情况是这样: 我不再把程序改成FORTRAN语言了, 还是用MATLAB. 那天看到jerkwin老师说得优化,我以前觉得我的程序不能再优化了,但实际上我错了,前天我再仔细研究我的程序,最可能优化的地方只有在了程序中,突然想到一个事,就是MATLAB函数库的调用。因为我的for循环比较多,子程序是100左右*2000左右的套嵌for循环,内循环调用了polyfit和polyval两个程序。我找到polyfit这个程序,把它改了改,只有四五行就能满足我这个程序里的polyfit要求,因此不再调用polyfit函数,这样一来,惊喜!提速4-5倍!今天上午和jerkwin老师语音,又提到能矩阵运行就矩阵运行,能单循环就单循环。我想了想,矩阵运行可能实现不了,就把子程序的两层套嵌for循环想办法改成了一个循环,这样以来,又稍微提速了些。现在总的来说提速了7-8倍吧,所以就不再改fortran了。这也总结了两点:
1,在matlab里,如果套嵌循环太多使运行速度太慢的话,尽量想办法减少套嵌次数;
2,觉得很重要的一点(当然是对我这样的菜鸟来说的),是这次偶然发现的,当循环太慢时,多注意循环中直接调用的matlab函数。matlab函数库里的函数是针对所以用户的大众函数,有很多条件,有时循环多了就会导致程序很慢,这时就去分析你调用的函数,在满足你自己运算的条件下把它改得简单点,说不定能很明显地提速。
感谢楼上几位朋友。jerkwin老师就2400分了,其他100分。谢谢。
14楼2014-03-29 16:08:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 duhb655 的主题更新
信息提示
请填处理意见