Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:03:45

0001 #ifndef CUDADataFormats_BeamSpot_interface_BeamSpotCUDA_h
0002 #define CUDADataFormats_BeamSpot_interface_BeamSpotCUDA_h
0003 
0004 #include <cuda_runtime.h>
0005 
0006 #include "DataFormats/BeamSpot/interface/BeamSpotPOD.h"
0007 #include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
0008 
0009 class BeamSpotCUDA {
0010 public:
0011   // default constructor, required by cms::cuda::Product<BeamSpotCUDA>
0012   BeamSpotCUDA() = default;
0013 
0014   // constructor that allocates cached device memory on the given CUDA stream
0015   BeamSpotCUDA(cudaStream_t stream) { data_d_ = cms::cuda::make_device_unique<BeamSpotPOD>(stream); }
0016 
0017   // movable, non-copiable
0018   BeamSpotCUDA(BeamSpotCUDA const&) = delete;
0019   BeamSpotCUDA(BeamSpotCUDA&&) = default;
0020   BeamSpotCUDA& operator=(BeamSpotCUDA const&) = delete;
0021   BeamSpotCUDA& operator=(BeamSpotCUDA&&) = default;
0022 
0023   BeamSpotPOD* data() { return data_d_.get(); }
0024   BeamSpotPOD const* data() const { return data_d_.get(); }
0025 
0026   cms::cuda::device::unique_ptr<BeamSpotPOD>& ptr() { return data_d_; }
0027   cms::cuda::device::unique_ptr<BeamSpotPOD> const& ptr() const { return data_d_; }
0028 
0029 private:
0030   cms::cuda::device::unique_ptr<BeamSpotPOD> data_d_;
0031 };
0032 
0033 #endif  // CUDADataFormats_BeamSpot_interface_BeamSpotCUDA_h