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 arb
s 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
arf_mul
is a macro
https://github.com/fredrik-johansson/arb/blob/038c3a3e0152840b311f82926855688b3a9dadfd/arf.h#L910
I've added a work-around
Yes, now I remember that. Good to have the work around. Please post that itself too.