16#define INSTANTIATE_TYPES(DTYPE, DIM) \
17 using key_t = utility::MiniVec<DTYPE, DIM>; \
18 using hash_t = utility::MiniVecHash<DTYPE, DIM>; \
19 using eq_t = utility::MiniVecEq<DTYPE, DIM>;
21#define DIM_SWITCHER(DTYPE, DIM, ...) \
23 INSTANTIATE_TYPES(DTYPE, 1) \
24 return __VA_ARGS__(); \
25 } else if (DIM == 2) { \
26 INSTANTIATE_TYPES(DTYPE, 2) \
27 return __VA_ARGS__(); \
28 } else if (DIM == 3) { \
29 INSTANTIATE_TYPES(DTYPE, 3) \
30 return __VA_ARGS__(); \
31 } else if (DIM == 4) { \
32 INSTANTIATE_TYPES(DTYPE, 4) \
33 return __VA_ARGS__(); \
34 } else if (DIM == 5) { \
35 INSTANTIATE_TYPES(DTYPE, 5) \
36 return __VA_ARGS__(); \
37 } else if (DIM == 6) { \
38 INSTANTIATE_TYPES(DTYPE, 6) \
39 return __VA_ARGS__(); \
42 "Unsupported dim {}, please modify {} and compile from " \
48#define DISPATCH_DTYPE_AND_DIM_TO_TEMPLATE(DTYPE, DIM, ...) \
50 if (DTYPE == open3d::core::Int64) { \
51 DIM_SWITCHER(int64_t, DIM, __VA_ARGS__) \
52 } else if (DTYPE == open3d::core::Int32) { \
53 DIM_SWITCHER(int, DIM, __VA_ARGS__) \
54 } else if (DTYPE == open3d::core::Int16) { \
55 DIM_SWITCHER(short, DIM, __VA_ARGS__) \
58 "Unsupported dtype {}, please use integer types (Int64, " \
67template <
typename T,
int N>
71 uint64_t hash = UINT64_C(14695981039346656037);
72#if defined(__CUDA_ARCH__)
75 for (
int i = 0; i < N; ++i) {
76 hash ^=
static_cast<uint64_t
>(key[i]);
77 hash *= UINT64_C(1099511628211);
83template <
typename T,
int N>
89#if defined(__CUDA_ARCH__)
92 for (
int i = 0; i < N; ++i) {
93 is_equal = is_equal && (lhs[i] == rhs[i]);
Vectorized trivial-object copy block sizes (CUDA and SYCL).
#define OPEN3D_HOST_DEVICE
Definition CUDAUtils.h:43
Definition PinholeCameraIntrinsic.cpp:16
OPEN3D_HOST_DEVICE bool operator()(const MiniVec< T, N > &lhs, const MiniVec< T, N > &rhs) const
Definition Dispatch.h:86
OPEN3D_HOST_DEVICE uint64_t operator()(const MiniVec< T, N > &key) const
Definition Dispatch.h:70