重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Julia性能分析工具有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
成都创新互联是一家专业提供华蓥企业网站建设,专注与做网站、网站设计、H5响应式网站、小程序制作等业务。10年已为华蓥众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
学习 Julia 语言的一个主要原因是看中它的高效率,那么我们怎么才能知道自己写的代码的性能呢?今天我们来看看关于 Julia 代码性能分析的一些工具。
# 先看一下 Julia 版本
versioninfo()
Julia Version 1.0.5
Commit 3af96bcefc (2019-09-09 19:06 UTC)
Platform Info:
OS: Linux (x86_64-pc-linux-gnu)
CPU: Intel(R) Core(TM) i7-7800X CPU @ 3.50GHz
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-6.0.0 (ORCJIT, skylake)
Environment:
JULIA_PARDISO = /home/ubuntu/Pardiso
我们先定义一个函数,高斯分布的概率密度函数,用来测试下面的性能分析代码。
Base.@irrational sqrt2π 2.5066282746310005024 sqrt(big(π) * 2.0)
Base.@irrational invsqrt2π 0.3989422804014326779 inv(big(sqrt2π))
function norm_pdf(x::Array{Float64,1};μ=0.0,σ=1.0)
exp.(-(x.-μ).^2/2σ)*invsqrt2π/σ
end
norm_pdf (generic function with 1 method)
x = 10rand(10000).-5
a = norm_pdf(x)
min(a...), max(a...)
(1.4871534608097617e-6, 0.3989417980536153)
# `@time` 是查看运行时间的最简单方法
@time norm_pdf(x);
0.000411 seconds (17 allocations: 469.406 KiB)
Julia 是 Just-In-Time(JIT)编译型语言,即每个语句都是使用编译后的机器代码运行的。
这意味着,如果测算了首次运行的 Julia 代码运行时间,其实它包括了编译此代码所需的时间(和内存使用情况)。
因此,要查看一段 Julia 代码的运行时间,应该在使用下面的分析代码之前至少先运行代码一次。
# 首次运行代码时 Julia 会编译代码,时间会长一些,因此从第二次开始计时
# 比如第一次运行耗时为
0.034050 seconds (72.64 k allocations: 3.861 MiB)
# 第二次运行耗时为
0.000441 seconds (19 allocations: 469.406 KiB)
# `@timev` 的功能比 @time 增加了内存分配。
@timev norm_pdf(x);
0.000398 seconds (17 allocations: 469.406 KiB)
elapsed time (ns): 398107
bytes allocated: 480672
pool allocs: 11
malloc() calls: 6
# `@elapsed` 直接返回运行时间。
t = @elapsed norm_pdf(x)
0.000442561
# 使用 BenchmarkTools 包显示更多信息。
using BenchmarkTools
@benchmark norm_pdf(x)
BenchmarkTools.Trial:
memory estimate: 469.25 KiB
allocs estimate: 13
--------------
minimum time: 117.534 μs (0.00% GC)
median time: 120.906 μs (0.00% GC)
mean time: 134.234 μs (9.14% GC)
maximum time: 40.077 ms (99.66% GC)
--------------
samples: 10000
evals/sample: 1
# @btime 返回最小时间和内存分配。
@btime norm_pdf(x);
118.484 μs (13 allocations: 469.25 KiB)
# @elapsed 返回最小时间,以秒为单位的。
@belapsed norm_pdf(x)
0.000118526
好了,以后写代码时我们会经常用到这些工具,比如 BenchmarkTools
,时不时查验一下自己代码的性能,用于比较或改进。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。