Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么fortran用于科学计算?_Fortran - Fatal编程技术网

为什么fortran用于科学计算?

为什么fortran用于科学计算?,fortran,Fortran,我读到Fortran仍然大量用于科学计算。对于已经在Fortran中投入了大量资金的代码来说,这对我来说是有意义的 但是,在一个新的项目中使用Fortran而不是其他现代语言有什么理由吗?与更流行的语言(C++、Java、Python、Ruby等)相比,Fortran中是否有语言设计决策使其更适合于科学计算?例如,与我提到的其他语言相比,Fortran是否有一些特定的语言功能可以使编译器中的数值优化达到更高的程度?据我所知,有些库是其算法的一些最有效的实现,这使得Fortran在这类工作中很受欢

我读到Fortran仍然大量用于科学计算。对于已经在Fortran中投入了大量资金的代码来说,这对我来说是有意义的


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

据我所知,有些库是其算法的一些最有效的实现,这使得Fortran在这类工作中很受欢迎,尽管该语言有局限性。

一个原因是数组是如何构造的。与大多数其他语言不同,它们是专业的。这为他们的计算提供了更快的计算速度。

Fortran是唯一一种专门为科学数值计算设计的主要语言。它的数组处理很好,在整个数组和切片上都有简洁的数组操作,与matlab或numpy相当,但速度非常快。该语言经过精心设计,使得无意中编写速度较慢的代码变得非常困难——指针的限制方式是,如果出现别名(如标准示例所示),就可以立即发现,因此优化器可以对代码进行优化。目前的版本有coarray fortran之类的东西,并且在语言中内置了并发和forall,允许分布式内存和共享内存并行,以及矢量化

Fortran的缺点主要是上面提到的优点之一的反面;Fortran有着悠久的历史。好处:大量的大型图书馆。负面影响:成吨的历史包袱


如果你必须做大量的数字运算,Fortran仍然是首选之一,这就是为什么世界各地超级计算中心运行的许多最复杂的模拟代码都是用它编写的。但当然,用它来编写web浏览器将是一种非常糟糕的语言。每个任务都有自己的工具。

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

Fortran是许多科学家学习的工具,也是他们所需要的许多库的实现工具。他们中的一些人可能不是计算机科学家或IT人员,更多的是计算科学家。他们的主要目标很少是计算,这是他们的科学第一。 尽管很多程序员在有机会(包括在业余时间)时都有学习新编程语言或框架的倾向,但大多数科学家都会利用这段时间探索有关他们科学的新想法

一个受过Fortran(或任何语言)培训的领域专家,周围都是处于类似情况的人,他没有动力离开它。 这不仅仅是因为现在其他语言在性能上可以和Fortran一样好,它们还需要更好:需要有一个很好的理由来摆脱你所拥有和知道的东西

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


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

对我来说,主要原因是漂亮的数组表示法,以及许多其他设计决策,使编写和调试科学代码更容易。事实上,就相关任务(阵列操作)的性能而言,它通常是最佳选择,这一点也不会有任何影响:)

诚然,我不认为大多数语言被认为是FORTRAN的真正竞争者——java和Ruby在便利性和性能方面远远落后,而C++ C++是一种过于复杂和复杂的语言,它可以推荐给任何在过去几年中主要工作都是C++中的日常编程之外的人。不过,Python和numpy可能是一种选择。我个人并不十分喜欢这种语言,但我认识一些人,他们经常使用numpy,似乎对它很满意


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

切换索引顺序会比切换到另一种语言更容易吗?@jheld-为什么你认为现在这是一种非常糟糕的语言?我不明白为什么索引顺序会对性能产生影响。。。如果您选择了正确的算法