Dengan masuk ke situs web resmi bahasa pemrograman Julia , Anda dapat melihat pernyataan: "Julia cepat!". Namun, dalam praktiknya, pengguna baru dihadapkan dengan masalah lambatnya memuat modul, terutama yang grafis [ 1 , 2 ]. Secara dialektik, alasan untuk memulai yang lambat adalah penggunaan kompilasi JIT , penggunaan yang memastikan kinerja bahasa yang tinggi. Jika diinginkan, fitur JIT dapat ditemukan di artikel lain . Artikel ini akan membahas tugas yang lebih praktis - cara mempercepat peluncuran modul di Julia menggunakan PackageCompiler.jl .
Artikel ini menggunakan julia v1.1.0 . Selain itu, metode ini diuji pada julia v1.0.3 .
Untuk mengevaluasi runtime, skrip sepele digunakan:
@time using Plots x = 0:0.01:10000 y = @. sin(Ο*x) @time plot(x,y)
Dengan menjalankan skrip ini pada stok julia, nilai-nilai berikut diperoleh:
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)
Seperti yang Anda lihat, eksekusi pertama dari perintah plot
berlangsung selama 14 detik. Mengikutinya sudah 0,01 s.
Mari kita coba memperbaiki indikator-indikator ini. Untuk memulai, instal modul PackageCompiler:
import Pkg Pkg.add("PackageCompiler")
Selanjutnya, uji build dependency dari modul Plots
:
import Pkg Pkg.add("Arpack") Pkg.build("Arpack")
Jika eksekusi perintah terakhir terputus dengan kesalahan
ERROR: LoadError: LibraryProduct(...) is not satisfied, cannot generate deps.jl!
, lalu Anda menjadi korban dari Edisi # 5 . Masalahnya terkait dengan penggunaan perpustakaan dinamis eksternal dan harus dipecahkan setelah integrasi BinaryProvider . Sebagai solusi sementara, atas saran blegat , kami akan mengumpulkan sendiri perpustakaan :
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/
Setelah melakukan manipulasi ini, kesalahan akan hilang:
import Pkg Pkg.build("Arpack")
Saatnya untuk mengkompilasi paket Plots
:
import Pkg Pkg.add("Plots") using PackageCompiler compile_package("Plots")
Kompilasi berlangsung cukup lama dengan banyak teks di konsol. Perhatikan baris terakhir dari log:
β 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"
Ini menunjukkan lokasi gambar yang dikompilasi dan petunjuk tentang cara memulainya.
Jalankan skrip pengujian menggunakan gambar ini:
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)
Dengan demikian, waktu dimulainya fungsi plot
berkurang dari 14 detik menjadi 0,03 detik.
Metode ini dapat digunakan untuk mengekspor gambar dari beberapa perpustakaan, memodifikasi gambar sistem, dan menyusun program statis. Untuk mempelajari lebih lanjut tentang PackageCompiler.jl, lihat deskripsi di repositori proyek .