File indexing completed on 2023-10-25 09:37:10
0001 #ifndef CondFormats_HGCalObjects_HeterogeneousHGCalHEFConditions_h
0002 #define CondFormats_HGCalObjects_HeterogeneousHGCalHEFConditions_h
0003
0004 #include <numeric> //accumulate
0005 #include <typeinfo>
0006
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "HeterogeneousCore/CUDACore/interface/ESProduct.h"
0009 #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"
0010 #include "CUDADataFormats/HGCal/interface/HGCConditions.h"
0011 #include "Geometry/HGCalCommonData/interface/HGCalDDDConstants.h"
0012 #include "Geometry/HGCalCommonData/interface/HGCalParameters.h"
0013
0014 namespace cpar = hgcal_conditions::parameters;
0015 namespace cpos = hgcal_conditions::positions;
0016
0017
0018
0019 class HeterogeneousHGCalHEFCellPositionsConditions {
0020 public:
0021
0022
0023 HeterogeneousHGCalHEFCellPositionsConditions(cpos::HGCalPositionsMapping*);
0024
0025
0026 ~HeterogeneousHGCalHEFCellPositionsConditions();
0027
0028
0029 hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct const* getHeterogeneousConditionsESProductAsync(
0030 cudaStream_t stream) const;
0031
0032 private:
0033
0034
0035 cpos::HeterogeneousHGCalPositionsMapping posmap_;
0036 size_t nelems_posmap_;
0037
0038 std::vector<size_t> sizes_;
0039 size_t chunk_;
0040 const size_t number_position_arrays =
0041 2;
0042
0043 std::vector<size_t> calculate_memory_bytes_(cpos::HGCalPositionsMapping*);
0044 size_t allocate_memory_(const std::vector<size_t>&);
0045 void transfer_data_to_heterogeneous_pointers_(const std::vector<size_t>&, cpos::HGCalPositionsMapping*);
0046 void transfer_data_to_heterogeneous_vars_(const cpos::HGCalPositionsMapping*);
0047
0048
0049
0050 float*& select_pointer_f_(cpos::HeterogeneousHGCalPositionsMapping*, const unsigned int&) const;
0051 std::vector<float>& select_pointer_f_(cpos::HGCalPositionsMapping*, const unsigned int&);
0052
0053 int32_t*& select_pointer_i_(cpos::HeterogeneousHGCalPositionsMapping*, const unsigned int&) const;
0054 std::vector<int32_t>& select_pointer_i_(cpos::HGCalPositionsMapping*, const unsigned int&);
0055
0056 uint32_t*& select_pointer_u_(cpos::HeterogeneousHGCalPositionsMapping*, const unsigned int&) const;
0057 std::vector<uint32_t>& select_pointer_u_(cpos::HGCalPositionsMapping*, const unsigned int&);
0058
0059
0060
0061 struct GPUData {
0062
0063 ~GPUData();
0064
0065 hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* host = nullptr;
0066
0067 hgcal_conditions::HeterogeneousHEFCellPositionsConditionsESProduct* device = nullptr;
0068 };
0069
0070
0071
0072 cms::cuda::ESProduct<GPUData> gpuData_;
0073 };
0074
0075 #endif