2 #include <unordered_map> 3 #include <unordered_set> 5 #include <muda/graph/graph_base.h> 6 #include <muda/graph/graph_exec.h> 8 #include <muda/graph/kernel_node.h> 9 #include <muda/graph/memory_node.h> 10 #include <muda/graph/host_node.h> 11 #include <muda/graph/event_node.h> 13 #include <muda/graph/graph_instantiate_flag.h> 20 using S = std::shared_ptr<T>;
22 using U = std::unique_ptr<T>;
38 friend class std::shared_ptr<Graph>;
40 MUDA_NODISCARD S<GraphExec> instantiate();
45 const std::vector<S<GraphNode>>& deps);
52 const std::vector<S<GraphNode>>& deps);
57 S<MemcpyNode> add_memcpy_node(
void* dst,
61 const std::vector<S<GraphNode>>& deps);
62 S<MemcpyNode> add_memcpy_node(
void* dst,
const void* src,
size_t size_bytes, cudaMemcpyKind kind);
63 S<MemcpyNode> add_memcpy_node(
const cudaMemcpy3DParms& parms);
64 S<MemcpyNode> add_memcpy_node(
const cudaMemcpy3DParms& parms,
65 const std::vector<S<GraphNode>>& deps);
67 S<MemsetNode> add_memset_node(
const cudaMemsetParams& parms,
68 const std::vector<S<GraphNode>>& deps);
69 S<MemsetNode> add_memset_node(
const cudaMemsetParams& parms);
72 S<EventRecordNode> add_event_record_node(cudaEvent_t e,
73 const std::vector<S<GraphNode>>& deps);
74 S<EventRecordNode> add_event_record_node(cudaEvent_t e);
75 S<EventWaitNode> add_event_wait_node(cudaEvent_t e,
76 const std::vector<S<GraphNode>>& deps);
77 S<EventWaitNode> add_event_wait_node(cudaEvent_t e);
80 void add_dependency(S<GraphNode> from, S<GraphNode> to);
82 cudaGraph_t handle()
const {
return m_handle; }
83 cudaGraph_t handle() {
return m_handle; }
84 static auto create() {
return std::make_shared<Graph>(); }
89 std::list<S<NodeParms>> m_cached;
90 static std::vector<cudaGraphNode_t> map_dependencies(
const std::vector<S<GraphNode>>& deps);
94 #include "details/graph.inl" Definition: host_node.h:14
Definition: graph_exec.h:10
Definition: kernel_node.h:14