Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef CUDADataFormats_Track_TrackHeterogeneousDevice_H
0002 #define CUDADataFormats_Track_TrackHeterogeneousDevice_H
0003 
0004 #include <cstdint>
0005 
0006 #include "CUDADataFormats/Track/interface/PixelTrackUtilities.h"
0007 #include "CUDADataFormats/Common/interface/PortableDeviceCollection.h"
0008 
0009 #include "Geometry/CommonTopologies/interface/SimplePixelTopology.h"
0010 
0011 // TODO: The class is created via inheritance of the PortableDeviceCollection.
0012 // This is generally discouraged, and should be done via composition.
0013 // See: https://github.com/cms-sw/cmssw/pull/40465#discussion_r1067364306
0014 template <typename TrackerTraits>
0015 class TrackSoAHeterogeneousDevice : public cms::cuda::PortableDeviceCollection<TrackLayout<TrackerTraits>> {
0016 public:
0017   using cms::cuda::PortableDeviceCollection<TrackLayout<TrackerTraits>>::view;
0018   using cms::cuda::PortableDeviceCollection<TrackLayout<TrackerTraits>>::const_view;
0019   using cms::cuda::PortableDeviceCollection<TrackLayout<TrackerTraits>>::buffer;
0020   using cms::cuda::PortableDeviceCollection<TrackLayout<TrackerTraits>>::bufferSize;
0021 
0022   TrackSoAHeterogeneousDevice() = default;  // cms::cuda::Product needs this
0023 
0024   // Constructor which specifies the SoA size
0025   explicit TrackSoAHeterogeneousDevice(cudaStream_t stream)
0026       : cms::cuda::PortableDeviceCollection<TrackLayout<TrackerTraits>>(TrackerTraits::maxNumberOfTuples, stream) {}
0027 };
0028 
0029 namespace pixelTrack {
0030 
0031   using TrackSoADevicePhase1 = TrackSoAHeterogeneousDevice<pixelTopology::Phase1>;
0032   using TrackSoADevicePhase2 = TrackSoAHeterogeneousDevice<pixelTopology::Phase2>;
0033   using TrackSoADeviceHIonPhase1 = TrackSoAHeterogeneousDevice<pixelTopology::HIonPhase1>;
0034 
0035 }  // namespace pixelTrack
0036 
0037 #endif  // CUDADataFormats_Track_TrackHeterogeneousT_H