1#include <muda/compute_graph/compute_graph_builder.h>
2#include <muda/compute_graph/compute_graph_accessor.h>
6MUDA_INLINE
void ComputeGraphVarBase::base_update()
8 for(
auto& [graph, info] : m_related_closure_infos)
10 graph->m_need_update =
true;
11 for(
auto&
id : info.closure_ids)
12 graph->m_closure_need_update[id.value()] = true;
17MUDA_INLINE
void ComputeGraphVarBase::base_building_eval()
19 _building_eval(ComputeGraphVarUsage::ReadWrite);
22MUDA_INLINE
void ComputeGraphVarBase::base_building_ceval()
const
24 _building_eval(ComputeGraphVarUsage::Read);
27MUDA_INLINE
void ComputeGraphVarBase::_building_eval(ComputeGraphVarUsage usage)
const
29 auto acc = details::ComputeGraphAccessor();
30 auto graph = ComputeGraphBuilder::instance().current_graph();
31 m_related_closure_infos[graph].closure_ids.insert(graph->current_closure_id());
32 graph->emplace_related_var(
const_cast<ComputeGraphVarBase*
>(
this));
33 acc.set_var_usage(var_id(), usage);
36MUDA_INLINE
void ComputeGraphVarBase::remove_related_closure_infos(ComputeGraph* graph)
38 auto iter = m_related_closure_infos.find(graph);
39 if(iter != m_related_closure_infos.end())
41 m_related_closure_infos.erase(iter);
45MUDA_INLINE
void ComputeGraphVarBase::graphviz_def(std::ostream& o,
46 const ComputeGraphGraphvizOptions& options)
const
48 graphviz_id(o, options);
51 o <<
"label=\"" << name() <<
"\",";
52 o << options.var_style <<
"]";
55MUDA_INLINE
void ComputeGraphVarBase::graphviz_id(std::ostream& o,
56 const ComputeGraphGraphvizOptions& options)
const
58 o <<
"var_v" << var_id();
61MUDA_INLINE
void ComputeGraphVarBase::update()
63 MUDA_ASSERT(!is_using(),
"ComputeGraphVar is using, can't update");
69 for(
auto& [graph, info] : m_related_closure_infos)
77MUDA_INLINE
bool ComputeGraphVarBase::is_using()
82MUDA_INLINE
void ComputeGraphVarBase::sync()
84 for (
auto& [graph, info] : m_related_closure_infos)
86 checkCudaErrors(cudaEventSynchronize(graph->m_event));
90template <
typename RWView>
91RWView ComputeGraphVarBase::_eval(
const RWView& view)
93 auto phase = ComputeGraphBuilder::current_phase();
100 case ComputeGraphPhase::TopoBuilding:
101 case ComputeGraphPhase::Building: {
102 auto acc = details::ComputeGraphAccessor();
103 acc.check_allow_var_eval();
104 MUDA_ASSERT(ComputeGraphBuilder::is_topo_building() || is_valid(),
105 "ComputeGraphVar[%s] is not valid, please update it before use",
108 constexpr auto const_eval = is_uniform_viewer_v<RWView>;
110 if constexpr(const_eval)
113 this->base_building_ceval();
117 this->base_building_eval();
121 case ComputeGraphPhase::Updating:
128template <
typename ROView>
129ROView ComputeGraphVarBase::_ceval(ROView& view)
const
131 auto phase = ComputeGraphBuilder::current_phase();
138 case ComputeGraphPhase::TopoBuilding:
139 case ComputeGraphPhase::Building: {
140 auto acc = details::ComputeGraphAccessor();
141 acc.check_allow_var_eval();
142 MUDA_ASSERT(ComputeGraphBuilder::is_topo_building() || is_valid(),
143 "ComputeGraphVar[%s] is not valid, please update it before use",
146 this->base_building_ceval();
149 case ComputeGraphPhase::Updating: {
161MUDA_INLINE
void ComputeGraphVar<T>::update(
const RWViewer& view)
163 ComputeGraphVarBase::update();
168MUDA_INLINE ComputeGraphVar<T>& ComputeGraphVar<T>::operator=(
const RWViewer& view)
175MUDA_INLINE
void ComputeGraphVar<T>::graphviz_def(std::ostream& o,
176 const ComputeGraphGraphvizOptions& options)
const
178 graphviz_id(o, options);
181 o <<
"label=\"" << name() <<
"\",";
183 if constexpr(std::is_same_v<T, cudaEvent_t>)
185 o << options.event_style;
189 o << options.var_style;
QueryResult
Definition event.h:28