17 #ifndef dealii_memory_space_data_h 18 #define dealii_memory_space_data_h 37 template <
typename Number,
typename MemorySpace>
42 static_assert(std::is_same<MemorySpace, Host>::value ||
43 std::is_same<MemorySpace, CUDA>::value,
44 "MemorySpace should be Host or CUDA");
72 std::unique_ptr<Number[], std::function<void(Number *)>>
values;
90 template <
typename Number,
typename MemorySpace>
95 static_assert(std::is_same<MemorySpace, Host>::value ||
96 std::is_same<MemorySpace, CUDA>::value,
97 "MemorySpace should be Host or CUDA");
102 template <
typename Number>
116 copy_from(Number *begin, std::size_t n_elements)
121 std::unique_ptr<Number[], std::function<void(Number *)>>
values;
127 std::vector<ArrayView<const Number>>
values_sm;
132 template <
typename Number>
141 # ifdef DEAL_II_COMPILER_CUDA_AWARE 143 template <
typename Number>
148 ,
values_dev(
nullptr, Utilities::CUDA::delete_device_data<Number>)
154 const cudaError_t cuda_error_code =
157 n_elements *
sizeof(Number),
158 cudaMemcpyDeviceToHost);
163 copy_from(Number *begin, std::size_t n_elements)
165 const cudaError_t cuda_error_code =
168 n_elements *
sizeof(Number),
169 cudaMemcpyHostToDevice);
173 std::unique_ptr<Number[], std::function<void(Number *)>>
values;
174 std::unique_ptr<Number[], void (*)(Number *)>
values_dev;
179 std::vector<ArrayView<const Number>>
values_sm;
184 template <
typename Number>
void copy_from(Number *begin, std::size_t n_elements)
std::vector< ArrayView< const Number > > values_sm
#define AssertCuda(error_code)
#define DEAL_II_NAMESPACE_CLOSE
void swap(MemorySpaceData< Number, MemorySpace > &, MemorySpaceData< Number, MemorySpace > &)
std::unique_ptr< Number[], std::function< void(Number *)> > values
#define DEAL_II_NAMESPACE_OPEN
VectorType::value_type * begin(VectorType &V)
void copy(const T *begin, const T *end, U *dest)
void copy_to(Number *begin, std::size_t n_elements)
std::unique_ptr< Number[]> values_dev