FluxML / Alloc.jl

26 stars 1 forks source link

Alloc.jl

Alloc.jl makes Julia's memory allocator customisable. Currently it provides the ability to bump allocate everything within a block of code.

julia> using IRTools

julia> using Alloc: Buffer, run, profile

julia> function f()
         x = rand(100, 100)
         y = rand(100)
         x*y
       end
f (generic function with 1 method)

julia> @allocated f()
81872

julia> profile(f); # Figure out how big our buffer should be
[ Info: Allocated 81600 bytes

julia> const buf = Buffer(10^6);

julia> @allocated run(f, buf)
1280

The bump allocator has the downside that no memory is ever freed until f is finished. The advantage is that allocation is really fast (effectively the same as stack allocation of arrays), so if your memory usage is reasonably predictable you can just bump allocate within your main loop.