订阅程序员杂志RSS CSDN首页> 程序员杂志

Julia语言:让高性能科学计算人人可用

发表于2014-03-12 10:31| 次阅读| 来源《程序员》| 0 条评论| 作者卢鸫翔,王江平

摘要:一群科学家对现有计算工具感到不满:他们想要一套开源系统,有C的快速,Ruby的动态,Python的通用,R般在统计分析上得心应手,Perl的处理字符串处理,Matlab的线性代数运算能力……易学又不让真正的黑客感到无聊。

Julia是个灵活动态的语言,最初针对数值计算而发明,项目起初是MIT的研究课题,现已发展成富有活力的软件系统,也是目前最受关注的编程语言之一。日前,Julia的四位发明者Jeff Bezanson、Stefan Karpinski、Viral B. Shah、Alan Edelman接受了《程序员》杂志的专访。

让高性能科学计算为人人所用

《程序员》:你们因何设计Julia?想要解决的问题或达成的目标是什么?

Alan:对我来说,首要的问题是让高性能科学计算能为世界上的每一个人所用。我时时想着这一目标尚未完全实现,但Julia的出现使问题的解决成为可能。

我对并行计算的兴趣始于1988–1989年间在Thinking Machines工作时,Thinking Machines的产品是新潮的Connection Machine。2003年12月,Viral跟Parry Husbands等人一起凭借我们的Star-P并行MATLAB软件在MIT创业大赛中获胜。受此鼓舞,我创立了Interactive Supercomputing公司,从2004到2009年,公司做得风生水起。

在ISC,Parry、Viral和我认识到,通过一种慢速的动态专有语言来实现快速的并行化是荒唐的。Jeff也是ISC的员工,在这个问题上也有自己的独到见解。我真心希望看到这个问题的解决方案。

我永远不会忘记,那是2009年3月,我们要在办公楼的停车场上拍最后的团队合影,拍照花了很长时间,晚些时候Jeff和我就在停车场里走了走,在那里我们商定了Jeff来MIT做这个方案。

Jeff:科学计算语言中你所看到的特性通常都很复杂。多数系统中这些特性都是“内置魔术”——通过编译器和解释器内部的客户逻辑来实现,难于修改或扩展。我想看到一种更加全面的、可扩展的方法来实现这类功能。

Viral:我一直对科学计算感兴趣,这也是我的博士研究方向。我和Alan Edelman,以及我的导师John Gilbert一道,致力于构造一套并行的MATLAB。当时我同一些数学家、物理学家、化学家和生态学家一起负责几个科学应用,将他们的程序并行化以提高性能。在此过程中,有一件事变得清晰起来,那就是问题不在于并行化,而在于现有的语言根本没有足够的表达力。这些语言的设计使之难于实现高性能。很多这样的语言都由一些非计算机科学家设计,他们脑子里想的多是生产率而不是编译器设计。Julia团队的独特之处在于,我们四个人组合了多种学科——语言设计、数学和工程。结果我们便拥有了一种不仅为科学家和工程师喜欢,也为计算机科学家喜欢的语言;在我看来这是罕有的事情,对此我们都倍感幸运。

Stefan:读研时我真正想做的是程序语言设计,结果却进了网络研究实验室。到离开UCSB之前,我在用线性代数、机器学习和数据统计做网络流量的分析与建模。这需要一种弗兰肯斯坦式的编程语言组合:用于网络跟踪处理的C,准备数据的SQL,线程代数和机器学习的MATLAB,统计分析和视觉化的R,然后Ruby管理这一切。我的时间更多花在了查找问题,而不是做有用的工作上。

Viral和我在同一部门,常年一起玩“终级飞盘”。有一天我扔着盘片发泄着心中不快:这类工作的工具真是一团糟糕。Viral对我说:“我认识一个人,你可以跟他聊聊。”第二天他就通过Email把我介绍给了Jeff。我们便开始讨论用于数据分析的理想编程系统应该是怎样的。后来我们决定着手做点什么——以三个月为限,届时我们将决定是否继续。我完成了第一次git提交,搭好了服务器,并为Jeff和Viral开放了权限。Jeff提交了一个语法分析器,以及随后一个简单的解释器,Viral开始用新的语言写些代码。起初错误不断,速度也奇慢——但我们已可以用它做些事情,玩一玩语言的语法和语义。三个月来了又去了,我们完全没有停下的想法。

就在那无人察觉的三个月期限前后,Alan开始为MIT的Jeff提供资金支持。那时我们已把项目命名为Julia了。如今我们在MIT有一个完整的研究小组专注于基于Julia的高效率、高性能并行计算。

《程序员》:Julia这个名字有典故吗?

