9
\ begingroup美元

亲爱的地球江南体育网页版科学社区,

我寻求一个现代化大型Fortran语言项目,与地理空间NetCDF文件。这种语言的要求包括:

  • 坚如磐石的NetCDF图书馆(我们不想重新发明轮子)。
  • 优秀的支持向量和矩阵(如通过操作符重载或类似的东西)。
  • 本机性能是必要的(编译或jit编译)。
  • 必须是开源的。
  • 理想情况下,简单的绑定和Fortran(不是一个严格的要求)。

Python+numpy不是一个真正的可选项,因为定制数据与本机的性能。即使numpy在C语言中,实现对矩阵进行操作的项目包括自定义算法,我们不想写这些在Python C .我知道吗可以优化通过调用C或Fortran,但我不认为这种优化与我们的团队将会发生。因此,我是寻求一种语言,默认“快速”。茱莉亚似乎对这个交付更好的默认“快速”的承诺,而Python更像是“快速”如果你有合适的优化。

Matlab是行不通的,因为它的专利许可。

C是行不通的,因为它几乎没有“现代化”一个Fortran代码库。

可能是不够成熟的科学计算吗?

茱莉亚可能是一个有前途的选择,因为它结合了Python的缓解与本机的性能。

芬兰湾的科特林可能会很有趣,因为它结合了JVM的强度与本机代码编译的可能性。

斯威夫特将是一个伟大的语言,但我不确定是否足够成熟我的目标域。

C + + 20生锈附加选项,可能是有趣的,但是我担心这些语言的复杂性(记住,这是地球科学家,不是计算机科学家)。

选择你喜欢的一个渐进Fortran和NetCDF文件替换吗?

\ endgroup美元
13
  • \ begingroup美元 我要尝试一个生锈。但我认为,很有可能你会最终python,独立这里建议你得到什么。 \ endgroup美元
    - - - - - -peterh
    2020年11月12日20:54
  • \ begingroup美元 虽然我同意Python有很大的生态系统,我的团队并不真的Python-fanatic。事实上,我们的一个主要的需求是与自定义矩阵操作,跑得快和Python那不是很好。 \ endgroup美元
    - - - - - -Mike76
    2020年11月12日20:58
  • \ begingroup美元 我觉得你是正确的。有一个叫tensorflow的python库可以使用3 d加速器复杂的操作。实际上我从来没有见过它正常工作和更快的好像纯粹是在python中:-)作为交换,我认为大多数python库是废话,和语言speficially催化垃圾的解决方案。 \ endgroup美元
    - - - - - -peterh
    2020年11月12日21:01
  • 1
    \ begingroup美元 我很好奇你有什么要求,不满足于当前的Fortran代码,我不能收集的问题。(问因为有一天我可能会遇到同样的问题!) \ endgroup美元
    - - - - - -Deditos
    2020年11月13日在15:21
  • 1
    \ begingroup美元 @Mike76:快速迭代时间和现代脚本语言都是相互排斥的。加Fortran是容易理解的,至少Python不是,恕我直言。 \ endgroup美元
    - - - - - -jamesqf
    2020年11月19日,在四11

4答案4

11
\ begingroup美元

现代语言你正在寻找被称为现代Fortran 2018。Fortran 2008年和2018年都一个数值计算项目需要和很多特性,很多其他语言这里提到缺乏(包括极其愉快的数组语法等激发了其他所有语言MATLAB, Python, R,茱莉亚,…,即使是c++数值库)。这是唯一的语言,有本机内置的并行性和是唯一的语言,C,公布的官方标准MPI并行性。它还优秀的供应商支持GPU并行计算我在SC18听到,一些厂商像NVIDIA / PGI已经开始实现本机Fortran通过GPU的并行性特征。

