mgcpp
A C++ Math Library Based on CUDA
memory.hpp
Go to the documentation of this file.
1 
2 // Copyright RedPortal, mujjingun 2017 - 2018.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 
7 #ifndef _MGCPP_CUDA_MEMORY_HPP_
8 #define _MGCPP_CUDA_MEMORY_HPP_
9 
11 #include <mgcpp/system/outcome.hpp>
12 
13 #include <complex>
14 #include <cstdlib>
15 #include <new>
16 #include <type_traits>
17 
18 namespace mgcpp {
19 
20 template <typename ElemType>
21 outcome::result<ElemType*> cuda_malloc(size_t size) noexcept;
22 
23 template <typename ElemType>
24 outcome::result<void> cuda_free(ElemType* ptr) noexcept;
25 
26 template <typename ElemType>
27 outcome::result<void> cuda_memset_to_zero(ElemType* ptr, size_t count) noexcept;
28 
29 template <typename ElemType>
30 outcome::result<ElemType*> malloc_pinned(size_t count) noexcept;
31 
32 template <typename ElemType>
33 outcome::result<void> free_pinned(ElemType* ptr) noexcept;
34 
35 enum class cuda_memcpy_kind {
36  host_to_device = cudaMemcpyKind::cudaMemcpyHostToDevice,
37  device_to_host = cudaMemcpyKind::cudaMemcpyDeviceToHost,
38  device_to_device = cudaMemcpyKind::cudaMemcpyDeviceToDevice
39 };
40 
41 template <typename ElemType>
43  ElemType const* from,
44  size_t count,
45  cuda_memcpy_kind kind) noexcept;
46 
47 inline outcome::result<void> cuda_memcpy(cuComplex* to,
48  std::complex<float> const* from,
49  size_t count,
50  cuda_memcpy_kind kind) noexcept;
51 
52 inline outcome::result<void> cuda_memcpy(std::complex<float>* to,
53  cuComplex const* from,
54  size_t count,
55  cuda_memcpy_kind kind) noexcept;
56 
57 inline outcome::result<void> cuda_memcpy(cuDoubleComplex* to,
58  std::complex<double> const* from,
59  size_t count,
60  cuda_memcpy_kind kind) noexcept;
61 
62 inline outcome::result<void> cuda_memcpy(std::complex<double>* to,
63  cuDoubleComplex const* from,
64  size_t count,
65  cuda_memcpy_kind kind) noexcept;
66 
67 #ifdef USE_HALF
68 inline outcome::result<void> cuda_memcpy(__half* to,
69  float const* from,
70  size_t count,
71  cuda_memcpy_kind kind) noexcept;
72 
73 inline outcome::result<void> cuda_memcpy(float* to,
74  __half const* from,
75  size_t count,
76  cuda_memcpy_kind kind) noexcept;
77 #endif
78 
79 using free_mem_t = size_t;
80 using total_mem_t = size_t;
81 
83 cuda_mem_get_info() noexcept;
84 } // namespace mgcpp
85 
86 #include <mgcpp/cuda/memory.tpp>
87 #endif
Definition: adapter_base.hpp:12
cuda_memcpy_kind
Definition: memory.hpp:35
outcome::result< void > cuda_memset_to_zero(ElemType *ptr, size_t count) noexcept
size_t total_mem_t
Definition: memory.hpp:80
outcome::result< void > free_pinned(ElemType *ptr) noexcept
outcome::result< void > cuda_memcpy(ElemType *to, ElemType const *from, size_t count, cuda_memcpy_kind kind) noexcept
outcome::result< ElemType * > cuda_malloc(size_t size) noexcept
outcome::result< std::pair< free_mem_t, total_mem_t > > cuda_mem_get_info() noexcept
size_t free_mem_t
Definition: memory.hpp:79
BOOST_OUTCOME_V2_NAMESPACE::std_result< R > result
Definition: outcome.hpp:8
outcome::result< ElemType * > malloc_pinned(size_t count) noexcept
outcome::result< void > cuda_free(ElemType *ptr) noexcept