2013-09-25 40 views
10

我正在探索使用朱莉婭作爲通用科學計算語言(而不是python),但它的啓動時間非常緩慢。慢朱莉婭啓動時間

有什麼辦法可以加速這個嗎?

$ time python -c 'print "Hello"' 
Hello 

real 0m0.030s 
user 0m0.018s 
sys 0m0.010s 

$ time julia -e 'println("Hello")' 
Hello 

real 0m4.614s 
user 0m4.644s 
sys 0m0.116s 

附錄Here是從去年朱莉婭作者之一的報價。這個策略有沒有困難?

大多數朱莉婭寫入本身,然後解析,類型推斷和 即時編譯,因此從頭自舉整個系統需要一些 15-20秒。爲了加快速度,我們有一個分階段系統,我們在這個系統中解析,類型推斷,然後在文件sys.ji中緩存一個序列化版本的 類型推斷的AST。然後加載該文件,並在運行茱莉亞時使用該文件運行系統。沒有LLVM代碼或機器 代碼被高速緩存在sys.ji中,但是,所有LLVM jitting仍然需要 在每次啓動julia時完成,因此需要大約2 秒。

這2秒啓動延遲是相當惱人的,我們有一個 修復它的計劃。基本計劃是能夠將整個Julia 程序編譯爲二進制文件:可以運行的可執行文件或可以從其他程序調用的.so/.dylib 共享庫,就好像它們只是共享C庫一樣。與任何其他C程序一樣,二進制文件的啓動時間將爲 ,因此2秒啓動延遲將消失。

+0

現在Julialang存儲庫中有一個分支可以檢出。 https://github.com/JuliaLang/julia/pull/4898。可能還有一些問題仍然存在,所以請自行承擔風險。它可能會包含在即將發佈的0.3版本中。 – ivarne

回答

7

我在註釋中提到的branch現在已經合併,Julia是用於調試(無所事事)更優化,比以往任何時候。

$> time julia -e 'println("Hello")' 
Hello 

real 0m0.622s 
user 0m1.013s 
sys  0m0.624s 

這是現在夜間的版本,並將包括在下一個0.3版本。

+0

'''時間朱莉婭-e '的println( 「你好」)' 你好 真正1m35.137s 用戶0m0.328s SYS 1m33.604s ''' ,我在茱莉亞0.5.0這是一款帶有16GiB RAM而不是覆盆子pi的核心i3機器! –

+0

似乎你的朱莉婭安裝有些問題。你使用的是什麼操作系統,你是如何安裝朱莉婭 – ivarne

+0

我使用的是Ubuntu 16.04.1 LTS。我從「.tar.gz」文件安裝它。 –

7

不幸的是,Julia目前使用大量的時間來啓動,所以幾乎不可能在bash腳本中使用它來處理非常小的問題。你可能會得到一個更有利於朱利亞的結果,這個複雜的例子多次使用循環來做事情,但如果以2-4秒的時間開始,它需要一個很大的問題纔能有足夠的時間趕上。如果啓動時間對您的科學計算來說最重要,那麼Julia還沒有準備好。

一個同樣不公平的比較是使用愚蠢的遞歸公式計算斐波那契數。如果你高於26,它會變得更糟。另外注意Julia版本的代碼是多麼緊湊。

>>> ivarne~/dev/julia$ time julia -e 'fib(x) = x<2?1:fib(x-1)+fib(x-2);println(fib(36))' 
24157817 

real 0m2.763s 
user 0m2.776s 
sys  0m0.093s 
>>> time python -c $'def fib(x):\n if x<2: return 1\n else: return fib(x-1)+ fib(x-2);\nprint fib(36)' 
24157817 

real 0m8.371s 
user 0m8.336s 
sys  0m0.025s 

當你問一個加快問題的方法;這就是:

>>> time echo "Hello" 
Hello 

real 0m0.000s 
user 0m0.000s 
sys  0m0.000s 
+0

我不確定比較應該證明什麼。 Python版本是buggy - 兩個版本甚至不計算相同的數字! - 如果你關心的是緊湊性,你可以寫成'fib = lambda x:1 if x <3 else fib(x-1)+ fib(x-2)',儘管通常Python程序員關心正確性和清晰度字符。 – DSM

+0

我試圖證明,當您比較Julia和Python之間的性能時,結果高度依賴於您執行的任務。 – ivarne

+2

我沒有試圖找到最有效的回聲; -PI只是想知道最新的技術是如何降低茱莉亞的開銷 –