计算化学公社

标题: fortran中的递归程序耗时吗? [打印本页]

作者
Author:
an2000    时间: 2024-4-9 10:34
标题: fortran中的递归程序耗时吗?
目前在代码中写了一个递归子程序,运行起来非常耗时,请问大家,是否有必要将该递归子程序改成循环?谢谢!
作者
Author:
lyj714    时间: 2024-4-9 12:06
这个自己测试不就好了。算法中,递归本身就是反复开栈的过程,如果你写的程序递归深度很大,自然耗时间。
作者
Author:
an2000    时间: 2024-4-9 15:15
lyj714 发表于 2024-4-9 12:06
这个自己测试不就好了。算法中,递归本身就是反复开栈的过程,如果你写的程序递归深度很大,自然耗时间。

好的谢谢
作者
Author:
node101    时间: 2024-7-28 22:15
科学计算里非必要不要用递归吧
作者
Author:
an2000    时间: 2024-9-4 19:50
node101 发表于 2024-7-28 22:15
科学计算里非必要不要用递归吧

好滴谢谢
作者
Author:
Daniel_Arndt    时间: 2024-12-9 10:35
递归改循环的话,理论上可以,但一般这么做的都是偏计算机专业的人士。

作为化学专业的话,有两个较短时间内适用的方案,一个是用OpenMP的task来加速递归,既然你的程序是用Fortran写的,肯定是可以用OpenMP在多核处理器上加速的。美国的ACCESS(之前叫XSEDE)的OpenMP workshop里会提到这一点,具体就是看CMU的并行计算专家John Urbanic写的教程(他就是ACCESS的OpenMP workshop的授课者,他的这些slides就是授课时用的) https://www.psc.edu/resources/training/openmp-workshop/ 中的Advanced OpenMP一节。如果觉得用OpenMP的task进行调度太难的话(John Urbanic本人也说过绝大多数情况下用OpenMP加速一下for循环就可满足要求,用到OpenMP的task的情况往往是为线性代数库、numpy贡献代码),那就只能用第二个方案,就是在科学计算中尽量避免写出用递归的代码。
作者
Author:
an2000    时间: 2025-1-7 09:49
Daniel_Arndt 发表于 2024-12-9 10:35
递归改循环的话,理论上可以,但一般这么做的都是偏计算机专业的人士。

作为化学专业的话,有两个较短时 ...

太感谢了!谢谢您给出的建议。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3