Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef CUDADataFormats_SiPixelDigi_interface_SiPixelDigiErrorsCUDA_h
0002 #define CUDADataFormats_SiPixelDigi_interface_SiPixelDigiErrorsCUDA_h
0003 
0004 #include <cuda_runtime.h>
0005 
0006 #include "DataFormats/SiPixelRawData/interface/SiPixelErrorCompact.h"
0007 #include "DataFormats/SiPixelRawData/interface/SiPixelFormatterErrors.h"
0008 #include "HeterogeneousCore/CUDAUtilities/interface/SimpleVector.h"
0009 #include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
0010 #include "HeterogeneousCore/CUDAUtilities/interface/host_unique_ptr.h"
0011 
0012 class SiPixelDigiErrorsCUDA {
0013 public:
0014   using SiPixelErrorCompactVector = cms::cuda::SimpleVector<SiPixelErrorCompact>;
0015 
0016   SiPixelDigiErrorsCUDA() = default;
0017   explicit SiPixelDigiErrorsCUDA(size_t maxFedWords, SiPixelFormatterErrors errors, cudaStream_t stream);
0018   ~SiPixelDigiErrorsCUDA() = default;
0019 
0020   SiPixelDigiErrorsCUDA(const SiPixelDigiErrorsCUDA&) = delete;
0021   SiPixelDigiErrorsCUDA& operator=(const SiPixelDigiErrorsCUDA&) = delete;
0022   SiPixelDigiErrorsCUDA(SiPixelDigiErrorsCUDA&&) = default;
0023   SiPixelDigiErrorsCUDA& operator=(SiPixelDigiErrorsCUDA&&) = default;
0024 
0025   const SiPixelFormatterErrors& formatterErrors() const { return formatterErrors_h; }
0026 
0027   SiPixelErrorCompactVector* error() { return error_d.get(); }
0028   SiPixelErrorCompactVector const* error() const { return error_d.get(); }
0029 
0030   using HostDataError = std::pair<SiPixelErrorCompactVector, cms::cuda::host::unique_ptr<SiPixelErrorCompact[]>>;
0031   HostDataError dataErrorToHostAsync(cudaStream_t stream) const;
0032 
0033   void copyErrorToHostAsync(cudaStream_t stream);
0034   int nErrorWords() const { return nErrorWords_; }
0035 
0036 private:
0037   cms::cuda::device::unique_ptr<SiPixelErrorCompact[]> data_d;
0038   cms::cuda::device::unique_ptr<SiPixelErrorCompactVector> error_d;
0039   cms::cuda::host::unique_ptr<SiPixelErrorCompactVector> error_h;
0040   SiPixelFormatterErrors formatterErrors_h;
0041   int nErrorWords_ = 0;
0042 };
0043 
0044 #endif  // CUDADataFormats_SiPixelDigi_interface_SiPixelDigiErrorsCUDA_h