JeffreySarnoff/ArbNumerics.jl

specialized arithmetic and in-place functions

kalmarek opened this issue · 8 comments

by doing promote stuff simple arithmetic allocates a lot:

julia> z = ArbComplex(2)
2.0 + 0im

julia> @time z+1;
  0.000023 seconds (11 allocations: 600 bytes)

by exploiting arbs acb_add_si this can be cut to

julia> @time z+1;
  0.000010 seconds (5 allocations: 272 bytes)

Mutable arithmetic/ funcions

I'd like to see three-argument arithmetic (along the lines of mul!(out, x, y)). (related: #6)

For all the functions wrapped through @eval (ex. most of elementary.jl) we could easily expose the two argument versions

f!(out, args...) = ... #ccall to arb
function f(args...)
    res = ... #allocate the result;
    f!(res, args...)
    return res
end

Again, this for the purpose of writing more functions and cutting on the allocations/time (especially handy when evaluating the integrand)

will you accept such changes?

yes, I by no means intend to replace promote versions; These are supposed to be the fast-track paths for Arb & Int arithmetic

do you know why arb has arf_mul in its docs, but the library does not export the symbol??

(just getting back into the game -- will ask)

and I will accept this as a PR

Yes, now I remember that. Good to have the work around. Please post that itself too.