现代Fortran是一个高级语言与MATLAB和Python,然而100 - 500倍(https://modelingguru.nasa.gov/docs/doc - 2783)。使用Coarray Fortran可以无缝地并行化代码运行它以最小的努力从你的笔记本电脑到世界上最大的超级计算机。目前没有其他语言有这样的能力。Fortran语言也是唯一所有级别的并行性,从教学水平矢量化,并发,coarray-distributed并行计算。如果这些特性不被认为是“现代”,也许“后现代”将是一个更好的描述。

Fortran的可靠持久的语言几乎3/4的一个世纪,拥有优秀的高度优化的编译器支持(英特尔、GNU、唠叨、IBM、PGI /英伟达,…)。如果你想持续几十年的编写代码,然后FORTRAN77代码移植到现代以最小的努力和Fortran节省自己的时间,精力,金钱,和计算能力。

一个良好的开端与现代并行面向对象的Fortran是“现代Fortran解释:将Fortran 2018”等。

如果你决定代码轻松地移植到现代Fortran,你也可以得到帮助从官方Fortran语言的网站https://fortran-lang.org/和社区的程序员在Fortran的话语:https://fortran-lang.discourse.group/

更新11月17日,2020年

就在昨天NVIDIA的新闻发布在GPU实现Fortran的并发特性的2008/2018。用户现在可以在纯现代Fortran编写代码,让编译器自动卸载它为thousands-way gpu并行。

这一成就的相关性和重要性是什么?的相同的Fortran代码用户现在可以通过gpu并行写道,分布式cpu, OpenMP线程,或auto-parallelization特性的Fortran编译器根据用户的平台和编译器的选择。所有的复杂性对用户隐藏。不需要预处理和条件编译了。这进一步增强了现有优秀的跨平台可移植性的Fortran程序和架构。

\ endgroup美元
5
  • \ begingroup美元 感谢分享,真可惜,我没有考虑这个问题。我现在的语言Fortran 90。 \ endgroup美元
    - - - - - -Mike76
    2020年11月14日,2:59
  • \ begingroup美元 5年前我在你的位置,当开始一个新的大型科学项目(几乎)从头开始。我们的讨论选择Fortran和C + +。最终决定支持Fortran (2008)。到目前为止,结果相当满意。它真的好强大的语法简化开发人员的生活在我们的团队。也就是说,不与任何标准低于2003,如果你选择Fortran。Fortran 2003年及以后提供了许多强大的概念,使Fortran 90过时了。 \ endgroup美元
    - - - - - -科学家
    2020年11月14日在3:04
  • 1
    \ begingroup美元 谢谢你指导我回到正确的方向。问这个问题的时候,我不停地数落着坏字符串支持Fortran 90。然后我看了看自己的代码库,意识到几乎除了向量和矩阵…… \ endgroup美元
    - - - - - -Mike76
    在3:19 2020年11月14日
  • 3
    \ begingroup美元 几乎任何字符串操作,你可能需要已经实现的Fortran社区。Fortran 2003年及以后也可分配字符串,高层和感觉就像Python和MATLAB。例如这段代码字符(:),可分配:字符串;字符串= " Fortran”;写(* *)字符串;字符串= / /字符串“2018”;写(* *)字符串;结束是完全有效的。试一试:tutorialspoint.com/compile_fortran_online.php \ endgroup美元
    - - - - - -科学家
    2020年11月14日,45
  • 1
    \ begingroup美元 英特尔Fortran论坛Fortran Reddit社区也是伟大的寻求帮助Fortran,特别是最近的标准。 \ endgroup美元
    - - - - - -科学家
    2020年11月14日在3:49
7
\ begingroup美元

作为前Fortran编程几周前我在网上做了一个小回顾到目前的趋势进行科学规划。

首先,尽管其年龄和有时古老的编程风格,因为它的巨大遗产,Fortran没有被定向到垃圾桶。这将是很长一段时间来使用。

别人和你一样,一直在寻找另一个开始远离Fortran。

虽然很受欢迎,Python非常当执行程序。Fortran的速度是它的另一个原因是仍在使用。

对于天文和物理应用程序,我看过很多引用国家偏爱最初教学生Fortran但当他们得到更多的经验在他们的领域暴露他们c++。

这句话从2013年开始,从一个物理论坛封装了将军的想法我看到:

年长的人使用fortran和c + +。年轻人使用python、java和c++。

与你的答案,我认为如果茱莉亚更广泛使用它可能有潜力取代Fortran和Python科学计算。

\ endgroup美元
4
  • 1
    \ begingroup美元 谢谢你的分享。我知道Python可以优化通过调用C或Fortran,但我不认为这种优化与我们的团队将会发生。因此,我寻求语言快速默认情况下。茱莉亚似乎提供更好的在这个默认“快速”的承诺,而Python更像“快如果你有正确的优化到位”。 \ endgroup美元
    - - - - - -Mike76
    2020年11月12日,在本周
  • 1
    \ begingroup美元 对我们的团队来说,一个巨大的语言莫过于并不重要,只要它是一个维护良好的语言。所有我们需要的是NetCDF和基本的矩阵运算,所以我们可以尝试茱莉亚,即使它不是Python一样成熟。 \ endgroup美元
    - - - - - -Mike76
    2020年11月12日23:09
  • 1
    \ begingroup美元 @Mike76:如果涉及到大量的数据处理,处理的速度是很重要的。从速度基准研究的报告我看过,为了速度,最快3语言通常是C, c++和Fortran。茱莉亚的语言通常是下一层位置4,5或6。我建议茱莉亚。 \ endgroup美元
    - - - - - -弗雷德
    2020年11月12日23:16
  • 1
    \ begingroup美元 据我所见,茱莉亚是“接近本机性能”。这似乎是足够好;我愿意牺牲一个小的性能,为了克服缓慢的C / c++开发周期/ Fortran。 \ endgroup美元
    - - - - - -Mike76
    2020年11月12日23:20
1
\ begingroup美元

现在,我认为茱莉亚使减少,因为它提供了一个很好的权衡“快速脚本”和“高性能科学计算”。但我愿意听别人的意见,也许我忽略了一些东西。

\ endgroup美元
    0
    \ begingroup美元

    你可以试试Haskell,现代的函数式语言。直接使用但也许缺乏熟悉可能有点吓人不知情者。现在有一个广泛的图书馆。

    \ endgroup美元

      你的答案

      通过点击“发布你的答案”,你同意我们服务条款并承认您已阅读并理解我们的隐私政策的行为准则

      不是你要找的答案?浏览其他问题标记问你自己的问题