بالانتقال إلى الموقع الرسمي للغة برمجة جوليا ، يمكنك رؤية العبارة: "جوليا سريعة!". ومع ذلك ، في الممارسة العملية ، يواجه المستخدمون الجدد مشكلة التحميل البطيء للوحدات النمطية ، وخاصة الرسوم البيانية [ 1 ، 2 ]. جدليًا ، السبب في البداية البطيئة هو استخدام ترجمة JIT ، والتي يضمن استخدامها أداءً عاليًا في اللغة. إذا رغبت في ذلك ، يمكن العثور على ميزات JIT في مقالات أخرى . تناقش هذه المقالة مهمة أكثر عملية - كيفية الإسراع في إطلاق الوحدات النمطية في جوليا باستخدام PackageCompiler.jl .
يستخدم هذا المقال جوليا v1.1.0 . بالإضافة إلى ذلك ، تم اختبار الطريقة على جوليا v1.0.3 .
لتقييم وقت التشغيل ، تم استخدام برنامج نصي تافه:
@time using Plots x = 0:0.01:10000 y = @. sin(π*x) @time plot(x,y)
عن طريق تشغيل هذا البرنامج النصي في جوليا الأسهم ، يتم الحصول على القيم التالية:
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)
وهكذا ، تم تقليل وقت البدء الأول لوظيفة الرسم من 14 ثانية إلى 0.03 ثانية.
يمكن استخدام هذه الطريقة لتصدير صور العديد من المكتبات وتعديل صورة النظام وتجميع البرامج الثابتة. لمعرفة المزيد حول PackageCompiler.jl ، ارجع إلى الوصف الموجود في مستودع المشروع .