PackageCompiler.jlでJuliaの起動を高速化する

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の詳細については、プロジェクトリポジトリの説明を参照してください。








All Articles