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;
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