2013-09-25 20 views
10

私はJuliaを汎用科学計算言語(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はジュリアの著者の一人、昨年からの引用です。この戦略にはいくつかの難しさがありましたか?

ジュリアのほとんどは、自分自身で書かれ、その後解析され、型推論と にJITコンパイルされたので、一からシステム全体をブートストラップすることは、いくつかの 15〜20秒かかります。高速化するために、我々は を解析し、型を推測し、 型推論されたASTのシリアル化されたバージョンをファイルsys.jiにキャッシュする段階的なシステムを持っています。 juliaを実行すると、このファイルがロードされ、システムを実行するために が使用されます。しかし、LLVMコードまたはマシン のコードはsys.jiにキャッシュされます。したがって、LLVMジッタはすべて、juliaが起動するたびに を実行する必要があります。したがって、約2 秒かかります。

この2秒の起動遅延は非常に面倒です。私たちは を修正する計画を持っています。基本的な計画はJulia プログラムをバイナリにコンパイルできるようにすることです。実行可能な実行可能ファイルまたは.so/.dylib 共有ライブラリはのように他のプログラムから呼び出すことができます。他のCプログラムと同様に、バイナリの起動時間は になるため、2秒の起動遅延は消滅します。

+0

Juliaangリポジトリにチェックアウト可能なブランチがあります。 https://github.com/JuliaLang/julia/pull/4898。多少の問題が残っている可能性がありますので、自己責任でお試しください。これは、今後リリースされる0.3リリースに含まれる可能性があります。 – ivarne

答えて

7

は、私がコメントで述べたbranchは現在マージされているとジュリアは、これまで以上に、スタートアップ(と何もしない)のために最適化されています。

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

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

これは夜間のビルドで使用できるようになり、次の0.3リリースに含まれます。

+0

'' '時間ジュリア-e 'のprintln( "こんにちは")' こんにちは 本当1m35.137s ユーザーが のsys 1m33.604s ' '' を0m0.328sと私はジュリア0.5.0の午前そして、これがありますラズベリーパイではなく、16GiB RAMを搭載したコアi3マシン! –

+0

あなたのジュリアのインストールでは、sometingが間違っているようです。どのようなOSを使用していますか、どのようにju​​liaをインストールしましたか – 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のバージョンはバグです.2つのバージョンは同じ数を計算しません。コンパクトさを気にしていれば、 'fib = lambda x:1ならx <3 else fib(x-1)+ fib(x-2)'と書くことができます。文字。 – DSM

+0

JuliaとPythonのパフォーマンスを比較すると、結果は実行するタスクに大きく依存することを示しています。 – ivarne

+2

私は最も効率的なエコーを見つけようとしていません; -PIは、ジュリアのオーバーヘッドを減らす際に最先端技術が何であるか疑問に思っていました –

関連する問題