17 #ifndef dealii_memory_space_h 18 #define dealii_memory_space_h 53 template <
typename Number,
typename MemorySpace>
60 "MemorySpace should be Host or CUDA");
88 std::unique_ptr<Number[], decltype(&std::free)>
values;
101 template <
typename Number,
typename MemorySpace>
108 "MemorySpace should be Host or CUDA");
113 template <
typename Number>
121 copy_to(Number *
begin, std::size_t n_elements)
127 copy_from(Number *begin, std::size_t n_elements)
129 std::copy(begin, begin + n_elements, values.get());
132 std::unique_ptr<Number[], decltype(&std::free)> values;
136 std::unique_ptr<Number[]> values_dev;
141 template <
typename Number>
150 # ifdef DEAL_II_COMPILER_CUDA_AWARE 152 template <
typename Number>
157 , values_dev(
nullptr, Utilities::CUDA::delete_device_data<Number>)
161 copy_to(Number *
begin, std::size_t n_elements)
163 const cudaError_t cuda_error_code =
166 n_elements *
sizeof(Number),
167 cudaMemcpyDeviceToHost);
172 copy_from(Number *begin, std::size_t n_elements)
174 const cudaError_t cuda_error_code =
175 cudaMemcpy(values_dev.get(),
177 n_elements *
sizeof(Number),
178 cudaMemcpyHostToDevice);
182 std::unique_ptr<Number[], decltype(&std::free)> values;
183 std::unique_ptr<Number[], void (*)(Number *)> values_dev;
188 template <
typename Number>
void copy_from(Number *begin, std::size_t n_elements)
#define AssertCuda(error_code)
#define DEAL_II_NAMESPACE_CLOSE
std::unique_ptr< Number[], decltype(&std::free)> values
void swap(MemorySpaceData< Number, MemorySpace > &, MemorySpaceData< Number, MemorySpace > &)
#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