茱莉亚似乎很慢



我正在运行这个问题中显示的代码。我希望它第二次和第三次运行得更快(第一次运行时编译代码需要时间(。然而,它似乎花费了与第一次相同的时间。如何使此代码运行得更快?

编辑:我在Linux终端上发出命令运行代码:julia mycode.jl

我试着按照@Przemyslaw Szufel的回答中的说明进行操作,但出现了以下错误:

julia> create_sysimage(["Plots"], sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")
ERROR: MethodError: no method matching create_sysimage(::Array{String,1}; sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")
Closest candidates are:
create_sysimage() at /home/cardio/.julia/packages/PackageCompiler/2yhCw/src/PackageCompiler.jl:462 got unsupported keyword arguments "sysimage_path", "precompile_execution_file"
create_sysimage(::Union{Array{Symbol,1}, Symbol}; sysimage_path, project, precompile_execution_file, precompile_statements_file, incremental, filter_stdlibs, replace_default, base_sysimage, isapp, julia_init_c_file, version, compat_level, soname, cpu_target, script) at /home/cardio/.julia/packages/PackageCompiler/2yhCw/src/PackageCompiler.jl:462
Stacktrace:
[1] top-level scope at REPL[25]:1

我在Debian Stable Linux上使用Julia:Debian⛬julia/1.5.3+dfsg-3

In Julia包每次在单个Julia会话中运行时都会进行编译。因此,开始一个新的Julia过程意味着每次Plots.jl都被编译。这是一个相当大的包,因此编译需要相当长的时间。

为了避免这种情况,请使用PackageCompiler并将Plots.jl编译成一个静态系统映像,供Julia 稍后使用

基本步骤包括:

using PackageCompiler
create_sysimage(["Plots"], sysimage_path="sys_plots.so", precompile_execution_file="precompile_plots.jl")

完成后,你需要运行你的代码作为:

julia --sysimage sys_plots.so mycode.jl

类似地,您可以将MultivariateStatsRDatasets添加到生成的系统映像中,但我认为它们不会造成任何显著的延迟。

请注意,如果后续运行是开发过程的一部分(而不是生产系统实现(,并且您正在开发Julia模块,那么您可以考虑在开发过程中使用Revise.jl,而不是预编译系统映像。基本上,拥有sysimage意味着每次更新Julia包时都需要重新构建它,所以我会将这种方法用于生产而非开发(取决于您的确切场景(。

我遇到了这个问题,几乎回到了Python,但现在我在REPL中运行包含的脚本。这条路要快得多。

注意:第一次运行会很慢,但即使脚本经过编辑,在同一REPL会话中的后续运行也会很快。

Fedora 36,Julia 1.8.1

最新更新