22namespace Experimental {
29 if (
size != 1)
throw std::runtime_error(
"ScalarBufferContainer can only be of size 1");
31 std::size_t
size()
const {
return 1; }
47 std::size_t
size()
const {
return _vec.size(); }
52 throw std::bad_function_call();
59 throw std::bad_function_call();
86 other._data =
nullptr;
95 throw std::bad_function_call();
102 throw std::bad_function_call();
127 other._data =
nullptr;
145 return static_cast<double *
>(
_data);
161 return static_cast<double *
>(
_data);
179template <
class Container>
182 using QueuesMap = std::map<std::size_t, std::queue<Container>>;
190 _vec = std::move(
q.front());
218 return std::make_unique<ScalarBuffer>(1);
222 return std::make_unique<CPUBuffer>(
size);
226 return std::make_unique<GPUBuffer>(
size);
230 auto out = std::make_unique<PinnedBuffer>(
size);
231 out->_vec.setCudaStream(stream);
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
std::map< std::size_t, std::queue< Container > > QueuesMap
double * cpuWritePtr() override
BufferImpl(std::size_t size)
double * gpuWritePtr() override
double const * gpuReadPtr() const override
static QueuesMap & queues()
double const * cpuReadPtr() const override
std::vector< double > _vec
CPUBufferContainer(std::size_t size)
double const * gpuReadPtr() const
double const * cpuReadPtr() const
double const * cpuReadPtr() const
GPUBufferContainer(const GPUBufferContainer &)=delete
double * gpuWritePtr() const
GPUBufferContainer(std::size_t size)
GPUBufferContainer & operator=(const GPUBufferContainer &)=delete
double * cpuWritePtr() const
GPUBufferContainer(GPUBufferContainer &&other)
GPUBufferContainer & operator=(GPUBufferContainer &&other)
double const * gpuReadPtr() const
LastAccessType _lastAccess
PinnedBufferContainer & operator=(const PinnedBufferContainer &)=delete
cudaStream_t * _cudaStream
PinnedBufferContainer(const PinnedBufferContainer &)=delete
PinnedBufferContainer(std::size_t size)
double const * cpuReadPtr() const
double const * gpuReadPtr() const
void setCudaStream(cudaStream_t *stream)
GPUBufferContainer _gpuBuffer
PinnedBufferContainer & operator=(PinnedBufferContainer &&other)
PinnedBufferContainer(PinnedBufferContainer &&other)
double const * cpuReadPtr() const
double const * gpuReadPtr() const
ScalarBufferContainer(std::size_t size)
virtual void * cudaMalloc(size_t)
virtual void memcpyToCPU(void *, const void *, size_t, cudaStream_t *=nullptr)
virtual void cudaFree(void *)
virtual void * cudaMallocHost(size_t)
virtual void memcpyToCUDA(void *, const void *, size_t, cudaStream_t *=nullptr)
std::unique_ptr< AbsBuffer > makeGpuBuffer(std::size_t size)
std::unique_ptr< AbsBuffer > makeScalarBuffer()
std::unique_ptr< AbsBuffer > makeCpuBuffer(std::size_t size)
std::unique_ptr< AbsBuffer > makePinnedBuffer(std::size_t size, cudaStream_t *stream=nullptr)
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
R__EXTERN RooBatchComputeInterface * dispatchCUDA