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使工作更高效。

當舊思想的精華融入新思想

《程序員》:在開發過程中,哪一部分投入的精力最多?現在最大的挑戰是什么?

Jeff:越來越多的時間都花在考慮設計決定,以及為需要完成的工作排優先級上面了。 我們現在面臨的一大挑戰是隨著可用包越來越多、越來越大,用戶也需要將越來越多的代碼加載到他們的環境中。Julia是設計成即時編譯的,在運行時編譯這么多代碼已經開始影響速度了。我們正在尋求解決方案,情況應該很快會有改觀。

Viral:設計良好的API需要相當長的時間。盡管Julia已很快,但我們還需要使它更快,而且更好地并行工作。關于哪些功能留在Base庫中,哪些進入包中的決定也很艱難,因為像Julia這樣的語言往往擁有很大的科學計算庫作為基礎庫發布。盡管Julia已是一種可以隨時安裝的相對方便的科學計算工具,我們還需要在Julia及其生態包的安裝方面做更多簡化。

《程序員》:在Julia的設計過程中,你們遵循哪些原則?

Jeff:我們經常引用的一條原則是“做性能開銷不大的最有價值的事”。我們愿意犧牲一些性能來換取更可靠、更易編寫的程序,但也有限度。性能降低2倍?可以。10倍?不行。過去,這方面做了很多錯誤的妥協——例如,C和C++為了在這兒那兒省下一條指令,不惜為用戶帶來大量問題。

Viral: 我們始終考慮編程的便捷。讓語言成為動態的很重要,但也要有些限制,從而類型推導可以起作用。這樣就可能產生快速的代碼,而不致麻煩用戶聲明所用的每個變量的類型。用戶開心了,編譯器的作者也開心了。

《程序員》:Julia的核心開發者和用戶分別有多少?社區如何運作?

Jeff:我們的開發都通過GitHub進行,現在上面的代碼貢獻者有200名左右,穩定的、高度活躍的貢獻者約有30名。我們在GitHub的issues和pull requests,以及郵件列表上都有大量討論。我們喜歡聽到大量觀點,并在決策之前達成一致。

Viral:我聽說過一種度量方法,社區的規模是郵件列表規模的10倍,基于此,估計Julia至少有10000名用戶。我們努力打造一個尊重不同意見、同時為新用戶提供方便的社區。這樣才能吸引其他人,并使我們的工作有趣。

《程序員》:用Julia寫的項目中,哪一個讓你們覺得印象最深刻?

Jeff:繪圖包Gadfly讓人感覺很棒。還有JuMP,把描述優化問題的語言嵌入一種通用的語言中,這是最好的例子之一。它可以匹敵專用語言的性能。

IJulia也是精華。它提供了一個基于IPython Notebook的Web瀏覽器前端,是通過終端與機算機交互的最佳方式。

