Skip to content

Commit c65328a

Browse files
committed
datadeps: Add ainfo cache
1 parent 0546789 commit c65328a

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

Diff for: src/datadeps.jl

+19-7
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ struct DataDepsAliasingState
9898
ainfos_readers::Dict{AbstractAliasing,Vector{Pair{DTask,Int}}}
9999
ainfos_overlaps::Dict{AbstractAliasing,Set{AbstractAliasing}}
100100

101+
# Cache ainfo lookups
102+
ainfo_cache::Dict{Tuple{Any,Any},AbstractAliasing}
103+
101104
function DataDepsAliasingState()
102105
data_origin = Dict{AbstractAliasing,MemorySpace}()
103106
data_locality = Dict{AbstractAliasing,MemorySpace}()
@@ -106,8 +109,11 @@ struct DataDepsAliasingState
106109
ainfos_readers = Dict{AbstractAliasing,Vector{Pair{DTask,Int}}}()
107110
ainfos_overlaps = Dict{AbstractAliasing,Set{AbstractAliasing}}()
108111

112+
ainfo_cache = Dict{Tuple{Any,Any},AbstractAliasing}()
113+
109114
return new(data_origin, data_locality,
110-
ainfos_owner, ainfos_readers, ainfos_overlaps)
115+
ainfos_owner, ainfos_readers, ainfos_overlaps,
116+
ainfo_cache)
111117
end
112118
end
113119
struct DataDepsNonAliasingState
@@ -156,6 +162,12 @@ struct DataDepsState{State<:Union{DataDepsAliasingState,DataDepsNonAliasingState
156162
end
157163
end
158164

165+
function aliasing(astate::DataDepsAliasingState, arg, dep_mod)
166+
return get!(astate.ainfo_cache, (arg, dep_mod)) do
167+
return aliasing(arg, dep_mod)
168+
end
169+
end
170+
159171
# Determine which arguments could be written to, and thus need tracking
160172

161173
"Whether `arg` has any writedep in this datadeps region."
@@ -190,7 +202,7 @@ function has_writedep(state::DataDepsState, arg, deps, task::DTask)
190202
for (readdep, writedep, other_ainfo, _, _) in other_taskdeps
191203
writedep || continue
192204
for (dep_mod, _, _) in deps
193-
ainfo = aliasing(arg, dep_mod)
205+
ainfo = aliasing(state.alias_state, arg, dep_mod)
194206
if will_alias(ainfo, other_ainfo)
195207
return true
196208
end
@@ -239,7 +251,7 @@ function populate_task_info!(state::DataDepsState, spec::DTaskSpec, task::DTask)
239251
# Add all aliasing dependencies
240252
for (dep_mod, readdep, writedep) in deps
241253
if state.aliasing
242-
ainfo = aliasing(arg, dep_mod)
254+
ainfo = aliasing(state.alias_state, arg, dep_mod)
243255
else
244256
ainfo = UnknownAliasing()
245257
end
@@ -260,7 +272,7 @@ end
260272
function populate_argument_info!(state::DataDepsState{DataDepsAliasingState}, arg, deps)
261273
astate = state.alias_state
262274
for (dep_mod, readdep, writedep) in deps
263-
ainfo = aliasing(arg, dep_mod)
275+
ainfo = aliasing(astate, arg, dep_mod)
264276

265277
# Initialize owner and readers
266278
if !haskey(astate.ainfos_owner, ainfo)
@@ -677,7 +689,7 @@ function distribute_tasks!(queue::DataDepsTaskQueue)
677689
end
678690
if queue.aliasing
679691
for (dep_mod, _, _) in deps
680-
ainfo = aliasing(arg, dep_mod)
692+
ainfo = aliasing(astate, arg, dep_mod)
681693
data_space = astate.data_locality[ainfo]
682694
nonlocal = our_space != data_space
683695
if nonlocal
@@ -740,7 +752,7 @@ function distribute_tasks!(queue::DataDepsTaskQueue)
740752
type_may_alias(typeof(arg)) || continue
741753
if queue.aliasing
742754
for (dep_mod, _, writedep) in deps
743-
ainfo = aliasing(arg, dep_mod)
755+
ainfo = aliasing(astate, arg, dep_mod)
744756
if writedep
745757
@dagdebug nothing :spawn_datadeps "($(repr(spec.f)))[$idx][$dep_mod] Syncing as writer"
746758
get_write_deps!(state, ainfo, task, write_num, syncdeps)
@@ -773,7 +785,7 @@ function distribute_tasks!(queue::DataDepsTaskQueue)
773785
type_may_alias(typeof(arg)) || continue
774786
if queue.aliasing
775787
for (dep_mod, _, writedep) in deps
776-
ainfo = aliasing(arg, dep_mod)
788+
ainfo = aliasing(astate, arg, dep_mod)
777789
if writedep
778790
@dagdebug nothing :spawn_datadeps "($(repr(spec.f)))[$idx][$dep_mod] Set as owner"
779791
add_writer!(state, ainfo, task, write_num)

0 commit comments

Comments
 (0)