Julia 包在第一次运行时加载速度非常慢

Hél*_*ins 8 performance package julia

我在 Linux 5.4.0 下使用 Julia 1.5.2 并等待了大约 15 分钟的Pkg.add("DifferentialEquations"). 然后我在 Jupyter Notebook 中启动内核并运行以下代码。执行需要 1 分钟(实际上我第一次执行此操作需要 225 秒)。

t = time()
using Printf
using BenchmarkTools
using OrdinaryDiffEq
using Plots
tt = time() - t
@sprintf("It took %f seconds to import Printf, BenchmarkTools, OrdinaryDiffEq and Plots.", tt)
# It took 58.545894 seconds to import Printf, BenchmarkTools, OrdinaryDiffEq and Plots.
Run Code Online (Sandbox Code Playgroud)

最后,我做了和上面一样的,但是对于每个包。这是摘要:

Printf:           0.004755973815917969
BenchmarkTools:   0.06729602813720703
Plots:            19.99405598640442
OrdinaryDiffEq:   19.001102209091187
Run Code Online (Sandbox Code Playgroud)

我从知道这里Pkg在过去慢,但我认为有15分钟不是在所有正常的安装时间。不过,这不是我的大问题。

我知道 Julia 需要在每次启动内核或加载某个包时编译所有内容。但这显然不是编译时间,而是编译永恒。

谁能弄清楚为什么这会如此缓慢?而且,如果这是正常的,那岂不是更好地提供预编译软件包Pkg,如numpy和朋友在Python?或者至少在第一个永远编译using

谢谢!


我的完整平台信息:

Julia Version 1.5.2
Commit 539f3ce943 (2020-09-23 23:17 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, skylake)
Run Code Online (Sandbox Code Playgroud)

And*_*erg 6

当提到julia-lang时,这个问题通常称为延迟首次绘图时间 (TTFP)。使用这些关键字时您可以找到一些讨论。

“分析 Julia 中编译器延迟的来源:方法失效”一文中评估了最近对该问题的分析

截至撰写本文时(2020 年底,稳定版本 v1.5.3),还没有通用的解决方案,但讨论了大规模预编译包而不是 JIT 的策略,但取得了一定的成功。