Performance 长时间第一次与牛虻密谋

Performance 长时间第一次与牛虻密谋,performance,math,julia,Performance,Math,Julia,我用Julia创建了一个简单的绘图示例 using Gadfly draw(SVG("example.svg", 10cm, 10cm), plot(x=rand(10), y=rand(10)) ) 并以时间julia example.jl的形式运行,用27秒完成。这是正常的行为吗?有可能加快速度吗 最新的Julia 0.5.2和Pkg。我不是专家,所以对此要小心谨慎,但你是draw和SVG函数是在第一次运行时编译的,这就是为什么运行时间很长的原因。 如果您再次调用该函数,所需时间将大大

我用Julia创建了一个简单的绘图示例

using Gadfly
draw(SVG("example.svg", 10cm, 10cm),
  plot(x=rand(10), y=rand(10))
)
并以
时间julia example.jl
的形式运行,用
27
秒完成。这是正常的行为吗?有可能加快速度吗


最新的Julia 0.5.2和Pkg。

我不是专家,所以对此要小心谨慎,但你是
draw
SVG
函数是在第一次运行时编译的,这就是为什么运行时间很长的原因。 如果您再次调用该函数,所需时间将大大减少。首先编译函数调用是要付出代价的,但是以后所有的执行都非常快

我修改了you's脚本以测量在不同通话中花费的时间:

@time using Gadfly
@time draw(SVG("example.svg", 10cm, 10cm),
  plot(x=rand(10), y=rand(10))
)
@time draw(SVG("example2.svg", 10cm, 10cm),
  plot(x=rand(10), y=rand(10))
)
使用
julia example.jl
从控制台运行此命令,可以得到以下信息:

$ julia example.jl
2.728577 seconds (3.32 M allocations: 141.186 MB, 10.29% gc time)
20.434172 seconds (27.48 M allocations: 1.109 GB, 1.95% gc time)
0.023084 seconds (32.59 k allocations: 1.444 MB)

我曾尝试使用@daycaster建议的
GR.jl
执行相同的示例,并在一台Windows 10 64位笔记本电脑上获得了3.3秒:

PS C:\Users\dell\plot_example> cat plot.jl
using GR
plot(rand(10), rand(10), size = (500, 500))
savefig("plot.svg")

PS C:\Users\dell\plot_example> Measure-Command {julia plot.jl}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 3
Milliseconds      : 382
Ticks             : 33822083
TotalDays         : 3.91459293981481E-05
TotalHours        : 0.000939502305555556
TotalMinutes      : 0.0563701383333333
TotalSeconds      : 3.3822083
TotalMilliseconds : 3382.2083
版本和CPU:

PS C:\Users\dell\plot_example> julia -q
julia> VERSION
v"0.5.1"

julia> Sys.cpu_info()[]
Intel(R) Core(TM) i5-6300HQ CPU @ 2.30GHz:
        speed         user       nice        sys       idle        irq ticks
     2304 MHz   18360406          0   10161406  218911218    2123421 ticks
示例图:


是的,这很正常。不过,只有当你装入包裹时才可以。是的。Julia最有用的功能是拥有一个长时间使用的开放会话,而不是运行一个可以立即打开和关闭会话的快速退出终端脚本。也就是说,这主要是密谋,需要很长时间。我想说的是。我一直在策划。但我通常在互动式REPL工作。听起来您有开发脚本的习惯,然后从bash运行该脚本。这很好,但这不是与茱莉亚合作的推荐方式。尽管它的名字叫“牛虻”,但它从来都不是最快的密谋方式。看一看GR.的总结,它总结了各种软件包的一些优点和缺点。注意,没有提到Gadfly…Plots也不是最快的加载程序,尽管它在master(已激活预编译)上有很大帮助。但是在第一个绘图之后,绘图(例如GR)实际上是即时的。这意味着它迎合了不同的编程习惯。只要你保持会话打开,你就不会感觉到。也就是说,如果你自己开发一个包,你可以通过Juno使用模块组织来避免重新加载时间。我不知道这是否是你想做的?“是的,但我也很在乎第一次。如果你在每次脚本更改后都要等待20-30秒,这使得快速开发非常困难,“我不知道你从哪里得到的。每次打开Julia时都需要重新编译Gadfly,而不是每次更改脚本时。这有很大的区别。但如果第一次策划事件,不要使用牛虻。那不是适合这份工作的图书馆。改用PyPlot或GR。这与朱莉娅无关,而是图书馆的问题。@AlexeyPetrushin我恐怕我最好试试别的办法,而不是与之抗争。所以你只是想试试Julia是否能像你已经学过的那样工作?我想建议你学会不要尝试。:)那么长的启动时间主要与没有预编译的包有关。当包被预编译时,第一次到X的时间急剧下降。一些旧的软件包还没有更新为使用预编译,我相信这会导致Gadfly的加载速度慢。通过预编译,第一次“使用X”的速度会很慢,但随后会被缓存,并且在所有会话上都会很快,因此您不必保持会话处于打开状态。