gpt4 book ai didi

fortran - 现代时代学习 FORTRAN

转载 作者:行者123 更新时间:2023-12-03 05:20:11 25 4
gpt4 key购买 nike

我最近开始维护大量科学计算密集型的 FORTRAN 代码。尽管有谷歌和两本入门级书籍,但我很难掌握四十年前语言的所有细节,例如细微差别。该代码充满了“性能增强改进”。有人有任何关于将 FORTRAN 优化为 CS 101 级别的指南或实用建议吗?有人知道 FORTRAN 代码优化是如何操作的吗?是否有任何典型的 FORTRAN“陷阱”对于接管 FORTRAN 77/90 代码库的 Java/C++/.NET 开发人员来说可能不会出现?

最佳答案

你必须“感觉”一下程序员过去必须做的事情。我使用的绝大多数代码都比我年龄大,并且在我 parent 上高中时的"new"机器上运行。

我遇到的常见的损害可读性的 FORTRAN 主义是:

  • 公共(public) block
  • 隐式变量
  • 两个或三个带有共享 CONTINUE 语句的 DO 循环
  • 用 GOTO 代替 DO 循环
  • 算术 IF 语句
  • 计算的 GOTO
  • 某些公共(public) block 中的等价 REAL/INTEGER/other

解决这些问题的策略包括:

  1. 获取Spag / plusFORT ,物有所值,它会自动解决很多问题并且没有 Bug(tm)
  2. 如果可能,请迁移到 Fortran 90,如果不可能,请迁移到自由格式的 Fortran 77
  3. 将 IMPLICIT NONE 添加到每个子例程中,然后修复每个编译错误,虽然耗时但最终是必要的,有些程序可以自动为您执行此操作(或者您可以编写脚本)
  4. 将所有常见 block 移至模块,轻松实现,值得
  5. 将算术 IF 语句转换为 IF..ELSEIF..ELSE block
  6. 将计算出的 GOTO 转换为 SELECT CASE block
  7. 将所有 DO 循环转换为较新的 F90 语法

    myloop: do ii = 1, nloops
    ! do something
    enddo myloop
  8. 将等效的公共(public) block 成员转换为模块中分配的可分配内存,或者转换为它们的真实字符例程(如果 Hollerith 存储在 REAL 中)

如果您对如何完成一些可读性任务有更具体的问题,我可以提供建议。我有一个包含数十万行 Fortran 代码的代码库,该代码库是我在 40 年间编写的,在某种程度上是我负责的,因此我可能遇到过您可能发现的任何“问题”。

关于fortran - 现代时代学习 FORTRAN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com