1#ifndef PBAT_GPU_IMPL_COMMON_VAR_H
2#define PBAT_GPU_IMPL_COMMON_VAR_H
17 Var(T
const& value = T{},
18 std::shared_ptr<cuda::stream_t> stream =
19 std::make_shared<cuda::stream_t>(cuda::device::current::get().default_stream()));
21 Var(Var
const&) =
delete;
22 Var& operator=(Var
const&) =
delete;
23 Var& operator=(T
const& value);
26 Var operator=(Var&&) =
delete;
34 void SetStream(std::shared_ptr<cuda::stream_t> stream) { mStream = stream; }
35 std::shared_ptr<cuda::stream_t> Stream()
const {
return mStream; }
40 cuda::memory::region_t mDeviceMemory;
41 std::shared_ptr<cuda::stream_t> mStream;
45Var<T>::Var(T
const& value, std::shared_ptr<cuda::stream_t> stream)
46 : mDeviceMemory(), mStream(stream)
48 mStream->device().make_current();
49 mDeviceMemory = cuda::memory::device::allocate(
sizeof(T), *mStream);
50 cuda::memory::copy(mDeviceMemory,
reinterpret_cast<void*
>(
const_cast<T*
>(&value)), *mStream);
54Var<T>& Var<T>::operator=(T
const& value)
56 mStream->device().make_current();
57 cuda::memory::copy(mDeviceMemory,
reinterpret_cast<void*
>(
const_cast<T*
>(&value)), *mStream);
64 std::byte memory[
sizeof(T)];
65 mStream->device().make_current();
66 cuda::memory::copy(
reinterpret_cast<void*
>(&memory), mDeviceMemory, *mStream);
67 mStream->synchronize();
68 return *
reinterpret_cast<T*
>(&memory);
72Var<T>::operator T()
const
80 return static_cast<T*
>(mDeviceMemory.data());
84T
const* Var<T>::Raw()
const
86 return static_cast<T const*
>(mDeviceMemory.data());
92 mStream->device().make_current();
93 cuda::memory::device::free(mDeviceMemory);
GPU algorithm implementations.
Definition VertexTriangleMixedCcdDcd.h:21
GPU related public functionality.
Definition Buffer.cu:16
The main namespace of the library.
Definition Aliases.h:15