graph
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
cuda_managed.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <cstdlib>
4 #include <new>
5 
6 #include <cuda_runtime.h>
7 
8 template <class T>
10 {
11  typedef T value_type;
12  CUDAManagedAllocator() = default;
13  template <class U>
14  constexpr CUDAManagedAllocator(const CUDAManagedAllocator<U> &) noexcept {}
15  T *allocate(std::size_t n)
16  {
17  if (n > std::size_t(-1) / sizeof(T))
18  throw std::bad_alloc();
19  T *p;
20  cudaError_t err = cudaMallocManaged(&p, n * sizeof(T));
21  if (err != cudaSuccess)
22  {
23  throw std::bad_alloc();
24  }
25  return p;
26  }
27  void deallocate(T *p, std::size_t) noexcept { cudaFree(p); }
28 };
29 template <class T, class U>
30 bool operator==(const CUDAManagedAllocator<T> &, const CUDAManagedAllocator<U> &) { return true; }
31 template <class T, class U>
32 bool operator!=(const CUDAManagedAllocator<T> &, const CUDAManagedAllocator<U> &) { return false; }
bool operator!=(const CUDAManagedAllocator< T > &, const CUDAManagedAllocator< U > &)
Definition: cuda_managed.hpp:32
T * allocate(std::size_t n)
Definition: cuda_managed.hpp:15
bool operator==(const CUDAManagedAllocator< T > &, const CUDAManagedAllocator< U > &)
Definition: cuda_managed.hpp:30
constexpr CUDAManagedAllocator(const CUDAManagedAllocator< U > &) noexcept
Definition: cuda_managed.hpp:14
Definition: cuda_managed.hpp:9
void deallocate(T *p, std::size_t) noexcept
Definition: cuda_managed.hpp:27
T value_type
Definition: cuda_managed.hpp:11
CUDAManagedAllocator()=default