MUDA
Loading...
Searching...
No Matches
fuzzy.h
1#pragma once
2#include <cuda.h>
3#include <cuda_runtime.h>
4#include <cuda_runtime_api.h>
5#include <muda/muda_def.h>
6
7namespace muda
8{
9template <typename FHost, typename FDevice>
10MUDA_INLINE MUDA_GENERIC decltype(auto) invoke(FHost&& host, FDevice&& device) MUDA_NOEXCEPT
11{
12 if constexpr(std::is_same_v<std::invoke_result_t<FHost>, void>
13 && std::is_same_v<std::invoke_result_t<FDevice>, void>)
14 {
15#ifdef __CUDA_ARCH__
16 device();
17#else
18 host();
19#endif
20 }
21 else
22 {
23#ifdef __CUDA_ARCH__
24 return device();
25#else
26 return host();
27#endif
28 }
29}
30
31MUDA_INLINE MUDA_GENERIC dim3 grid_dim()
32{
33#ifdef __CUDA_ARCH__
34 return gridDim;
35#else
36 return dim3(0, 0, 0);
37#endif
38}
39
40MUDA_INLINE MUDA_GENERIC dim3 block_idx()
41{
42#ifdef __CUDA_ARCH__
43 return blockIdx;
44#else
45 return dim3(0, 0, 0);
46#endif
47}
48
49MUDA_INLINE MUDA_GENERIC dim3 block_dim()
50{
51#ifdef __CUDA_ARCH__
52 return blockDim;
53#else
54 return dim3(0, 0, 0);
55#endif
56}
57
58MUDA_INLINE MUDA_GENERIC dim3 thread_idx()
59{
60#ifdef __CUDA_ARCH__
61 return threadIdx;
62#else
63 return dim3(0, 0, 0);
64#endif
65}
66} // namespace muda