33
33
#include " CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h"
34
34
#include " RecoLocalCalo/HGCalRecAlgos/interface/alpaka/HGCalRecHitCalibrationAlgorithms.h"
35
35
36
+ // flag to assist the computational performance test
37
+ // #define HGCAL_PERF_TEST
38
+
36
39
namespace ALPAKA_ACCELERATOR_NAMESPACE {
37
40
38
41
using namespace cms ::alpakatools;
@@ -47,11 +50,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
47
50
edm::ESWatcher<HGCalElectronicsMappingRcd> calibWatcher_;
48
51
edm::ESWatcher<HGCalModuleConfigurationRcd> configWatcher_;
49
52
const edm::EDGetTokenT<hgcaldigi::HGCalDigiHost> digisToken_;
50
- device ::ESGetToken<hgcalrechit::HGCalCalibParamDevice , HGCalModuleConfigurationRcd> calibToken_;
53
+ edm ::ESGetToken<hgcalrechit::HGCalCalibParamHost , HGCalModuleConfigurationRcd> calibToken_;
51
54
device::ESGetToken<hgcalrechit::HGCalConfigParamDevice, HGCalModuleConfigurationRcd> configToken_;
52
55
const device::EDPutToken<hgcalrechit::HGCalRecHitDevice> recHitsToken_;
53
56
const HGCalRecHitCalibrationAlgorithms calibrator_;
54
- int n_hits_scale;
57
+ const int n_hits_scale;
55
58
};
56
59
57
60
HGCalRecHitsProducer::HGCalRecHitsProducer (const edm::ParameterSet& iConfig)
@@ -61,7 +64,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
61
64
configToken_{esConsumes (iConfig.getParameter <edm::ESInputTag>(" configSource" ))},
62
65
recHitsToken_{produces ()},
63
66
calibrator_{iConfig.getParameter <int >(" n_blocks" ), iConfig.getParameter <int >(" n_threads" )},
64
- n_hits_scale{iConfig.getParameter <int >(" n_hits_scale" )} {}
67
+ n_hits_scale{iConfig.getParameter <int >(" n_hits_scale" )} {
68
+ #ifndef HGCAL_PERF_TEST
69
+ if (n_hits_scale > 1 ) {
70
+ throw cms::Exception (" RuntimeError" ) << " Build with `HGCAL_PERF_TEST` flag to activate `n_hits_scale`." ;
71
+ }
72
+ #endif
73
+ }
65
74
66
75
void HGCalRecHitsProducer::fillDescriptions (edm::ConfigurationDescriptions& descriptions) {
67
76
edm::ParameterSetDescription desc;
@@ -78,7 +87,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
78
87
auto & queue = iEvent.queue ();
79
88
80
89
// Read digis
81
- auto const & deviceCalibParamProvider = iSetup.getData (calibToken_);
90
+ auto const & hostCalibParamProvider = iSetup.getData (calibToken_);
82
91
auto const & deviceConfigParamProvider = iSetup.getData (configToken_);
83
92
auto const & hostDigisIn = iEvent.get (digisToken_);
84
93
@@ -87,28 +96,53 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
87
96
if (calibWatcher_.check (iSetup)) {
88
97
for (int i = 0 ; i < deviceConfigParamProvider.view ().metadata ().size (); i++) {
89
98
log << " idx = " << i << " , "
90
- << " gain = " << deviceConfigParamProvider.view ()[i].gain () << " ,"
91
- << " ADC_ped = " << deviceCalibParamProvider.view ()[i].ADC_ped () << " , "
92
- << " CM_slope = " << deviceCalibParamProvider.view ()[i].CM_slope () << " , "
93
- << " CM_ped = " << deviceCalibParamProvider.view ()[i].CM_ped () << " , "
94
- << " BXm1_slope = " << deviceCalibParamProvider.view ()[i].BXm1_slope () << " , " ;
99
+ << " gain = " << deviceConfigParamProvider.view ()[i].gain () << " , " ;
100
+ }
101
+ for (int i = 0 ; i < hostCalibParamProvider.view ().metadata ().size (); i++) {
102
+ log << " idx = " << i << " , "
103
+ << " ADC_ped = " << hostCalibParamProvider.view ()[i].ADC_ped () << " , "
104
+ << " CM_slope = " << hostCalibParamProvider.view ()[i].CM_slope () << " , "
105
+ << " CM_ped = " << hostCalibParamProvider.view ()[i].CM_ped () << " , "
106
+ << " BXm1_slope = " << hostCalibParamProvider.view ()[i].BXm1_slope () << " , " ;
95
107
}
96
108
}
97
109
});
98
110
99
- int oldSize = hostDigisIn.view ().metadata ().size ();
100
- int newSize = oldSize * n_hits_scale;
111
+ #ifdef HGCAL_PERF_TEST
112
+ uint32_t oldSize = hostDigisIn.view ().metadata ().size ();
113
+ uint32_t newSize = oldSize * (n_hits_scale > 0 ? (unsigned )n_hits_scale : 1 );
101
114
auto hostDigis = HGCalDigiHost (newSize, queue);
115
+ auto hostCalibParam = HGCalCalibParamHost (newSize, queue);
102
116
// TODO: replace with memcp ?
103
- for (int i = 0 ; i < newSize; i++) {
117
+ for (uint32_t i = 0 ; i < newSize; i++) {
104
118
hostDigis.view ()[i].tctp () = hostDigisIn.view ()[i % oldSize].tctp ();
105
119
hostDigis.view ()[i].adcm1 () = hostDigisIn.view ()[i % oldSize].adcm1 ();
106
120
hostDigis.view ()[i].adc () = hostDigisIn.view ()[i % oldSize].adc ();
107
121
hostDigis.view ()[i].tot () = hostDigisIn.view ()[i % oldSize].tot ();
108
122
hostDigis.view ()[i].toa () = hostDigisIn.view ()[i % oldSize].toa ();
109
123
hostDigis.view ()[i].cm () = hostDigisIn.view ()[i % oldSize].cm ();
110
124
hostDigis.view ()[i].flags () = hostDigisIn.view ()[i % oldSize].flags ();
125
+
126
+ hostCalibParam.view ()[i].ADC_ped () = hostCalibParamProvider.view ()[i % oldSize].ADC_ped ();
127
+ hostCalibParam.view ()[i].Noise () = hostCalibParamProvider.view ()[i % oldSize].Noise ();
128
+ hostCalibParam.view ()[i].CM_slope () = hostCalibParamProvider.view ()[i % oldSize].CM_slope ();
129
+ hostCalibParam.view ()[i].CM_ped () = hostCalibParamProvider.view ()[i % oldSize].CM_ped ();
130
+ hostCalibParam.view ()[i].BXm1_slope () = hostCalibParamProvider.view ()[i % oldSize].BXm1_slope ();
131
+ hostCalibParam.view ()[i].TOTtoADC () = hostCalibParamProvider.view ()[i % oldSize].TOTtoADC ();
132
+ hostCalibParam.view ()[i].TOT_ped () = hostCalibParamProvider.view ()[i % oldSize].TOT_ped ();
133
+ hostCalibParam.view ()[i].TOT_lin () = hostCalibParamProvider.view ()[i % oldSize].TOT_lin ();
134
+ hostCalibParam.view ()[i].TOT_P0 () = hostCalibParamProvider.view ()[i % oldSize].TOT_P0 ();
135
+ hostCalibParam.view ()[i].TOT_P1 () = hostCalibParamProvider.view ()[i % oldSize].TOT_P1 ();
136
+ hostCalibParam.view ()[i].TOT_P2 () = hostCalibParamProvider.view ()[i % oldSize].TOT_P2 ();
137
+ hostCalibParam.view ()[i].TOAtops () = hostCalibParamProvider.view ()[i % oldSize].TOAtops ();
138
+ hostCalibParam.view ()[i].MIPS_scale () = hostCalibParamProvider.view ()[i % oldSize].MIPS_scale ();
139
+ hostCalibParam.view ()[i].valid () = hostCalibParamProvider.view ()[i % oldSize].valid ();
111
140
}
141
+ #else
142
+ const auto & hostDigis = hostDigisIn;
143
+ const auto & hostCalibParam = hostCalibParamProvider;
144
+ #endif
145
+
112
146
LogDebug (" HGCalRecHitsProducer" ) << " Loaded host digis: " << hostDigis.view ().metadata ().size (); // << std::endl;
113
147
114
148
LogDebug (" HGCalRecHitsProducer" ) << " \n\n INFO -- calling calibrate method" ; // << std::endl;
@@ -118,13 +152,24 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
118
152
auto start = std::chrono::steady_clock::now ();
119
153
#endif
120
154
121
- auto recHits = calibrator_.calibrate (queue, hostDigis, deviceCalibParamProvider, deviceConfigParamProvider);
155
+ LogDebug (" HGCalRecHitsProducer" ) << " \n\n INFO -- Copying the calib to the device\n\n " << std::endl;
156
+ HGCalCalibParamDevice deviceCalibParam (hostCalibParam.view ().metadata ().size (), queue);
157
+ alpaka::memcpy (queue, deviceCalibParam.buffer (), hostCalibParam.const_buffer ());
158
+
159
+ #ifdef HGCAL_PERF_TEST
160
+ auto tmpRecHits = calibrator_.calibrate (queue, hostDigis, deviceCalibParam, deviceConfigParamProvider);
161
+ HGCalRecHitDevice recHits (oldSize, queue);
162
+ alpaka::memcpy (queue, recHits.buffer (), tmpRecHits.const_buffer (), oldSize);
163
+ #else
164
+ auto recHits = calibrator_.calibrate (queue, hostDigis, deviceCalibParam, deviceConfigParamProvider);
165
+ #endif
122
166
123
167
#ifdef EDM_ML_DEBUG
124
168
alpaka::wait (queue);
125
169
auto stop = std::chrono::steady_clock::now ();
126
170
std::chrono::duration<float > elapsed = stop - start;
127
- LogDebug (" HGCalRecHitsProducer" ) << " Time spent calibrating: " << elapsed.count (); // << std::endl;
171
+ LogDebug (" HGCalRecHitsProducer" ) << " Time spent calibrating " << hostDigis.view ().metadata ().size ()
172
+ << " digis: " << elapsed.count (); // << std::endl;
128
173
#endif
129
174
130
175
LogDebug (" HGCalRecHitsProducer" ) << " \n\n INFO -- storing rec hits in the event" ; // << std::endl;
0 commit comments