caoligang 发表于 2009-8-17 21:09:07

请教高人,怎样加快下面程序的执行速度!

各位斑竹,我正在编制一个逆向求解中子动力学方程的程序,开始使用的是FORTRAN90编制的,在我的笔记本上求解2000个ρ值(反应性)的执行速度为2秒左右,后来使用labview8.6编制,执行速度为5.9秒,而我的程序中,要求这个程序执行的速度必须在1秒以下才可以,自己考虑了使用并行方式编制,不过好像不可以,已经编制了4天了,都没有得出正确的结果,特上这里来请各位大虾指教一二!不胜感激!

HHHHLLLL 发表于 2009-8-18 09:12:53

看你的程序,需要读取三个数据啊?三个文件呢?

lihanjun1999 发表于 2009-8-18 17:05:47

由于缺三个数据文件,不能运行。
不过我看了一下程序框图,直觉是你把“写入文本文件”的动作放在了循环里,这可能是最耗时的环节。建议在循环体内把数据形成2D数组带出,等出了循环体后再一次性的写入文件。

caoligang 发表于 2009-8-19 14:05:34

楼上说的有些道理,我试试看!不过不知道能不能把速度提高到1秒以内!

caoligang 发表于 2009-8-19 14:07:57

HHHHLLLL,我这次把文件传上去,你再看看

HHHHLLLL 发表于 2009-8-19 14:26:40

本帖最后由 HHHHLLLL 于 2009-8-19 14:29 编辑

没更改任何地方,在我这运行,不到1秒。若260ms。

caoligang 发表于 2009-8-19 14:28:07

lihanjun1999 ,我按照你说的,将写入文本文件的部分去掉了,然后使用性能查看工具,发现时间并没有多大的变化,并且我的程序真正执行的时候最外的FOR循环次数是2000次,执行下来基本上还是5秒多,我的笔记本是联想的Y430,配置算是不错的了,难道这种程序就需要5秒多才能完成么?静待各位大虾的回音!

mhf48 发表于 2009-8-19 14:32:26

我试了你的程序运行不到一秒,看来不是程序的问题。再换一台好些的台式机试试吧。

caoligang 发表于 2009-8-19 22:57:57

各位不好意思,我的外循环的次数更改过了,应该是2000次才对,重新发一次!

caoligang 发表于 2009-8-19 22:58:51

各位这次在看看,是否还是1秒内,我的机器运行时间为5秒多一点,你们呢,能不能做到一秒以内呢?

caoligang 发表于 2009-8-19 23:12:29

今天一整天都在研究怎么样能将程序并行处理,最后得出的结论是不行,必须实行FOR循环的嵌套才能将方程解出来,就不往这个方面努力了,后来就一直在研究怎样加快程序的执行速度,无意间看了看书,说二进制的文件读取的速度最快,我这个程序使用的是文本文件,假如改为二进制文件进行存取的话,速度是不是会快一些,不知道能快多少?

lihanjun1999 发表于 2009-8-20 10:10:20

看来你的电脑比我的快多了,我要用时8.9秒。
仔细看了一下,发现最内层的循环体中有“字符串截取”和“字符串至数值转换”函数,这可是耗时大户。小小试验了一把,把这两个函数框进“禁用框图”,结果用时降到了2秒。如图:
所以建议在整个循环开始之前,把文本文件里的数据先行处理,转换为双精度数据数组,再进入循环。

caoligang 发表于 2009-8-20 21:35:57

楼上的哥们的确厉害,我按照你的说法将文本先转成了双精度数组,然后进入循环,果然时间降到了1.2秒,快了很多,多谢多谢!我又将程序的数据文件做了一定的修改,将2000次外循环使用每5个点的数据求和然后取平均的方式降到了400次外循环,精度没有下降,这次只用了62毫秒,速度极大的提高了,已经能满足我的程序的要求了,多谢楼上的哥们的大力帮助!多谢了!

tester 发表于 2009-8-20 21:38:58

发现牛人真多
页: [1]
查看完整版本: 请教高人,怎样加快下面程序的执行速度!