MUDA
Loading...
Searching...
No Matches
stream.inl
1#include <cuda_device_runtime_api.h>
2#include <muda/launch/stream_define.h>
3
4namespace muda
5{
6MUDA_INLINE Stream::Stream(Stream::Flag f)
7{
8 checkCudaErrors(cudaStreamCreateWithFlags(&m_handle, static_cast<unsigned int>(f)));
9}
10
11MUDA_INLINE void Stream::wait() const
12{
13 checkCudaErrors(cudaStreamSynchronize(m_handle));
14}
15
16MUDA_INLINE void Stream::begin_capture(cudaStreamCaptureMode mode) const
17{
18 checkCudaErrors(cudaStreamBeginCapture(m_handle, mode));
19}
20
21MUDA_INLINE void Stream::end_capture(cudaGraph_t* graph) const
22{
23 checkCudaErrors(cudaStreamEndCapture(m_handle, graph));
24}
25
26MUDA_INLINE Stream& Stream::Default()
27{
28 thread_local static Stream s{nullptr};
29 return s;
30}
31
32MUDA_INLINE std::byte* Stream::workspace(size_t byte_size)
33{
34 m_workspace.resize(byte_size, m_handle);
35 return m_workspace.data();
36}
37
38MUDA_INLINE MUDA_DEVICE Stream::TailLaunch::operator cudaStream_t() const
39{
40 return details::stream::tail_launch();
41}
42
43MUDA_INLINE MUDA_DEVICE Stream::FireAndForget::operator cudaStream_t() const
44{
45
46 return details::stream::fire_and_forget();
47}
48
49MUDA_INLINE MUDA_DEVICE Stream::GraphTailLaunch::operator cudaStream_t() const
50{
51
52 return details::stream::graph_tail_launch();
53}
54
55MUDA_INLINE MUDA_DEVICE Stream::GraphFireAndForget::operator cudaStream_t() const
56{
57 return details::stream::graph_fire_and_forget();
58}
59
60MUDA_INLINE Stream::~Stream()
61{
62 if(m_handle)
63 checkCudaErrors(cudaStreamDestroy(m_handle));
64}
65
66MUDA_INLINE Stream::Stream(Stream&& o) MUDA_NOEXCEPT : m_handle(o.m_handle)
67{
68 o.m_handle = nullptr;
69}
70
71MUDA_INLINE Stream& Stream::operator=(Stream&& o) MUDA_NOEXCEPT
72{
73 if(this == &o)
74 return *this;
75
76 if(m_handle)
77 checkCudaErrors(cudaStreamDestroy(m_handle));
78
79 m_handle = o.m_handle;
80 o.m_handle = nullptr;
81 return *this;
82}
83} // namespace muda