JuliaMath / HCubature.jl

pure-Julia multidimensional h-adaptive integration
Other
153 stars 25 forks source link

Performance versus `quadgk` #41

Open hammerfunctor opened 2 years ago

hammerfunctor commented 2 years ago

Hi, I made some benchmarks and noted that for 1-d integral quadgk is way more fast than hquadrature. Here is a simple example

julia> using HCubature, BenchmarkTools

julia> f() = hquadrature(t -> exp(-t)/t, 1, 100000)
f (generic function with 1 method)

julia> g() = HCubature.QuadGK.quadgk(t -> exp(-t)/t, 1, 100000)
g (generic function with 1 method)

julia> @btime f()
  26.478 μs (1131 allocations: 31.97 KiB)
(0.21938393439552029, 1.3846093405775578e-9)

julia> @btime g()
  10.078 μs (339 allocations: 8.02 KiB)
(0.2193839343955203, 1.3846093658126016e-9)

Is this difference on algorithm level or just because quadgk is internally optimized?

Thanks!

stevengj commented 2 years ago

The algorithms (in 1d) are essentially the same; probably there are just some untapped optimization opportunities in HCubature to reduce allocations.