Julia语言:让高性能科学计算人人可用要:一群科学家对现有计算工具感到不满:他们想要一套开源系统,有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使工作更高效。

Julia语言:让高性能科学计算人人可用的更多相关文章

  1. 为科学计算而生的Julia——基于Manjaro Linux的安装与入门

    技术背景 Julia是一门为科学计算而生的编程语言,其着重强调了开源.生态与性能.从开源角度来说,相比于Matlab就要友好很多,用户可以免费使用,而且MIT协议应该是最宽松的开源协议之一(截图来自于 ...

  2. Julia语言介绍

    官网:https://julialang.org/ 中文社区:https://cn.julialang.org/ Julia 是一个面向科学计算的高性能动态高级程序设计语言. 首先定位是通用编程语言, ...

  3. 科学计算工具Numpy

    参考学习资料: Python.NumPy和SciPy介绍:http://cs231n.github.io/python-numpy-tutorial NumPy和SciPy快速入门:https://d ...

  4. 科学计算工具Numpy简介

    Numpy(Numerical Python) Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库.用来存储和处理大型矩阵,比Python自身的嵌 ...

  5. python科学计算模块NumPy

    NumPy是Numerical Python的简称,是高性能科学计算和数据分析的基础包.其实NumPy 本身并并没有提供太多的高级的数据分析功能, 但是理解NumPy数组以及面向数组的计算将有利于你更 ...

  6. 科学计算基础包——Numpy

    一.NumPy简介 NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. 1.NumPy的主要功能 (1)ndarray:一个多维数组结构,高效且节省空间. (2)无需 ...

  7. python学习笔记(2):科学计算及数据可视化入门

    一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...

  8. julia,集Python、C++、R为一体!Julia 1.0重磅发布, MIT发布史上最强科学计算编程语言?创始人独家解答11个问题

    这个编程语言的新版本之所以受到整个人工智能界的关注,最主要的原因正是其将 C 语言的速度.Ruby 的灵活.Python 的通用性前所未有地结合在一起,支持并行处理,易于学习和使用,尤其适合科学和工程 ...

  9. Julia:高性能 GPU 计算的编程语言

    Julia:高性能 GPU 计算的编程语言 0条评论 2017-10-31 18:02    it168网站 原创 作者: 编译|田晓旭 编辑: 田晓旭 [IT168 评论]Julia是一种用于数学计 ...

随机推荐

  1. Display Database Image using MS SQL Server 2008 Reporting Services

    原文 Display Database Image using MS SQL Server 2008 Reporting Services With the new release of MS SQL ...

  2. Cocos2d-X字体

    Cocos2d-X顺便文本显示在以下三个: CCLabelTTF: 使用系统字体.每一个字符串会生成一个纹理.显示效率比較低下,适合不变化的文字 CCLabelAtlas: 使用NodeAtlas优化 ...

  3. U盘启动盘安装Win7/9/10系统攻略

    UltraISO制作U盘启动盘安装Win7/9/10系统攻略 U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便,随时都可以制作系统启动盘. U盘建议选择8G ...

  4. java.util.Timer demo good

    package timer; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import org ...

  5. cocos2d-x 网络请求

    [cocos2dx]rapidjson用法以及中文显示的解决方法 cocos2dx 读取json及解析 cocos2dx rapidjson 高速解析JSON  --- [cocos2d-x官方文档] ...

  6. Java加深理解有关注释

    一.获取应用笔记 常常会遇到这种情况 package Tokyo.Hot; public class Demo { public static void main(String[] args) { n ...

  7. /proc/mtd 各参数的含义 -- linux内核

    经/proc虚拟文件系统读取MTD分区表:cat /proc/mtd mtd .name = raspi, .size = 0x00400000 (4M) .erasesize = 0x0001000 ...

  8. android layout物业介绍

    android:id 为控件指定对应的ID android:text 指定控件其中显示的文字,须要注意的是,这里尽量使用strings.xml文件其中的字符串 android:gravity 指定Vi ...

  9. 四:redis的sets类型 - 相关操作(有序和无序集合)

    ================四十五种(有序和无序集合):sets种类(它是一个集)=============      简介:  set它代表的集合.加入是随意添加----->无序集合    ...

  10. 使用Mockito进行单元测试【2】—— stub 和 高级特性[转]

    一篇中介绍了Mockito的基本信息,现在接着介绍Mockito强大的stub功能 2. Mockito使用实例 5. 对连续的调用进行不同的返回 (iterator-style stubbing) ...