Juliaプログラミング言語の公式Webサイトにアクセスすると、「Julia is fast!」というステートメントが表示されます。 ただし、実際には、新しいユーザーは、モジュール、特にグラフィック[ 1、2 ]の読み込みが遅いという問題に直面しています。 弁証法的に、スロースタートの理由は、 JITコンパイルの使用であり、これを使用すると、高い言語パフォーマンスが保証されます。 必要に応じて、JITの機能は他の記事に記載されています。 この記事では、より実用的なタスク-PackageCompiler.jlを使用してJuliaでモジュールの起動を高速化する方法について説明します。
この記事ではjulia v1.1.0を使用します。 さらに、メソッドはjulia v1.0.3でテストされました 。
ランタイムを評価するために、簡単なスクリプトが使用されました。
@time using Plots x = 0:0.01:10000 y = @. sin(π*x) @time plot(x,y) # , @time plot(x,y) # ,
ストックjuliaでこのスクリプトを実行すると、次の値が取得されます。
2.804964 seconds (5.03 M allocations:x 291.243 MiB, 5.35% gc time) 13.546407 seconds (45.64 M allocations: 2.232 GiB, 9.00% gc time) 0.013167 seconds (2.14 k allocations: 7.788 MiB)
ご覧のとおり、 plot
コマンドの最初の実行は信じられないほど14秒間続きます。 彼に続くのは、すでに0.01秒です。
これらの指標を改善してみましょう。 開始するには、PackageCompilerモジュールをインストールします。
import Pkg Pkg.add("PackageCompiler")
次に、 Plots
モジュールの依存ビルドをテストします。
import Pkg Pkg.add("Arpack") Pkg.build("Arpack")
最後のコマンドの実行がエラーで中断された場合
ERROR: LoadError: LibraryProduct(...) is not satisfied, cannot generate deps.jl!
、あなたは問題#5の犠牲者になりました。 この問題は外部動的ライブラリの使用に関連しており、 BinaryProviderの統合後に解決する必要があります。 一時的な解決策として、 blegatのアドバイスに従って、 ライブラリを自分で組み立て ます 。
git clone https://github.com/opencollab/arpack-ng.git /tmp/arpack && cd /tmp/arpack git checkout 3.5.0 bash bootstrap ./configure --enable-mpi --enable-shared make cp SRC/.libs/libarpack.so.2.0.0 ~/.julia/packages/Arpack/UiiMc/deps/usr/lib/
これらの操作を実行すると、エラーが消えます。
import Pkg Pkg.build("Arpack")
Plots
パッケージをコンパイルします:
import Pkg Pkg.add("Plots") using PackageCompiler compile_package("Plots")
コンパイルは、コンソールに多くのテキストを表示するだけで十分に続きます。 ログの最後の行に注意してください。
┌ Info: Not replacing system image. └ You can start julia with `julia -J /home/user/.julia/packages/PackageCompiler/oT98U/sysimg/sys.so` at a posix shell to load the compiled files. "/home/user/.julia/packages/PackageCompiler/oT98U/sysimg/sys.so"
コンパイルされたイメージの場所と開始方法のヒントを示します。
この画像を使用してテストスクリプトを実行します。
julia -J /home/user/.julia/packages/PackageCompiler/oT98U/sysimg/sys.so /tmp/test.jl
0.000251 seconds (501 allocations: 26.766 KiB) 0.028105 seconds (22.55 k allocations: 8.847 MiB) 0.017211 seconds (2.14 k allocations: 7.788 MiB, 18.16% gc time)
したがって、 plot
関数の最初の開始時間は14秒から0.03秒に短縮されました。
このメソッドは、いくつかのライブラリのイメージをエクスポートし、システムイメージを変更し、静的プログラムをコンパイルするために使用できます。 PackageCompiler.jlの詳細については、プロジェクトリポジトリの説明を参照してください。