为什么fortran用于科学计算?

use*_*220 57 fortran

我读过Fortran仍然大量用于科学计算.对于已经大量投资Fortran的代码,这对我来说很有意义.

但是有理由将Fortran用于其他现代语言的新项目吗?与更流行的语言(C++,Java,Python,Ruby等)相比,Fortran中的语言设计决策是否更适合科学计算?例如,与我提到的其他语言相比,Fortran的特定语言功能是否允许编译器中的数值优化程度更高?

Jon*_*rsi 86

无论好坏,Fortran是唯一专门为科学数值计算而设计的主要语言.它的数组处理很好,在整个数组和切片上都有简洁的数组操作,可与matlab或numpy相媲美但超快.该语言经过精心设计,使得很难意外编写慢速代码 - 指针受到限制,以至于如果可能存在别名就会立即显而易见,作为标准示例 - 因此优化器可以在您的城镇中使用码.目前的化身有像coarray fortran这样的东西,并且在语言中内置并发和forall,允许分布式内存和共享内存并行性和矢量化.

Fortran的缺点主要是上述一个上行空间的另一面; Fortran有着悠久的历史.好处:大量的图书馆.缺点:吨历史包袱.

如果你必须进行大量的数字运算,Fortran仍然是最佳选择之一,这就是为什么世界各地超级计算中心运行的许​​多最复杂的模拟代码都写在其中的原因.但是当然,编写一个Web浏览器会是一种糟糕的,可怕的语言.对每个任务来说都是它的工具.

  • FORTRAN传统上用于科学/工程数值计算,出于惯性原因和其他任何因素,以及拥有大量专业库.像C一样,FORTRAN是一个"超级装配工",它可以让你接近金属,而不会增加大量的绒毛,使编程更容易,或者保护你自己 - 真人编程(tm).它有很长的编译器优化工作历史,但是其他语言没有理由不能使用大多数这些优化.它是在真正的语言/编译器科学之前设计的,并显示了它的年龄. (5认同)

lax*_*xxy 19

我的主要原因是很好的数组符号,以及许多其他设计决策,使编写和调试科学代码更容易.事实上它通常是相关任务(阵列操作)性能方面的最佳选择,也不会伤害:)

老实说,我不会认为大多数语言被引用为Fortran的真正竞争对手 - Java和Ruby在便利性和性能方面远远落后,而C++是一种过于复杂和棘手的语言,无法推荐给任何主要工作的人在过去的几年中,除了C++中的日常编程之外,其他任何事情都是如此.Python和numpy可能是一个选择.我个人并不是这种语言的忠实粉丝,但我知道很多人经常使用numpy并且看起来很满意.

我看到的真正的竞争不是来自这些,而是​​来自Matlab,R和类似的语言,它们提供了类似的便利,并结合了许多标准库.幸运的是,通常可以在R或Matlab中启动项目,然后在Fortran中编写性能关键部分.

  • 嗯,我不太确定你在这里提到的更好的替代方案是什么?我怀疑我们会看到java或ruby在HPC中越来越受欢迎 - 他们的目的是完全不同的.有很多网格应用程序是用fortran编写的(可能大约50%,另一半是C/C++).你觉得什么更合适?PGI加速器fortran顺便说一句擅长编程GPU,我建议它随时都可以通过CUDA实现便携性. (6认同)

Bru*_*uno 16

很少有项目是全新的项目.我不确定它是否特定于科学计算,但至少在这个领域,您倾向于基于现有(科学)模型构建您的应用程序,可能由其他团体/人员制作.无论您是否愿意,您都必须处理一些遗留代码.

Fortran是许多科学家所教授的,他们需要实现的许多库是什么.其中许多可能不是计算机科学家或IT人员,更多的计算科学家.他们的主要目标很少是计算,这是他们的科学第一.虽然大量程序员在有机会时(包括在业余时间内)倾向于学习新的编程语言或框架,但大多数科学家会利用这段时间探索有关其科学的新思路.

一位受过Fortran(或任何语言)培训并被处于类似情况的人所包围的领域专家将没有动力远离它.它不只是现在其他语言可以像Fortran语言在性能方面一样好,他们需要好:需要有一个很好的理由从你所拥有的,而希望知道的.

它在某种程度上也是一个"恶性"循环.我总是发现Java和Fortran之间的比较有点困难,仅仅是因为许多Java科学应用程序没有以Java方式编程.一些Java Grande基准测试应用程序看起来很像Fortran程序转换成C程序,复制/粘贴/调整到Java程序中(在一个方法中,将数组的长度作为数组本身旁边的额外参数传递给出一个线索,如果我记得很清楚).正因为如此,Java(例如)在科学界并没有获得很高的声誉,尽管它的表现越来越好.其结果是HPC专家和Java专家之间几乎没有重叠.即使是来自硬件供应商或库实现者,用户的需求也很少导致提供的支持很少,这反过来又阻碍了可能有兴趣转向其他语言的用户.

请注意,这并不妨碍相同(或其他)科学家将其他语言用于其他目的(例如工作流管理,数据管理,使用Matlab,Numpy等进行更快速的建模).

  • 指向“ HPC Java的当前状态”的文章的链接已失效...我认为这是同一篇文章:http://docs.huihoo.com/proactive/ProActiveJavaStatusforHPC.pdf。但是,这是从2008年开始的,我找不到最新的东西... (2认同)