选自StandfordEngineering
作者:TomAbate
机器之心编译
参与:韩放、张倩
超级计算机在很多前沿领域都有非常重要的应用,但其编程所需的软件过于复杂,令非程序员出身的科学家非常头疼。近日,斯坦福大学的计算机科学家开发出了一种新的编程语言,旨在降低超级计算机的编程门槛。
只有超级计算机才最有能力应对科学面临的巨大挑战,但是这些机器的编程难度却阻碍了发展。
个人电脑革命曾经改变了一切,为我们大多数人提供了易于获取、更便宜、更小、更快、更易于使用的计算机。科学家们也受益匪浅。他们开发了相应的计算机技术来研究细胞的内部运作、遥远恒星的轨道以及曾经远远超出他们观察能力的其他现象。
但是对于前沿的研究人员来说,一个具有讽刺意味的现象出现了:新的、复杂的仪器开始产生越来越多的数据,因此需要超级计算机来分析实验结果。编程这些硬件所需的软件过于复杂,以至于试图分析如此庞大的数据集的科学家们常常很难掌握。
因此,Regent出现了,它是由斯坦福大学计算机科学家AlexAiken领导的小组开发的新编程语言,它使超级计算机更容易使用。阿尔卡特朗讯通信和网络教授、粒子物理学和天体物理学以及光子科学教授Aiken说:「我们希望创造一个编程环境,让那些不是计算机科学家的研究人员也能使用。」
Regent帮助解决了超级计算中最大的挑战之一:今天的超级计算机比以往任何时候都要复杂得多,现有的编程语言一直在努力跟上。在人们的想象中,超级计算机可能是一台巨大的机器,但事实上,它是由数千个微处理器组成的阵列。科学家通常用C++来编程这些数组,C++是40年前的一种编程语言,在当时那个年代,主要的微处理器是中央处理单元,即CPU。CPU以编程人员所称的串行方式,快速地解决大问题,一个接一个地进行计算。
然而,最近,第二种微处理器已经成为超级计算的重要组成部分,它就是图形处理单元(GPU)。GPU开始主要用于控制计算机屏幕上的数百万像素,以提高电子游戏的视觉效果,它可以像程序员所说的那样同时或并行地执行许多类似的计算。事实证明,并行处理在机器学习等应用中非常有用。C++已经升级,以跟上这些硬件变化。不幸的是,补丁的增加使得该语言越来越难以使用。然而,Regent使得超级计算机程序员面临的一些问题变得更加简单,比如将串行处理任务分配给CPU,将并行处理任务分配给GPU。
一旦Regent在概念层面上构建了程序,程序员的意图就会被转换——或者,使用技术术语,编译——成第二个软件层,叫做Legion,Aiken也开发了这个软件层。Legion生成机器代码,即指导超级计算机硬件如何执行程序的精确指令。Regent和Legion之间的紧密集成使得程序员更容易做出其他重要的决定,特别是超级计算机必须分析的数据存储在哪里。
SLAC国家加速器实验室的科学家ElliottSlaughter说,这两个层的集成节省了程序员的金钱和时间,他几乎从Regent和Legion诞生之初就开始研究这两个层。计算机消耗能量,这是有代价的。但是移动数据的能源成本可能是对该数据进行计算的倍。此外,大型实验往往依赖于收集大量数据的仪器。Slaughter说,一些仪器每秒可以收集相当于20张视频DVD的数据,用于持续15分钟的实验。即使以光速在光纤上移动,从仪器到超级计算机获取大量数据也可能产生滞后,这可能会破坏分析。「你把数据放在哪里,是程序员做出的最重要的决定之一,」Slaughter说。Regent和Legion通过在等待计算时存储数据,给程序员带来了前所未有的控制权,也节省了金钱和时间。
他说:「你可以先编程计算任务,然后再定位数据,这非常容易,而且不需要重新编写代码。」
Regent会广泛使用?研究人员说,新语言必须克服很大的惰性。「Regent是一种非常不同的编程方式,」Aiken说。「研究人员需要一段时间才能适应其所需的思维方式。」
但有两个因素对其有利。首先,超级计算硬件在不断改进。美国能源部(U.S.DepartmentofEnergy)正在推动其Exascale计算项目的发展,该项目的目标是在年左右将超级计算能力提高50倍。能源部正在支持软件项目,包括Regent,以帮助编程跟上进度。
此外,许多想使用超级计算机的科学家不熟悉当前的工具,也不清楚编程大型实验所需的陡峭学习曲线。即使是经验丰富的超级计算机程序员也可能会觉得当前的系统很麻烦,并怀疑是否有更好的方法。Aiken说:「我们经常与那些意识到Regent让他们生活更轻松的科学家交谈。」
原文链接: