1 #ifndef teca_variant_array_util_h
2 #define teca_variant_array_util_h
8 #if defined(TECA_HAS_CUDA)
19 #if defined(TECA_HAS_CUDA)
28 template <
typename... array_t>
31 if ((!arrays->host_accessible() || ...))
33 #if defined(TECA_HAS_CUDA)
49 template <
typename TT,
typename... PP>
52 return std::make_tuple(
static_cast<TT*
>(args.get())...);
65 template <
typename TT,
typename... PP>
68 return std::make_tuple(
dynamic_cast<TT*
>(args.get())...);
72 template <
typename TT>
84 template <
typename TT,
typename... PP>
87 if (!
dynamic_cast<const TT*
>(va.get()))
90 " teca_variant_array_impl<" <<
typeid(
typename TT::element_type).name()
91 <<
sizeof(
typename TT::element_type) <<
">")
94 (assert_type<TT>(args), ...);
98 template <
typename TT>
101 return std::make_tuple();
117 template <
typename TT,
typename... PP>
120 auto tva =
static_cast<const TT*
>(va.get());
121 auto spva = tva->get_host_accessible();
122 return std::tuple_cat(std::make_tuple
123 (spva, spva.get()), get_host_accessible<TT>(args...));
139 template <
typename TT,
typename... V>
142 auto tva =
static_cast<TT*
>(va.get());
143 auto spva = tva->get_host_accessible();
144 return std::tuple_cat(std::make_tuple
145 (spva, spva.get()), get_host_accessible<TT>(args...));
161 template <
typename TT,
typename... PP>
164 auto tva =
static_cast<const TT*
>(va.get());
165 auto spva = tva->get_host_accessible();
166 return std::tuple_cat(std::make_tuple
167 (spva, spva.get()), get_host_accessible<TT>(args...));
183 template <
typename TT,
typename... V>
186 auto tva =
static_cast<TT*
>(va.get());
187 auto spva = tva->get_host_accessible();
188 return std::tuple_cat(std::make_tuple
189 (spva, spva.get()), get_host_accessible<TT>(args...));
193 template <
typename TT>
196 return std::make_tuple();
212 template <
typename TT,
typename... PP>
215 auto tva =
static_cast<const TT*
>(va.get());
216 auto spva = tva->get_cuda_accessible();
217 return std::tuple_cat(std::make_tuple
218 (spva, spva.get()), get_cuda_accessible<TT>(args...));
234 template <
typename TT,
typename... V>
237 auto tva =
static_cast<TT*
>(va.get());
238 auto spva = tva->get_cuda_accessible();
239 return std::tuple_cat(std::make_tuple
240 (spva, spva.get()), get_cuda_accessible<TT>(args...));
254 template <
typename TT,
typename... V>
257 return std::make_tuple(
static_cast<TT*
>(args.get())->data()...);
268 template <
typename TT>
272 auto out =
TT::New(n_elem, alloc);
273 return std::make_tuple(out, out->data());
285 template <
typename TT,
typename NT =
typename TT::element_type>
286 auto New(
size_t n_elem, NT init_val,
289 auto out =
TT::New(n_elem, init_val, alloc);
290 return std::make_tuple(out, out->data());
hamr::buffer_allocator allocator
allocator types
Definition: teca_variant_array.h:46
TECA_EXPORT int synchronize_stream()
synchronize the default stream
some functions helping us manipulate teca_variant_array
Definition: teca_variant_array_util.h:14
void synchronize_stream()
synchronize the default stream.
Definition: teca_variant_array_util.h:17
auto get_host_accessible()
terminates recursion
Definition: teca_variant_array_util.h:99
auto New(size_t n_elem, NT init_val, teca_variant_array::allocator alloc=teca_variant_array::allocator::malloc)
Definition: teca_variant_array_util.h:286
auto va_dynamic_cast(PP &&... args)
Definition: teca_variant_array_util.h:66
auto data(V &&... args)
Definition: teca_variant_array_util.h:255
void sync_host_access_any(const array_t &... arrays)
Definition: teca_variant_array_util.h:29
auto New(size_t n_elem, teca_variant_array::allocator alloc=teca_variant_array::allocator::malloc)
Definition: teca_variant_array_util.h:269
auto get_cuda_accessible()
terminates recursion
Definition: teca_variant_array_util.h:194
auto va_static_cast(PP &&... args)
Definition: teca_variant_array_util.h:50
void assert_type()
terminates recursion
Definition: teca_variant_array_util.h:73
#define TECA_FATAL_ERROR(_msg)
Definition: teca_common.h:153
std::shared_ptr< teca_variant_array > p_teca_variant_array
Definition: teca_variant_array.h:27
std::shared_ptr< const teca_variant_array > const_p_teca_variant_array
Definition: teca_variant_array.h:27