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);