最近,一位朋友发给了我一个有线文章,题为“糟糕的软件的权力和悖论”。由Paul Ford撰写的短片讨论了软件行业可能过于痴迷于创造更好和更好的工具,同时忽略了诸如资源调度系统或在线图书馆目录之类的平凡的软件。提交人声称,糟糕的软件彩票的获奖者是发展气候模型的计算科学家。由于气候变化可能是下一代最大的问题之一,如果我们用“糟糕的软件”编写了用于检查气候变化的最佳工具之一,有些人可能会发现它有点担心。
在这篇文章中,我讨论了Whers气候科学家的问题失去了“糟糕的软件抽奖活动”。我将涵盖气候模型的基础知识,什么软件在气候建模中使用,为什么,以及哪些替代软件存在。
我可以告诉最好的,糟糕的软件抽奖活动被气候变化的人赢得(或丢失)。一天晚上我决定去看看实际的气候模型。事实证明,他们经常在超级计算机上运行的大量批处理作业并吐出数字。没有按钮单击,没有旋转的全球或切换开关。他们是来自深层的大型机世界的文物。当您听到预测可怕的地球的气候模型时,他们正在谈论数百个Fortran文件,顶部的评论就像“此文件中的子程序决定海水冻结的潜在温度。”它们并不意味着在家庭计算机上由任何随机书呆子运行。
我首先要提一下,我是那个随机的书呆子,他在小型Linux电脑上遇到了学院宿舍的气候模型。除了个人轶事,抛开软件开发人员,即使在HPC,也可能不熟悉气候建模。这个领域有点利基,所以首先我会解释气候模型的基础知识。
模型是一个捕获的一点。思考的更简单的方式是作为一块软件。这不是填充Twitter Feed的软件类型,或在Spotify上播放您最喜爱的曲目。简单地说,气候模型试图模拟世界。模拟通常从一些预生产控制状态(1850〜1900)开始,并及时迭代地迈出。在每个离散的步骤中及时,计算物理量的感兴趣量,并且更新模型的状态。
像社区地球系统模型(CESM)这样的气候模型由多种型号制成,每个模型都负责自己的世界各地:海洋,大气,冰,河流等.1这些各种组件中的每一个相互通信以更新全球气候的状态。这就是气候模型通常被称为“耦合气候模型”的原因。
气候模型经常在大型网格上工作。这些网格有很多类型,但为了简单起见,只想到一张图纸。电网的每个小平方都是负责世界上建模的气候的一部分。
模型网格可以在分辨率下更精细或培养。回到图表纸的示例,增加分辨率等同于将每个平方划分为许多其他方格。下图显示了常用于气候建模的两个网格尺寸(1度和1/4度)。 2
气候模型有点像相机 - 分辨率越高,你可以在图片中看到的更多细节。通常,分辨率更精细,更科学地有用的模拟输出。
更精细的分辨率模型需要更多计算功率 - 越多的网格单元,计算的数量越多。科学家需要高分辨率模型,因为它们是模拟小规模过程的擅长,在聚集体中,对模型的预测产生了很大影响。
这些模型不仅需要计算能力,它们还需要大量存储容量。随着分辨率的增加,输出从千兆字节迅速地从千兆字节到数百兆字节。例如,上述CESM模型在运行55级时,大气中的1/4度网格(如上图右侧的显示)和海洋中的1/10度网格,产生超过140磅输出数据。
这一切都说,气候模型与大多数开发商甚至意识到的不同野兽。它们推动了可能计算和存储的前沿。因此,气候模型需要许多其他应用程序的软件。
文章中提到的海洋模型,模块化海洋模型6(MOM6),将很快成为CESM的新海洋组件。 “新”3软件是在Fortran中写的。
如果你知道Fortran是什么,而且你不熟悉的气候建模,你可能会很震惊地听到这个消息。为什么?就技术而言,福特兰陈旧。 Fortran是在20世纪50年代后期写的第一个!然后,Fortran仍然在打卡上编程。
显然,由于打卡以来,Fortran已经走了很长的路。自成立以来,已经开发了许多对Fortran的迭代,以推出现代编程概念,例如面向对象的编程和与其他语言的互操作性。然而,这仍然没有解决许多新语言已经开发的事实,因为这是计算的早期计算。那么为什么福特兰仍然?它真的仍然是最好的工具,还是保罗福特对气候科学家失去了“糟糕的软件抽奖活动”?我们可以检查这个问题的第一种方式之一是查看实际使用Fortran的型号。
寻找气候模型的最佳地点(及其数据)是耦合型号的互通项目(CMIP)。这是一种庞大的气候模型数据存储库,其存储在世界各地的服务器上,目的是比较气候建模中心创造的气候模型的技能。
现在,我在这个列表中没有抬起每种型号,而是一些众所周知的型号(在美国)是:
这些模型由美国的一些主要气候建模中心写成(NOAA / GFDL,NCAR等),它们都是在Fortran中写的。
请记住,这通常意味着它们的组件模型也在Fortran中写入。例如,一些众所周知的组件模型是
我们对“有多少型号实际使用Fortran的问题答案?”是 - 大多数,如果不是全部。但是,只要所有酷的孩子正在这样做,并不意味着它是正确的选择。那么为什么冒险?
确实,Fortran可以吓跑新棉被开发商甚至一些经验丰富的开发人员。 Fortran不是一种简单的语言,可以通过任何标准写入或阅读。
然而,Fortran实际上非常擅长它所做的。 Fortran代表公式翻译。该语言旨在将数学方程式转换为计算机中的代码。 Fortran站立于与Python这样的现代语言相比,这实际上是英语。
模块fibonacci_module隐式无包含递归函数fibonacci(n)结果(fib)整数,意图(in):: n整数:: fib如果(n< 2)那么fib = n els fib = fibonacci(n - 1)+ fibonacci (n - 2)结束函数fibonacciend模块fibonacci_module
def fib(n):如果n == 1:返回0 eLif n == 2:返回另外:返回fib(n - 1)+ fib(n - 2)
事实上,如果您喜欢Python,您可能会惊讶地听到您最喜欢的Python库,如Scipy,部分地写在Fortran中。如果您来自R CAMP,则可能会惊讶地发现了一种主要用于数据科学的语言,听到超过20%的R是在FORTRAN中编写的。 4.
但仍然,为什么世界背后的大脑最重要的气候模型挑选到<插入你喜欢的语言>
Fortran有点像NASCAR - 别担心右转(可读性),专注于速度,以及普及方面下降。现代版本的FORTRAN 5使语言更容易使用,但FORTRAN的主要目标始终是数值计算的速度。
其他语言使用FORTRAN来加快数值计算来调用它。关于R-Bloggers的本文显示了F Fortran(95)与C和C ++在R内部使用时的比较。如果您对Fortran绩效感到好奇,请查看计算机语言基准游戏,以便在Fortran和其他语言之间进行比较。
建立气候模型的科学家们关心性能很多。性能的小幅增加可能导致节省成本时间的数小时。考虑一下:如果您有需要在昂贵的硬件上运行周数的程序,您是否不会在缩短那段时间内投入时间?性能是在语言选择时许多气候科学家最重要的因素。 6.
阵列是Fortran的一流公民。与C相比,阵列的更高级别抽象使科学家更容易描述其域名。 Fortran支持多维数组,切片,减少,重塑以及许多基于阵列的计算的优化,如矢量化。
由于阵列的这种抽象,Fortran非常适合科学数值计算。我喜欢向熟悉C ++的非Fortran程序员解释这一点是阵列是Fortran,STD容器是C ++的方式:一种方便的抽象,使得与数值组更容易使用的抽象。现在,我承认这不是比喻,但我试图开车的点是从抽象中获得的便利性。
Codebase的寿命对那种气候建模社区非常重要。科学家不能用很快贬值或急剧改变的语言编写数百万码代码。 Fortran,在整个许多迭代中,有令人难以置信的寿命。以旧版本的Fortran编写的模块通常与今天使用的较新版本的Fortran兼容。在大多数情况下,一旦您可以编译它,Fortran“只是有效”。这对想要专注于科学而不跟上最新语言的科学家来说很重要。
比尔长是一个福特兰人WIZ,曾经在FORTRAN标准委员会举行过20多年。他在工作中亲自帮助我,因为他同样很好,因为他擅长在Fortran编程。比尔在回答我在帖子中找到的问题的回应中捕获了福特兰的寿命:“为什么冒险坦坦广泛用于科学计算?”
Fortran的一个特征是寿命。如果您在Fortran中编写代码,则可能仍然有效,并且人们仍然可以阅读它,几十年来。这肯定是几十年前代码的经验。在那个时候,将有多种“时尚”语言与热烈的追随者将会上升并最终褪色。 (任何人都记得Pascal,或Ada?)如果您想要一种时尚的语言今天学习,您可能应该看看Python ...或者您可以使用Fortran,这可以是多年来一系列新语言的序列,所有这些同名。并且很大程度上向后兼容。 7比尔长 - 2014年
需要在许多计算核心之间传播计算的程序,如气候模型,通常使用消息传递接口(MPI)库。 MPI库可以被视为使用更多计算能力的网关。高性能计算(HPC)的开发人员知道MPI是上帝,所有MPIS儿童都出生在其图像中。有一次我听到两家HPC开发人员说“这是方式”,就像曼德拉多人一样,参考他们的协议使用MPI进行C ++项目原型。
在高级,MPI定义了一系列基于传递消息的方法,该方法可以用于利用大量计算功率。即使是最新的计算领域,就像深入学习,当他们需要在许多CPU或GPU上都需要其计算时仍然使用MPI。例如,Horovod可以使用MPI在GPU之间交换模型参数来分布式深度学习。
但是,并非所有语言都可以使用MPI。甚至更少可以使用MPI在冒险的性能水平。 Fortran + MPI是写入许多气候模型的基础,以便它们可以扩展到大量超级计算机。需要一种具有性能的并行框架,如MPI,限制了气候建模者可以选择的语言数量。语言必须与MPI合作,或提供表演替代品,因为建模是MPI的性能水平。
如果您想在HPC中阅读MPI的影响,我强烈推荐Johnathan Dursi的帖子,为什么“MPI正在杀死HPC”。
气候建模社区没有从Fortran切换的原因之一只是它需要的纯粹努力。
学习新语言是耗时的。许多科学家不来自计算机科学背景。在没有该背景的情况下学习一种新语言可能是非常困难的,因为以一种语言学习的概念并不容易转移到新语言。面向对象的编程和多态性等概念,考虑了计算机科学的钉,不一定是气候科学词典的一部分。
遗产代码是一个真正的痛苦。编写模型需要许多开发人员数十年来完成。 8切换到新语言是一个令人生畏的任务。重新编写一个超过9000个Fortran提交的CodeBase就像撕毁并重建房子。重新编写气候模型就像重建整个社区一样。
你看到这是正确的吗?上述要求描述的语言是Fortran。虽然存在替代选择,但Fortran仍然是气候建模的主要语言。其他语言可以使用什么?
如果我没有提到可用于编写气候模型的其他竞争者,我会被遗漏,其中一些我将在这里讨论。
教堂是由Cray(现在HPE)开发的并行编程语言。并行性是教堂里的一流公民。该语言对分布式计算公布了高级抽象,并侧重于尝试使这些并行性功能可访问。教堂能够以比MPI + X(FORTRAN,C,C ++)更小的代码线执行可扩展的例程以实现类似的计算。
教堂的最新成功故事是Arkouda。基本上,Arkouda是用教堂写的Numpy阵列的实施。在Jupyter中运行良好的Python前端将ZMQ消息发送到分布在超级计算机或群集上的Chapel后端服务器。如果您需要围绕一些大数据(数百GB到数十个TB),那么这个项目值得退房。它有一些怪癖,但显示了一大吨的承诺。 9.
教堂在模拟空间中有一些立足点,努力像教堂多物理模拟(冠军)和宇宙学习,但我所知道的气候舞台上没有建立的模型。
教堂目前的缺点是编译时间,包生态系统和GPU支持。但是,这些缺点正在得到解决。即将推出的第二个主要释放是展望使用教堂的好时机。
朱莉娅是一种相对较新的语言,最近看到了很多增长。朱莉娅是一种通用语言,适用于数值计算和分析。语言是动态键入的,具有求助,以及与C和Fortran的互操作性。包管理器集成到Rept中是非常光滑的;感觉就像! Jupyter笔记本中的语法我用来飞行安装pip包。
朱莉娅正在增长,并且在气候建模中使用它。 Cal Tech的气候建模联盟一直在努力致力于许多与气候相关的Julia套餐,包括ClimateMachine,一种数据驱动的地球系统模型。
我已经听到了关于一些朱莉娅的缺点的二手,但我没有能够阐明它们的经验。因此,我将把它作为读者留下来。
如果你这么走了,你最有可能已经了解Python所以我不会花太多时间告诉你它有多棒,而是相反。
任何试图在Python编写分布式程序的人都会告诉您,这并不容易。像Dask和Pyspark这样的工具可以帮助减轻一些问题,但它们主要以不同的方式使用,而不是通过占主导地位气候建模的消息。
可以在Python中使用MPI,但是如果不是完全不可能的话,可以将其缩放到福特,C ++和教堂的级别几乎不可能。对于想要为自己尝试这个的怀疑者的开发人员,请查看MPI4PY。
Python在气候科学中大量使用,但不是为了上述原因而实际建模本身。大多数情况下,Python用于仿真输出的可视化和分析,具有XARRAY和DASK等工具,位于Pangeo数据生态系统中。
在我看来,气候科学家并没有失去软件抽奖活动,Fortran + MPI实际上非常擅长它所做的:大量分布式数值计算。然而,需要更多的创新来使语言如教堂和朱莉娅这样的语言,即替代气候建模,因此,随着这些语言的不断成熟和发展稳定的生态系统,气候建模社区可以从他们对FORTRAN的增强中受益。
2003年版Fortran是最大的发布之一。该释放带来了多态性,继承等oop的特征,以及与c的互操作性。
我问了四名气候科学家,我接近为什么他们认为他们的田地为他们的模型挑选了Fortran。 我得到的响应是关于语言的表现。 我最喜欢的回应是“快速,全部”。 ↩ MOM6有9000多个提交,近50个贡献者,并且甚至没有考虑到MOM6 GitHub贡献度量的所有未被考虑的代码 完全免责声明,我为教堂和阿古达做出了贡献。 教堂和他们令人敬畏的,令人难以置信的开发团队是我第一次进入HPC的原因。 ↩