Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef CUDADataFormats_SiStripCluster_interface_SiStripClustersCUDA_h
0002 #define CUDADataFormats_SiStripCluster_interface_SiStripClustersCUDA_h
0003 
0004 #include "DataFormats/SiStripCluster/interface/SiStripClustersSOABase.h"
0005 #include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
0006 #include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h"
0007 #include "HeterogeneousCore/CUDAUtilities/interface/cudaCompat.h"
0008 
0009 #include <cuda_runtime.h>
0010 
0011 class SiStripClustersCUDADevice : public SiStripClustersSOABase<cms::cuda::device::unique_ptr> {
0012 public:
0013   SiStripClustersCUDADevice() = default;
0014   explicit SiStripClustersCUDADevice(uint32_t maxClusters, uint32_t maxStripsPerCluster, cudaStream_t stream);
0015   ~SiStripClustersCUDADevice() override = default;
0016 
0017   SiStripClustersCUDADevice(const SiStripClustersCUDADevice &) = delete;
0018   SiStripClustersCUDADevice &operator=(const SiStripClustersCUDADevice &) = delete;
0019   SiStripClustersCUDADevice(SiStripClustersCUDADevice &&) = default;
0020   SiStripClustersCUDADevice &operator=(SiStripClustersCUDADevice &&) = default;
0021 
0022   struct DeviceView {
0023     uint32_t *clusterIndex_;
0024     uint32_t *clusterSize_;
0025     uint8_t *clusterADCs_;
0026     stripgpu::detId_t *clusterDetId_;
0027     stripgpu::stripId_t *firstStrip_;
0028     bool *trueCluster_;
0029     float *barycenter_;
0030     float *charge_;
0031     uint32_t nClusters_;
0032     uint32_t maxClusterSize_;
0033   };
0034 
0035   DeviceView *view() const { return view_d.get(); }
0036   uint32_t nClusters() const { return nClusters_; }
0037   uint32_t *nClustersPtr() { return &nClusters_; }
0038   uint32_t maxClusterSize() const { return maxClusterSize_; }
0039   uint32_t *maxClusterSizePtr() { return &maxClusterSize_; }
0040 
0041 private:
0042   cms::cuda::device::unique_ptr<DeviceView> view_d;  // "me" pointer
0043   uint32_t nClusters_;
0044   uint32_t maxClusterSize_;
0045 };
0046 
0047 class SiStripClustersCUDAHost : public SiStripClustersSOABase<cms::cuda::host::unique_ptr> {
0048 public:
0049   SiStripClustersCUDAHost() = default;
0050   explicit SiStripClustersCUDAHost(const SiStripClustersCUDADevice &clusters_d, cudaStream_t stream);
0051   ~SiStripClustersCUDAHost() override = default;
0052 
0053   SiStripClustersCUDAHost(const SiStripClustersCUDAHost &) = delete;
0054   SiStripClustersCUDAHost &operator=(const SiStripClustersCUDAHost &) = delete;
0055   SiStripClustersCUDAHost(SiStripClustersCUDAHost &&) = default;
0056   SiStripClustersCUDAHost &operator=(SiStripClustersCUDAHost &&) = default;
0057 };
0058 
0059 #endif