请教高人,怎样加快下面程序的执行速度!
各位斑竹,我正在编制一个逆向求解中子动力学方程的程序,开始使用的是FORTRAN90编制的,在我的笔记本上求解2000个ρ值(反应性)的执行速度为2秒左右,后来使用labview8.6编制,执行速度为5.9秒,而我的程序中,要求这个程序执行的速度必须在1秒以下才可以,自己考虑了使用并行方式编制,不过好像不可以,已经编制了4天了,都没有得出正确的结果,特上这里来请各位大虾指教一二!不胜感激! 看你的程序,需要读取三个数据啊?三个文件呢? 由于缺三个数据文件,不能运行。不过我看了一下程序框图,直觉是你把“写入文本文件”的动作放在了循环里,这可能是最耗时的环节。建议在循环体内把数据形成2D数组带出,等出了循环体后再一次性的写入文件。 楼上说的有些道理,我试试看!不过不知道能不能把速度提高到1秒以内! HHHHLLLL,我这次把文件传上去,你再看看 本帖最后由 HHHHLLLL 于 2009-8-19 14:29 编辑
没更改任何地方,在我这运行,不到1秒。若260ms。 lihanjun1999 ,我按照你说的,将写入文本文件的部分去掉了,然后使用性能查看工具,发现时间并没有多大的变化,并且我的程序真正执行的时候最外的FOR循环次数是2000次,执行下来基本上还是5秒多,我的笔记本是联想的Y430,配置算是不错的了,难道这种程序就需要5秒多才能完成么?静待各位大虾的回音! 我试了你的程序运行不到一秒,看来不是程序的问题。再换一台好些的台式机试试吧。 各位不好意思,我的外循环的次数更改过了,应该是2000次才对,重新发一次! 各位这次在看看,是否还是1秒内,我的机器运行时间为5秒多一点,你们呢,能不能做到一秒以内呢? 今天一整天都在研究怎么样能将程序并行处理,最后得出的结论是不行,必须实行FOR循环的嵌套才能将方程解出来,就不往这个方面努力了,后来就一直在研究怎样加快程序的执行速度,无意间看了看书,说二进制的文件读取的速度最快,我这个程序使用的是文本文件,假如改为二进制文件进行存取的话,速度是不是会快一些,不知道能快多少? 看来你的电脑比我的快多了,我要用时8.9秒。
仔细看了一下,发现最内层的循环体中有“字符串截取”和“字符串至数值转换”函数,这可是耗时大户。小小试验了一把,把这两个函数框进“禁用框图”,结果用时降到了2秒。如图:
所以建议在整个循环开始之前,把文本文件里的数据先行处理,转换为双精度数据数组,再进入循环。 楼上的哥们的确厉害,我按照你的说法将文本先转成了双精度数组,然后进入循环,果然时间降到了1.2秒,快了很多,多谢多谢!我又将程序的数据文件做了一定的修改,将2000次外循环使用每5个点的数据求和然后取平均的方式降到了400次外循环,精度没有下降,这次只用了62毫秒,速度极大的提高了,已经能满足我的程序的要求了,多谢楼上的哥们的大力帮助!多谢了! 发现牛人真多
页:
[1]