我特別喜歡的還有Quake 2渲染引擎(https://github.com/jayschwa/Quake2.jl)。

Viral:Julia的統計計算能力最棒,此類程序幾乎完全用Julia寫成,并將Julia引到一個出乎原有規劃的方向上。當我們看到來自R社區的人們能將他們想要的功能開發成一個純粹的包,而不需要任何語言上的修改,我們就知道語言的設計是正確的。

《程序員》:Julia足夠穩定能用于生產環境了嗎?

Alan:是的——我每天早飯前都運行蒙特卡洛模擬,通常是在60個核上。

Jeff: 盡管我們未能提供想要的所有特性,人們有時還會驚詫于一切在整體上竟運行得如此平穩。

Viral: 這取決于“生產”的含義。Julia是極好的教學工具,MIT及其他大學的許多課程已經在用它了。研究者也在工作中每天使用。如果“生產”指的是有企業支持的大型服務器上長期運行的任務,那么答案是否定的。

《程序員》:在整個開發和設計過程中,有沒有想和其他開發者分享的體會?

Jeff:最初人們對新的編程語言往往持懷疑態度,這很正常。但事實證明,只要做出讓幾個早期的采用者覺得足夠有趣的東西,你便能獲得助力。

Viral:起初我也懷疑是否真正需要一種新的編程語言,是否所有的東西都不需要。但我已經學會擁抱新的語言(更多地來自科學計算背景的),這種多樣性和試驗過程都是好事。世界就是這樣進步的,讓舊思想的精華融入新思想。

《程序員》:有沒有來自用戶的意外收獲或反饋?

Alan: 我每天清晨起來看到Julia中新加的東西都要吃上一驚。

Jeff:聽說Julia被用于前沿的研究項目時我著實高興了一把。少數研究團體讓他們的實驗室轉變為使用Julia為主。哪怕有人只是嘗試用Julia做一個真正有趣的應用,也讓人興奮。

《程序員》:對于初學者來說,學習Julia最困難的部分是什么?Julia中有哪些常見的陷阱?

Jeff:我們努力避免陷阱。我想可能出現的一個陷阱是全局和局部變量非常不同。全局變量更像字典,可以通過名字查詢,也可以四處修改它。局部變量則完全不同,因為在很多情形中它們會被編譯器完全優化掉。

Viral:最常見的陷阱在于有時人們期望Julia是MATLAB的零成本替代品。實際上它們有很多語法差異,有時它會絆倒一個有著多年MATLAB背景的用戶。當然,一些舊的習慣并不容易忘掉。

《程序員》:與其他科學計算語言(例如Mathematica、MATLAB等)相比,Julia的劣勢是什么?

Alan:在MIT,我們發現學生和年輕人樂于擁抱Julia,而有經驗的教職員則跟進得慢一些。

Jeff:許多情況下,庫比語言更重要。有許多對特定應用非常重要的庫函數我們還沒有提供。幸運的是調用C甚至Python很容易。

Viral:我們需要一個調試器。我們需要一個更加用戶友好的性能分析工具。我們需要更多的庫。我們需要更多用戶。

《程序員》:你們有沒有從科學計算語言的演化中看到一些趨勢?從你們的角度來看,什么才是理想的科學計算語言(或系統)?

Alan:我相信Julia解放了科學計算,并將繼續如此。 我觀察過專家們通常用FORTRAN寫的算法,感受則是人們不能碰這些算法。修改的難度注定了這一點,且主要從心理上。在一個人人可以調整算法進行試驗的世界中,新創造將自由流淌。這是我最想看到的。

Jeff:長期以來我們看到語言系統中不斷增強的運行時靈活性。漸漸地,人們擁抱了動態內存分配、動態連接,然后是動態分派(如OOP)、垃圾回收和即時編譯。

Viral:我們的博客文章“為什么選擇Julia”說的正是這個問題。除此以外,編程語言實驗中還有一個有效使用多核和GPU的趨勢。



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247180.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247180.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247180.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

View Animation

轉載一篇關于view animation的文章 http://blog.csdn.net/nerohoop/article/details/7245909 補充:當啟用animation來改變值的時候,值是立刻就改變了的,然后才開始動畫。 轉載于:https://www.cnblogs.com/mystory/archive/2012/12/18/2824029…

編程能力的四種境界

人類心理學研究中的一個基礎支撐科目就是分析人的潛意識和意識。 弗洛伊德是最早的一位能夠清楚的認定和描述我們的心理活動“領域”的人。 在他這著名的一生的早期,他就指出我們的意識里分“潛意識”,“前意識”,“意識”。 如 果我們想能清…

ファイルアップロード関連のjQueryプラグイン10攻略

ファイルアップロード関連のjQueryプラグイン10ファイルアップロードといってもSWFを使ったりAJAXを使ったりと方法が色々あって、いろんなやり方ができるjQueryプラグインです。望みの挙動に近いものを選んでカスタマイズすれば作りたいものが最速で作れ…

HTTP報文(轉)

HTTP報文http://www.cnblogs.com/kissdodog/archive/2013/04/01/2993228.html之前寫過一篇HTML報文,但是感覺寫完之后還是不懂,最近終于有時間開始看《HTTP權威指南》,看完之后覺得還是比之前的理解更加深入了,提取HTTP報文出來做…

C#基礎-應用程序域

文章導讀同一臺計算上的應用程序是通過進程來隔離的,每個應用程序都是加載到不同的進程中,從而達到應用程序的互不影響。操作系統【OS】通過進程控制塊【PCB】感知進程的存在,分析【PCB】的數據結構可以發現,【PCB】維護進程運行的…

Java生鮮電商平臺-微服務入門與服務的拆分架構實戰

Java生鮮電商平臺-微服務入門與服務的拆分架構實戰 剛開始進入軟件行業時還是單體應用的時代,前后端分離的概念都還沒普及,開發的時候需要花大量的時間在“強大”的JSP上面,那時候SOA已經算是新技術了。現在,微服務已經大行其道&a…

詳解MTK系統中字符轉換問題

詳解MTK系統中字符轉換問題 2011-09-05 19:02 佚名 互聯網 字號:T | TMTK系統中字符轉換問題是本文要介紹的內容,主要是來了解并學習MTK中一些小案例的應用,具體內容來看本文詳解。 AD:2014WOT全球軟件技術峰會北京站 課程視頻發布…

Java生鮮電商平臺-微服務架構概述

Java生鮮電商平臺-微服務架構概述 單體架構存在的問題 在傳統的軟件技術架構系統中,基本上將業務功能集中在單一應用內,或者是單一進程中。盡管現代化的軟件架構理論以及設計原則已推廣多年,但實際技術衍化的速度遲緩并且變革動力不足。 其中…

Jensen不等式及其證明

? 詹森不等式以丹麥數學家約翰詹森(JohanJensen)命名。它給出積分的凸函數值和凸函數的積分值間的關系。 關于凸函數: if (-f)是凸函數(convex),則f是凹的(concave…

ios自帶NSURLConnection下載文件

//同步下載,同步請求的主要代碼如下 - (IBAction)downLoad:(id)sender { NSString *urlAsString"http://7jpnsh.com1.z0.glb.clouddn.com/TravelDemo.plist";//文件地址 NSURL *url[NSURL URLWithString:urlAsString]; NSURLRequest *request[NSURLRequest requestWi…

國外程序員整理的機器學習資源大全

本列表選編了一些機器學習領域牛B的框架、庫以及軟件(按編程語言排序)。 C 計算機視覺 CCV —基于C語言/提供緩存/核心的機器視覺庫,新穎的機器視覺庫 OpenCV—它提供C, C, Python, Java 以及 MATLAB接口,并支持Windo…

五款幫助創業者迅速熟悉互聯網創業的在線學習工具

相信很多有志青年都想借助互聯網開拓自己的事業,可是經常面臨一個很現實的問題——缺乏一定的專業知識和技能。沒關系,互聯網中的豐富教育資源就可以讓你迅速地跨越這一障礙,熟悉與創業相關的運營、管理、融資等操作技巧。下面介紹的五個在線…

C++ 中復雜的聲明

1、方法也是有類型的,方法的類型由返回類型和形參表決定。比如int F (int)的類型就是去掉方法名,int (int)。 2、對于方法類型,在返回類型和形參表之間,加上一個名稱F,就表示一個特定的方法F。 3、思考,如果…

caffe 下測試 MNIST數據

詳細說明可參考網頁:http://blog.csdn.net/wangchuansnnu/article/details/44341753http://blog.sina.com.cn/s/blog_49ea41a20102w4uu.htmlhttp://www.cnblogs.com/yymn/p/4553671.html caffe 下 mnist 進行實驗: MNIST,一個經典的手寫數字庫…

Java生鮮電商平臺-秒殺系統微服務架構設計與源碼解析實戰

Java生鮮電商平臺-秒殺系統微服務架構設計與源碼解析實戰 Java生鮮電商平臺- 什么是秒殺 通俗一點講就是網絡商家為促銷等目的組織的網上限時搶購活動 比如說京東秒殺,就是一種定時定量秒殺,在規定的時間內,無論商品是否秒殺完畢&#xff0c…

LInux 下安裝 python notebook 及指向路徑,運行計時,炫酷的深藍午夜主題,本地登陸遠程服務器

1. 安裝 pip工具 sudo apt-get install pyton-pip 2. 安裝ipython及其依賴包 sudo apt-get install ipython ipython-notebook 3. 安裝可選的附加工具(需要時間較長) sudo apt-get install python-matplotlib python-scipy python-pandas python-sympy python-nose 4. 測試i…

對TypeScript進行研究

1.npm install -g typescript 在編輯器,將下面的代碼輸入到greeter.ts文件里: function greeter(person) {return "Hello, " person; } let user "Jane User"; document.body.innerHTML greeter(user); 我們使用了.ts擴展名&…

caffe 提取特征并可視化(已測試可執行)及在線可視化

網絡結構在線可視化工具 http://ethereon.github.io/netscope/#/editor 參考主頁: caffe 可視化的資料可在百度云盤下載 鏈接: http://pan.baidu.com/s/1jIRJ6mU 提取密碼:xehi http://cs.stanford.edu/people/karpathy/cnnembed/ http://lijianch…

ncnn:提取所有層特征值

官方代碼托管地址&#xff1a;https://github.com/Tencent/ncnn 在Extractor類中添加以下方法&#xff1a; int Extractor::extract_all_blobs() {for (int blob_index 0; blob_index < blob_mats.size(); blob_index){Mat outMat;extract(blob_index, outMat);// write to…

Caffe + Ubuntu 15.04/16.04 + CUDA 7.5/8.0 在服務器上安裝配置及卸載重新安裝(已測試可執行)

本文參考如下: caffe 安裝所需的所有資源可在百度網盤下載 鏈接: http://pan.baidu.com/s/1jIRJ6mU 提取密碼&#xff1a;xehi 在服務器上為每個子用戶拷貝caffe 使用 Linux探索之旅 | 第一部分第四課&#xff1a;磁盤分區完成Ubuntu安裝 Ubuntu16.04 1080Ti深度學習環境配…