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