14

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

補遺:これは昨年の Julia の著者の 1 人からの引用ですこの戦略に難しさはありましたか?

Julia の大部分はそれ自体で記述され、解析、型推論、jit されるため、システム全体をゼロからブートストラップするには 15 ~ 20 秒ほどかかります。高速化するために、ステージングされたシステムを使用して、解析し、型を推測し、型を推測した AST のシリアル化されたバージョンをファイル sys.ji にキャッシュします。このファイルは読み込まれ、julia を実行するときにシステムを実行するために使用されます。ただし、sys.ji には LLVM コードやマシン コードはキャッシュされないため、julia が起動するたびにすべての LLVM ジッティングを実行する必要があり、これには約 2 秒かかります。

この 2 秒の起動遅延は非常に厄介であり、修正する計画があります。基本的な計画は、Julia プログラム全体をバイナリにコンパイルできるようにすることです。つまり、実行可能な実行可能ファイルか、単純な共有 C ライブラリであるかのように他のプログラムから呼び出すことができる .so/.dylib 共有ライブラリのいずれかです。バイナリの起動時間は他の C プログラムと同じなので、2 秒の起動遅延はなくなります。

4

2 に答える 2

8

残念ながら、Julia は現在起動に多くの時間を費やしているため、bash スクリプトで非常に小さな問題に使用することはほとんど不可能です。ループを使用して複数回実行する複雑な例では、おそらく julia に有利な結果が得られるでしょうが、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
于 2013-09-26T14:31:10.603 に答える