今天,我正在阅读用FORTRAN 77编写的一些非常流行的数字库中的代码,比如QUADPACK (上一次更新于1987年),我想知道是否有任何理由不重写Fortran 90中的那些库,除了它将带来的大量工作之外,因为Fortran 90给语言带来了很大的改进,包括自由形式的源代码,更好的控制结构,以便被遗忘、矢量化、接口等等。
是因为FORTRAN 77编译器产生了更多的优化代码,也许它更适合并行执行?注意,我甚至没有谈论Fortran 2003,例如,它只有8年的历史:我说的是Fortran 90,所以我假设它已经足够广泛,编译器已经准备好了。反正我和这个行业没有联系。
编辑: janneb是对的: LAPACK实际上是用Fortran 90编写的。
发布于 2012-01-02 22:53:58
嗯,就像"pst“提到的,”它会带来大量的工作“是一个相当重要的原因。
还有一些小问题:
发布于 2012-01-02 22:56:33
没有理由投入大量的工作来(也许)改进一些有用的东西。应该指出,尽管Fortran 90引入了许多新特性,但它并没有改变语言。记住,Fortran 90标准是向后兼容的FORTRAN 77。现代编译器也可以优化FORTRAN 77代码。Fortan 90中引入的一些特性(例如指针)会妨碍效率,如果您关心执行时间,例如在HPC中,就应该避免这些特性。
所以这不会有什么区别。对于现代编译器来说,写得很好的FORTAN 77也同样可以优化--它就像一块没有糖霜的蛋糕。在这里,在Fortran 90和更高版本的情况下,糖霜看起来比它的味道更好-这是一个方便的程序员,但不一定提高程序的效率。
发布于 2012-01-03 20:57:00
Fortran 77程序可能更快的一个主要原因是:
分配的数组(Fortran 90)比在编译时声明的数组慢得多.两者在记忆中的位置并不相同。这是Fortran中的堆栈与堆内存管理。
尽管如此,Fortran 90+具有快速的“全在块”数组操作。我是gcc-fortran (gfortran)的忠实粉丝,没有任何编译选项,可以选择大小为N的数组a。
a = a + 1比
do i = 1 , N
a(i) = a(i) + 1
end do这个工作台对我来说,在我的机器上,在没有优化选项的gfortran上,也没有任何关于这是专业基准的评论。
分配“问题”(这不是一个问题,而是一个特性)不是体系结构、编译器或任何与Fortran标准相关的东西。
https://stackoverflow.com/questions/8705972
复制相似问题