MUDA
Loading...
Searching...
No Matches
graph_viewer.inl
1#include <muda/launch/stream_define.h>
2namespace muda
3{
4MUDA_INLINE MUDA_GENERIC GraphViewer::GraphViewer(cudaGraphExec_t graph,
5 Flags<GraphInstantiateFlagBit> flags)
6 : m_graph(graph)
7 , m_flags(flags)
8{
9}
10
11MUDA_INLINE MUDA_GENERIC void GraphViewer::launch(cudaStream_t stream) const
12{
13#ifdef __CUDA_ARCH__
14 MUDA_KERNEL_ASSERT(m_flags.has(GraphInstantiateFlagBit::DeviceLaunch),
15 "To launch on device, the graph should be instantiated with `DeviceLaunch`");
16 MUDA_KERNEL_ASSERT(stream == details::stream::graph_tail_launch()
17 || stream == details::stream::graph_fire_and_forget(),
18 "Launch Graph on device with invalid stream! "
19 "Only Stream::GraphTailLaunch{} and Stream::GraphFireAndForget{} are allowed");
20#if !MUDA_WITH_DEVICE_STREAM_MODEL
21 MUDA_ERROR_WITH_LOCATION(
22 "GraphViewer[%s:%s]: graph launch on device is not supported in "
23 "cuda %d-%d.",
24 kernel_name(),
25 name(),
26 __CUDACC_VER_MAJOR__,
27 __CUDACC_VER_MINOR__);
28#endif
29#endif
30 auto graph_viewer_error_code = cudaGraphLaunch(m_graph, stream);
31 if(graph_viewer_error_code != cudaSuccess)
32 {
33 auto error_string = cudaGetErrorString(graph_viewer_error_code);
34 MUDA_KERNEL_ERROR_WITH_LOCATION("GraphViewer[%s:%s]: launch error: %s(%d), GraphExec=%p",
35 kernel_name(),
36 name(),
37 error_string,
38 (int)graph_viewer_error_code,
39 m_graph);
40 }
41}
42
43MUDA_INLINE MUDA_DEVICE void GraphViewer::tail_launch() const
44{
45#ifdef __CUDA_ARCH__
46 this->launch(details::stream::graph_tail_launch());
47#endif
48}
49
50MUDA_INLINE MUDA_DEVICE void GraphViewer::fire_and_forget() const
51{
52#ifdef __CUDA_ARCH__
53 this->launch(details::stream::graph_fire_and_forget());
54#endif
55}
56} // namespace muda