Alan:许多人问过这个问题。事实证明这个名字很棒,部分是因为每个人都有自己的解读理论。

Jeff: 给语言起名字着实不易。很高兴我们能有一个好听又好记的名字。

Stefan:坊间传言那是我的中名。对这一说法,我不能确认也不能否认。

《程序员》:能否介绍一下你们的背景?之前有语言设计方面的经验吗?

Jeff:语言本来是我主要的业余爱好。业余时间我便做一些语言设计和解释器方面的工作。我从互联网上了解到了Interactive Supercomputing公司,我意识到如果能去那儿工作,就可能获得少有的专业的程序语言方面的工作机会,于是便投了简历。我在那里大多数时间都在做一种针对.NET平台的编译器。

Viral:我从读博时就认识Alan,那时我们在加州大学Santa Barbara分校,与MIT的团队合作研发Star-P。毕业后我到Interactive Supercomputing公司工作,在那里认识了Jeff。不久后微软买走了这家初创公司,我们便琢磨接下来该做什么。

Stefan:我依然清晰地记得假期里造访瑞典亲人的家,在海滩上阅读《Programming Language Pragmatics》(中译本《程序设计语言——实践之路》),并因此被表弟温言揶揄的情形。不过我后来没有去做编译器,而是无意中走入了之后称为“数据科学”的领域。那时我正好有一堆数据,想搞清楚数据背后的含义。然而,作为一名数据科学家,我始终关注着语言设计方面。对我来说,编程语言绝不只是可以替换的工具。我相信更好的语言能让我们成为更好的程序员,使我们能解决更困难的问题。

《程序员》:谈到Julia时,很多文章开篇就会提起它的性能。科学计算语言的性能是一种不可替代的优势吗?

Stefan:对很多人来说,Julia的性能是一个大卖点。但不是说性能打倒一切,否则我们都去手工编写SIMD和GPU代码了。

Jeff:性能分两类:尝试一种方案时首次获得的性能和大量努力后获得的性能。我相信前者更为重要,且只要专注于前者,就算不能取得最佳的绝对性能,方案也能有效。

Viral:我来分享我做过的另一个开源项目——Circuitscape中的一个故事吧。我和同事Brad McRae开始时可以在10分钟内解决一个100结点的问题。如今,Circuitscape用户每天都能在几分钟内解决拥有数百万结点的问题。我们组合使用了更好的语言、更好的库以及更好的算法,达成了这一结果。现在的Circuitscape是用Python写的,我们正在试验通过用Julia重写来实达到更高规模的可能性。性能不是唯一考量,但对于一种科学计算语言,它肯定是最重要的方面之一。

《程序员》:除了高性能,Julia还有哪些与众不同的特性?

Jeff:Julia基于多分派(multiple dispatch)。这是一种强大的面向对象编程机制,以前其他语言也用过,但出于某些原因从未真正流行起来。我们设计的多分派旨在定义具有多种形式和行为的数学函数,事实证明它也能用于其他情形。它在“你能表达什么”和“编译器能用它做什么”之间达到了很好的平衡。

Viral:对我来说,Julia最好的方面不是某种语言特性,而是我们终于有了一个平台,在这里来自计算机科学、物理科学、社会科学以及数学领域的专家正在走到一起,创造从未有过的神奇。而这些原来不相往来的社区之间的合作在科学计算方面释放了新的可能性。

《程序员》:目前Julia最适合哪些场景的应用?

Jeff:Julia是真正的通用语言。总体上,我认为要改善一种语言就要使之更通用,而不是更适于某一种任务。但目前Julia最佳的应用案例是探索性计算(exploratory computing):试验不同的算法或尝试理解数据。模拟也是一个大用例:简洁地描述一套系统,同时获得尽量高的性能。目前,人们也在使用Julia开发GUI应用和小型的Web应用,但我们并没真正针对这种应用而设计。

Viral:Julia足以胜任的领域之一是教育。下一代学生可以直接跨过现有的技术。IJulia图形化的Notebook集成(运行Julia的IPython Notebook)使之对于教学极具魅力。研究者、算法开发者和库作者也在采用Julia,因为Julia使工作更高效。

0
0

近期活动

更多

2015中国大数据技术大会

为了更好帮助企业深入了解国内外最新大数据技术,掌握更多行业大数据实践经验,进一步推进大数据技术创新、行业应用和人才培养,2015年12月10-12日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、北京中科天玑科技有限公司及CSDN共同协办的2015中国大数据技术大会(Big Data Technology Conference 2015,BDTC 2015)将在北京新云南皇冠假日酒店隆重举办。

微博关注

程序员移动端订阅下载

相关热门文章