MUDA
Loading...
Searching...
No Matches
launch.h
Go to the documentation of this file.
1/*****************************************************************/
9#pragma once
10#include <muda/launch/launch_base.h>
11#include <muda/type_traits/always.h>
12#include <muda/launch/kernel_tag.h>
13namespace muda
14{
15namespace details
16{
17 template <typename F>
19 {
20 F callable;
21 dim3 dim;
22 template <typename U>
23 LaunchCallable(U&& f, const dim3& d)
24 : callable(std::forward<U>(f))
25 , dim(d)
26 {
27 }
28 };
29
30 template <typename F, typename UserTag = DefaultTag>
31 MUDA_GLOBAL void generic_kernel(LaunchCallable<F> f);
32
33 template <typename F, typename UserTag = DefaultTag>
34 MUDA_GLOBAL void generic_kernel_with_range(LaunchCallable<F> f);
35} // namespace details
36
37// using details::generic_kernel;
38
39dim3 cube(int x) MUDA_NOEXCEPT;
40dim3 square(int x) MUDA_NOEXCEPT;
41
85class Launch : public LaunchBase<Launch>
86{
87 dim3 m_grid_dim;
88 dim3 m_block_dim;
89 size_t m_shared_mem_size;
90
91 public:
92 template <typename F>
94
95 MUDA_HOST Launch(dim3 gridDim, dim3 blockDim, size_t sharedMemSize = 0, cudaStream_t stream = nullptr) MUDA_NOEXCEPT
96 : LaunchBase(stream),
97 m_grid_dim(gridDim),
98 m_block_dim(blockDim),
99 m_shared_mem_size(sharedMemSize)
100 {
101 }
102
103 MUDA_HOST Launch(int gridDim = 1,
104 int blockDim = 1,
105 size_t sharedMemSize = 0,
106 cudaStream_t stream = nullptr) MUDA_NOEXCEPT
107 : LaunchBase(stream),
108 m_grid_dim(gridDim),
109 m_block_dim(blockDim),
110 m_shared_mem_size(sharedMemSize)
111 {
112 }
113
114 MUDA_HOST Launch(dim3 blockDim, size_t sharedMemSize = 0, cudaStream_t stream = nullptr) MUDA_NOEXCEPT
115 : LaunchBase(stream),
116 m_grid_dim(0),
117 m_block_dim(blockDim),
118 m_shared_mem_size(sharedMemSize)
119 {
120 }
121
122 template <typename F, typename UserTag = Default>
123 MUDA_HOST Launch& apply(F&& f);
124 template <typename F, typename UserTag = Default>
125 MUDA_HOST Launch& apply(F&& f, Tag<UserTag>);
126
127 template <typename F, typename UserTag = Default>
128 MUDA_HOST Launch& apply(const dim3& active_dim, F&& f);
129
130 template <typename F, typename UserTag = Default>
131 MUDA_HOST Launch& apply(const dim3& active_dim, F&& f, Tag<UserTag>);
132
133 template <typename F, typename UserTag = Default>
134 MUDA_HOST MUDA_NODISCARD auto as_node_parms(F&& f) -> S<NodeParms<F>>;
135
136 template <typename F, typename UserTag = Default>
137 MUDA_HOST MUDA_NODISCARD auto as_node_parms(F&& f, Tag<UserTag>)
138 -> S<NodeParms<F>>;
139
140 template <typename F, typename UserTag = Default>
141 MUDA_HOST MUDA_NODISCARD auto as_node_parms(const dim3& active_dim, F&& f)
142 -> S<NodeParms<F>>;
143
144 template <typename F, typename UserTag = Default>
145 MUDA_HOST MUDA_NODISCARD auto as_node_parms(const dim3& active_dim, F&& f, Tag<UserTag>)
146 -> S<NodeParms<F>>;
147
148
149 private:
150 template <typename F, typename UserTag = Default>
151 MUDA_HOST void invoke(F&& f);
152
153 template <typename F, typename UserTag = Default>
154 MUDA_HOST void invoke(const dim3& active_dim, F&& f);
155
156 MUDA_GENERIC dim3 calculate_grid_dim(const dim3& active_dim) const MUDA_NOEXCEPT;
157
158 MUDA_GENERIC void check_input_with_range() const MUDA_NOEXCEPT;
159
160 MUDA_GENERIC void check_input() const MUDA_NOEXCEPT;
161};
162} // namespace muda
163
164#include "details/launch.inl"
Definition kernel_node.h:15
Definition launch_base.h:86
A wrapper of raw cuda kernel launch in muda style, removing the <<<>>> usage, for better intellisense...
Definition launch.h:86
Definition kernel_tag.h:6
Definition launch.h:19