Skip to content

Commit c7ba7fc

Browse files
committed
fix: HACK - remove D-degree capability
1 parent 888a00b commit c7ba7fc

File tree

2 files changed

+27
-36
lines changed

2 files changed

+27
-36
lines changed

src/Node.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module NodeModule
33
using DispatchDoctor: @unstable
44

55
import ..OperatorEnumModule: AbstractOperatorEnum
6-
import ..UtilsModule: @memoize_on, @with_memoize, deprecate_varmap, Undefined
6+
import ..UtilsModule: deprecate_varmap, Undefined
77

88
const DEFAULT_NODE_TYPE = Float32
99

src/base.jl

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ function tree_mapreduce(
9494
f_on_shared::H=(result, is_shared) -> result,
9595
break_sharing::Val{BS}=Val(false),
9696
) where {F1<:Function,F2<:Function,G<:Function,H<:Function,RT,BS}
97-
sharing = preserve_sharing(typeof(tree)) && !break_sharing
97+
sharing = preserve_sharing(typeof(tree)) && !BS
9898

9999
RT == Undefined &&
100100
sharing &&
@@ -110,7 +110,9 @@ function tree_mapreduce(
110110
end
111111
end
112112

113-
struct TreeMapreducer{D,ID,F1<:Function,F2<:Function,G<:Function,H<:Function}
113+
struct TreeMapreducer{
114+
D,ID<:Union{Nothing,Dict},F1<:Function,F2<:Function,G<:Function,H<:Function
115+
}
114116
max_degree::Val{D}
115117
id_map::ID
116118
f_leaf::F1
@@ -119,43 +121,32 @@ struct TreeMapreducer{D,ID,F1<:Function,F2<:Function,G<:Function,H<:Function}
119121
f_on_shared::H
120122
end
121123

122-
@generated function (mapreducer::TreeMapreducer{MAX_DEGREE,ID})(
123-
tree::AbstractNode
124-
) where {MAX_DEGREE,ID}
125-
base_expr = quote
126-
d = tree.degree
127-
Base.Cartesian.@nif(
128-
$(MAX_DEGREE + 1),
129-
d_p_one -> (d_p_one - 1) == d,
130-
d_p_one -> if d_p_one == 1
131-
mapreducer.f_leaf(tree)
132-
else
133-
mapreducer.op(
134-
mapreducer.f_branch(tree),
135-
Base.Cartesian.@ntuple(
136-
d_p_one - 1, i -> mapreducer(tree.children[i][])
137-
)...,
138-
)
139-
end
124+
function (mapreducer::TreeMapreducer{2,Nothing})(tree::AbstractNode)
125+
if tree.degree == 0
126+
return mapreducer.f_leaf(tree)
127+
elseif tree.degree == 1
128+
return mapreducer.op(mapreducer.f_branch(tree), mapreducer(tree.l))
129+
else
130+
return mapreducer.op(
131+
mapreducer.f_branch(tree), mapreducer(tree.l), mapreducer(tree.r)
140132
)
141133
end
142-
if ID <: Nothing
143-
# No sharing of nodes (is a tree, not a graph)
144-
return base_expr
134+
end
135+
function (mapreducer::TreeMapreducer{2,Dict})(tree::AbstractNode)
136+
key = objectid(tree)
137+
is_cached = haskey(mapreducer.id_map, key)
138+
if is_cached
139+
return mapreducer.f_on_shared(@inbounds(mapreducer.id_map[key]), true)
145140
else
146-
# Otherwise, we need to cache results in `id_map`
147-
# according to `objectid` of the node
148-
return quote
149-
key = objectid(tree)
150-
is_cached = haskey(mapreducer.id_map, key)
151-
if is_cached
152-
return mapreducer.f_on_shared(@inbounds(mapreducer.id_map[key]), true)
153-
else
154-
res = $base_expr
155-
mapreducer.id_map[key] = res
156-
return mapreducer.f_on_shared(res, false)
157-
end
141+
result = if tree.degree == 0
142+
mapreducer.f_leaf(tree)
143+
elseif tree.degree == 1
144+
mapreducer.op(mapreducer.f_branch(tree), mapreducer(tree.l))
145+
else
146+
mapreducer.op(mapreducer.f_branch(tree), mapreducer(tree.l), mapreducer(tree.r))
158147
end
148+
mapreducer.id_map[key] = result
149+
return mapreducer.f_on_shared(result, false)
159150
end
160151
end
161152

0 commit comments

Comments
 (0)