【问题标题】:Why julia takes long time to import a package?为什么 julia 需要很长时间才能导入包?
【发布时间】:2020-07-06 09:21:31
【问题描述】:

我非常关心性能。因此,我将其创建为关于第一次调用或导入包时的延迟的问题。这可能是一个愚蠢的问题。

当我第一次为 ex 添加包时,Plots 会消耗一些时间来构建包。 再次,当我第一次在我的笔记本上导入包时,也花了一些时间(~1 分钟)说Precompiling message 导入包后,当我点击plot()时,这也会消耗一些时间(30s - 60s),最后返回一个情节。

一旦我使用了绘图功能,下次使用时不会花费太多时间来产生结果。

每当我重新启动笔记本时都会发生这种延迟。

我猜它是在执行之前编译函数。因为与 python 不同,julia 不是脚本语言。所以,它应该经过编译。但是,为什么每次重启笔记本都会出现延迟?

无论如何我可以抑制这种延迟吗? 无论如何,我可以一次预编译所有内容,以便下次在病房中我看不到任何延迟,而不必担心笔记本或 Julia 终端中的内核重启。 为什么会发生延迟?完全是因为编译时间还是取决于我的机器?

【问题讨论】:

  • 什么 julia 版本?较新版本的 Julia 重新进行预编译的次数较少,但 1.0 LTS 没有该功能。
  • 我使用的是 julia 1.4.2
  • 好吧酷,那么至少你没有那么痛苦Stale Cache Recompiling

标签: julia


【解决方案1】:

您可以做两件事来减少延迟:

  1. 使用 Julia 1.5.0(截至今天的测试版)- 它动态地允许对包使用不同的优化级别,Plots.jl 正在利用这一点将首次绘图的时间减少一半以上。这确实是一个唾手可得的成果 - 更新 Julia。以下是我笔记本电脑上的测量结果:
julia> @time using Plots
 16.816181 seconds (14.46 M allocations: 854.353 MiB, 2.31% gc time)

julia> @time Plots.plot(sin.(1:0.25:7))
  4.292128 seconds (4.70 M allocations: 243.866 MiB, 2.01% gc time)
  # this waits another 7s before the plot actually appears on screen

那些时间不是很好,但可以接受。

  1. Plots 构建到您的系统映像中(有关详细信息,请参阅https://julialang.github.io/PackageCompiler.jl/dev/examples/plots/
using PackageCompiler
create_sysimage(:Plots, sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")

这将您的首次绘图时间缩短到半秒以下。还有一个缺点是 Julia 解释器 (REPL) 需要 400 毫秒以上的时间来启动,并且在启动 Julia 时您需要使用标志 --sysimage sys_plots.so(或 Windows 上的 --sysimage sys_plots.dll)。预编译包有时也会带来其他警告(例如,每次更新包都需要重新编译等)。

【讨论】:

    【解决方案2】:

    这完全是因为 julia 所做的编译和优化。你可以change the optimization level。这可以让你的第一个情节更快一点。但也许也不是。较小的级别不太优化。为此,请使用 -O, --optimize={0,1,2,3} 选项启动 julia,默认为 2

    $ julia -O=1
    

    Time to first plot 是一个触动很多人的问题。由于主题的性质,它必须由许多志愿者来解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-08
      • 2013-02-06
      • 1970-01-01
      相关资源
      最近更新 更多