Skip to content

Commit 7e329f3

Browse files
fix perf issue loadmodel! (#2241)
* fix perf issue loadmodel! * reinstate filter * cleanup * cleanup
1 parent 11c3d06 commit 7e329f3

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

src/loading.jl

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
1-
loadleaf!(dst, src, err) = dst
2-
loadleaf!(dst::AbstractArray, src, err) =
1+
loadleaf!(dst, src) = dst
2+
loadleaf!(dst::AbstractArray, src) =
33
error("Tried to copy $src into an array destination; this is not allowed.")
4-
loadleaf!(dst, src::AbstractArray, err) =
4+
loadleaf!(dst, src::AbstractArray) =
55
error("Tried to copy an array to $dst; this is not allowed.")
6-
function loadleaf!(dst::AbstractArray, src::Bool, err)
6+
7+
function loadleaf!(dst::AbstractArray, src::Bool)
78
if iszero(src)
89
dst .= src
910
else
1011
error("Cannot copy boolean parameter == true to non-zero parameter.")
1112
end
1213
return dst
1314
end
14-
loadleaf!(dst::Bool, src::AbstractArray, err) = iszero(dst) ? dst :
15+
16+
loadleaf!(dst::Bool, src::AbstractArray) = iszero(dst) ? dst :
1517
error("Cannot copy non-zero parameter to boolean parameter == true.")
16-
function loadleaf!(dst::AbstractArray, src::AbstractArray, err)
18+
19+
function loadleaf!(dst::AbstractArray, src::AbstractArray)
20+
err = DimensionMismatch("Tried to load size $(size(src)) array into size $(size(dst))")
1721
(size(dst) == size(src)) || throw(err)
1822
copyto!(dst, src)
1923
end
@@ -82,20 +86,19 @@ Likewise, copying a `src` value of `false` to any `dst` array is valid,
8286
but copying a `src` value of `true` will error.
8387
"""
8488
function loadmodel!(dst, src; filter = _ -> true, cache = Base.IdSet())
85-
ldsts = _filter_children(filter, functor(dst)[1])
86-
lsrcs = _filter_children(filter, functor(src)[1])
89+
ldsts = _filter_children(filter, Functors.children(dst))
90+
lsrcs = _filter_children(filter, Functors.children(src))
8791
(keys(ldsts) == keys(lsrcs)) ||
88-
throw(ArgumentError("Tried to load $src into $dst but the structures do not match."))
92+
throw(ArgumentError("Tried to load $(keys(lsrcs)) into $(keys(ldsts)) but the structures do not match."))
8993

90-
err = DimensionMismatch("Tried to load $src into $dst but the parameter sizes do not match.")
9194
foreach(ldsts, lsrcs) do ldst, lsrc
9295
if ldst in cache # we already loaded this parameter before
9396
_tie_check(ldst, lsrc) && return ldst
9497
elseif Functors.isleaf(ldst) # our first time loading this leaf
9598
push!(cache, ldst)
96-
loadleaf!(ldst, lsrc, err)
99+
loadleaf!(ldst, lsrc)
97100
else # this isn't a leaf
98-
loadmodel!(ldst, lsrc; filter = filter, cache = cache)
101+
loadmodel!(ldst, lsrc; filter, cache)
99102
end
100103
end
101104

0 commit comments

Comments
 (0)