簡體   English   中英

Julia 好像很慢

[英]Julia seems to be very slow

我正在運行這個問題中顯示的代碼。 我希望它第二次和第三次運行得更快(第一次運行需要時間來編譯代碼)。 但是,它似乎花費了與第一次相同的時間。 我怎樣才能讓這段代碼運行得更快?

編輯:我通過在 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

I am using Julia on Debian Stable Linux: Debian ⛬ julia/1.5.3+dfsg-3

在 Julia 中,每次使用單個 Julia session 運行時都會編譯包。 因此,啟動一個新的 Julia 進程意味着每次Plots.jl都會被編譯。 這是一個相當大的 package,所以編譯需要很長時間。

為了規避它,使用PackageCompiler 並將 Plots.jl 編譯成 static 系統映像,供 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。 基本上,擁有 sysimage 意味着您每次更新 Julia 軟件包時都需要重建它,所以我會考慮這種方法而不是生產而不是開發(取決於您的具體情況)。

我遇到了問題,幾乎回到了 Python 但現在我在 REPL 中使用 include 運行腳本。 這種方式要快得多。

注意:第一次運行會很慢,但是即使編輯了腳本,在同一個 REPL session 中的后續運行也會很快。

Fedora 36、Julia 1.8.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM