计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1169|回复 Reply: 6
打印 Print 上一主题 Last thread 下一主题 Next thread

[Fortran] fortran中的递归程序耗时吗?

[复制链接 Copy URL]

8

帖子

0

威望

408

eV
积分
416

Level 3 能力者

目前在代码中写了一个递归子程序,运行起来非常耗时,请问大家,是否有必要将该递归子程序改成循环?谢谢!

308

帖子

2

威望

3557

eV
积分
3905

Level 5 (御坂)

2#
发表于 Post on 2024-4-9 12:06:25 | 只看该作者 Only view this author
这个自己测试不就好了。算法中,递归本身就是反复开栈的过程,如果你写的程序递归深度很大,自然耗时间。

8

帖子

0

威望

408

eV
积分
416

Level 3 能力者

3#
 楼主 Author| 发表于 Post on 2024-4-9 15:15:24 | 只看该作者 Only view this author
lyj714 发表于 2024-4-9 12:06
这个自己测试不就好了。算法中,递归本身就是反复开栈的过程,如果你写的程序递归深度很大,自然耗时间。

好的谢谢

12

帖子

0

威望

73

eV
积分
85

Level 2 能力者

4#
发表于 Post on 2024-7-28 22:15:25 | 只看该作者 Only view this author
科学计算里非必要不要用递归吧

8

帖子

0

威望

408

eV
积分
416

Level 3 能力者

5#
 楼主 Author| 发表于 Post on 2024-9-4 19:50:30 | 只看该作者 Only view this author
node101 发表于 2024-7-28 22:15
科学计算里非必要不要用递归吧

好滴谢谢

465

帖子

1

威望

2318

eV
积分
2803

Level 5 (御坂)

6#
发表于 Post on 2024-12-9 10:35:35 | 只看该作者 Only view this author
递归改循环的话,理论上可以,但一般这么做的都是偏计算机专业的人士。

作为化学专业的话,有两个较短时间内适用的方案,一个是用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贡献代码),那就只能用第二个方案,就是在科学计算中尽量避免写出用递归的代码。

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
TerminSong + 3 学到了

查看全部评分 View all ratings

8

帖子

0

威望

408

eV
积分
416

Level 3 能力者

7#
 楼主 Author| 发表于 Post on 2025-1-7 09:49:51 | 只看该作者 Only view this author
Daniel_Arndt 发表于 2024-12-9 10:35
递归改循环的话,理论上可以,但一般这么做的都是偏计算机专业的人士。

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

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

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-13 05:48 , Processed in 0.167986 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list