首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FORTRAN 77程序比Fortran 90程序快吗?

FORTRAN 77程序比Fortran 90程序快吗?
EN

Stack Overflow用户
提问于 2012-01-02 22:29:02
回答 4查看 5.7K关注 0票数 7

今天,我正在阅读用FORTRAN 77编写的一些非常流行的数字库中的代码,比如QUADPACK (上一次更新于1987年),我想知道是否有任何理由不重写Fortran 90中的那些库,除了它将带来的大量工作之外,因为Fortran 90给语言带来了很大的改进,包括自由形式的源代码,更好的控制结构,以便被遗忘、矢量化、接口等等。

是因为FORTRAN 77编译器产生了更多的优化代码,也许它更适合并行执行?注意,我甚至没有谈论Fortran 2003,例如,它只有8年的历史:我说的是Fortran 90,所以我假设它已经足够广泛,编译器已经准备好了。反正我和这个行业没有联系。

编辑: janneb是对的: LAPACK实际上是用Fortran 90编写的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-02 22:53:58

嗯,就像"pst“提到的,”它会带来大量的工作“是一个相当重要的原因。

还有一些小问题:

  • 现在,LAPACK是Fortran 90,也就是说最新版本不再使用F77编译器进行编译。话虽如此,它远不是重写,只有少数几个东西被改变了。
  • 您提到的大多数F90特性使编写健壮的程序变得更容易、更快,没有必要使生成的程序更快。
  • 不久以前,没有免费的F90编译器(很多人使用g77!),因此对于LAPACK这样被广泛使用的库来说,不使用F90特性可能是一个有意识的决定。
  • F77编译器通常不会产生比F90编译器更快的代码。如果不是因为任何其他原因,那么是因为它可能已经过时,并且不能为最新的CPU进行优化。现代的Fortran编译器从F77创建的代码可能比使用指针等类似的F90程序创建的代码更快,但这在很大程度上依赖于所讨论的程序(例如,使用指针和更先进的数据结构可能允许使用更好的算法,从而使F90程序能够更快地生成结果,尽管它可能在较低的CPU算术单元平均利用率下执行)。
  • 如果您这么说是指F90+数组语法,那么矢量化主要是程序员的一个方便问题,而不是允许更快的代码。合格的编译器也会将等效的DO循环矢量化。
票数 18
EN

Stack Overflow用户

发布于 2012-01-02 22:56:33

没有理由投入大量的工作来(也许)改进一些有用的东西。应该指出,尽管Fortran 90引入了许多新特性,但它并没有改变语言。记住,Fortran 90标准是向后兼容的FORTRAN 77。现代编译器也可以优化FORTRAN 77代码。Fortan 90中引入的一些特性(例如指针)会妨碍效率,如果您关心执行时间,例如在HPC中,就应该避免这些特性。

所以这不会有什么区别。对于现代编译器来说,写得很好的FORTAN 77也同样可以优化--它就像一块没有糖霜的蛋糕。在这里,在Fortran 90和更高版本的情况下,糖霜看起来比它的味道更好-这是一个方便的程序员,但不一定提高程序的效率。

票数 6
EN

Stack Overflow用户

发布于 2012-01-03 20:57:00

Fortran 77程序可能更快的一个主要原因是:

分配的数组(Fortran 90)比在编译时声明的数组慢得多.两者在记忆中的位置并不相同。这是Fortran中的堆栈与堆内存管理。

例如,请看这里

尽管如此,Fortran 90+具有快速的“全在块”数组操作。我是gcc-fortran (gfortran)的忠实粉丝,没有任何编译选项,可以选择大小为N的数组a。

代码语言:javascript
复制
a = a + 1

代码语言:javascript
复制
do i = 1 , N
  a(i) = a(i) + 1
end do

这个工作台对我来说,在我的机器上,在没有优化选项的gfortran上,也没有任何关于这是专业基准的评论。

分配“问题”(这不是一个问题,而是一个特性)不是体系结构、编译器或任何与Fortran标准相关的东西。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8705972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档