simple memory tools

This commit is contained in:
Mike Innes 2019-02-05 14:22:09 +00:00
parent 53875a85a1
commit d29e37eaaa
2 changed files with 25 additions and 0 deletions

View File

@ -67,6 +67,7 @@ include("numeric.jl")
include("lib/real.jl")
include("lib/array.jl")
include("forward.jl")
include("memory.jl")
"""
hook(f, x) -> x

24
src/tracker/memory.jl Normal file
View File

@ -0,0 +1,24 @@
function mem(x::Array, seen)
x in seen && return 0
push!(seen, x)
return sizeof(x)
end
fields(x) = map(f -> isdefined(x, f) ? getfield(x, f) : nothing, fieldnames(typeof(x)))
function mem(x, seen)
isbits(x) && return sizeof(x)
x in seen && return 0
push!(seen, x)
sum(x -> mem(x, seen), fields(x))
end
mem(x) = mem(x, IdSet())
@init @require CuArrays="3a865a2d-5b23-5a0f-bc46-62713ec82fae" begin
function mem(x::CuArray, seen)
x in seen && return 0
push!(seen, x)
return sizeof(x)
end
end