#include <memory_resource>
struct device_memory_resource : std::pmr::memory_resource {
void* do_allocate(std::size_t bytes, std::size_t);
void do_deallocate(void* p, std::size_t, std::size_t);
bool do_is_equal(const std::pmr::memory_resource&) const noexcept;
};
void* device_memory_resource::do_allocate(std::size_t bytes, std::size_t) {
void* x = nullptr;
auto const r = cudaMalloc(&x, bytes);
if (r != cudaError_t::cudaSuccess) {
throw std::bad_alloc();
}
return x;
}
void device_memory_resource::do_deallocate(void* p, std::size_t, std::size_t) {
cudaFree(p);
}