Skip to content

Commit 12b7b95

Browse files
committed
Do not default construct PortableCollections
Do not use default-constructed PortableCollections and similar objects: these have a not well-defined semantics, especially if put into the Event.
1 parent 48600da commit 12b7b95

File tree

6 files changed

+44
-34
lines changed

6 files changed

+44
-34
lines changed

DataFormats/VertexSoA/test/alpaka/ZVertexSoA_test.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,10 @@ int main() {
5656

5757
// If the device is actually the host, use the collection as-is.
5858
// Otherwise, copy the data from the device to the host.
59-
ZVertexHost zvertex_h;
6059
#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED
61-
zvertex_h = std::move(zvertex_d);
60+
ZVertexHost zvertex_h = std::move(zvertex_d);
6261
#else
63-
zvertex_h = cms::alpakatools::CopyToHost<ZVertexSoACollection>::copyAsync(queue, zvertex_d);
62+
ZVertexHost zvertex_h = cms::alpakatools::CopyToHost<ZVertexSoACollection>::copyAsync(queue, zvertex_d);
6463
#endif
6564
alpaka::wait(queue);
6665
std::cout << zvertex_h.view().metadata().size() << std::endl;

EventFilter/HcalRawToDigi/plugins/alpaka/HcalDigisSoAProducer.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
116116
event.emplace(digisF5HBToken_, std::move(df5_));
117117

118118
if (qie11Digis.empty()) {
119-
event.emplace(digisF01HEToken_);
120-
event.emplace(digisF3HBToken_);
119+
event.emplace(digisF01HEToken_, 0, event.queue());
120+
event.emplace(digisF3HBToken_, 0, event.queue());
121121

122122
} else {
123123
auto size_f1 = 0;

HeterogeneousCore/AlpakaTest/plugins/alpaka/TestHelperClass.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
2323
hostProductMulti2_ = portabletest::TestHostMultiCollection2{deviceProductMulti2.sizes(), iEvent.queue()};
2424
hostProductMulti3_ = portabletest::TestHostMultiCollection3{deviceProductMulti3.sizes(), iEvent.queue()};
2525

26-
alpaka::memcpy(iEvent.queue(), hostProduct_.buffer(), deviceProduct.const_buffer());
27-
alpaka::memcpy(iEvent.queue(), hostProductMulti2_.buffer(), deviceProductMulti2.const_buffer());
28-
alpaka::memcpy(iEvent.queue(), hostProductMulti3_.buffer(), deviceProductMulti3.const_buffer());
26+
alpaka::memcpy(iEvent.queue(), hostProduct_->buffer(), deviceProduct.const_buffer());
27+
alpaka::memcpy(iEvent.queue(), hostProductMulti2_->buffer(), deviceProductMulti2.const_buffer());
28+
alpaka::memcpy(iEvent.queue(), hostProductMulti3_->buffer(), deviceProductMulti3.const_buffer());
2929
}
3030
} // namespace ALPAKA_ACCELERATOR_NAMESPACE

HeterogeneousCore/AlpakaTest/plugins/alpaka/TestHelperClass.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#ifndef HeterogeneousCore_AlpakaTest_plugins_alpaka_TestHelperClass_h
22
#define HeterogeneousCore_AlpakaTest_plugins_alpaka_TestHelperClass_h
33

4+
#include <optional>
5+
46
#include "DataFormats/PortableTestObjects/interface/TestHostCollection.h"
57
#include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceCollection.h"
68
#include "FWCore/Framework/interface/ConsumesCollector.h"
@@ -23,9 +25,23 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
2325

2426
void makeAsync(device::Event const& iEvent, device::EventSetup const& iSetup);
2527

26-
portabletest::TestHostCollection moveFrom() { return std::move(hostProduct_); }
27-
portabletest::TestHostMultiCollection2 moveFromMulti2() { return std::move(hostProductMulti2_); }
28-
portabletest::TestHostMultiCollection3 moveFromMulti3() { return std::move(hostProductMulti3_); }
28+
portabletest::TestHostCollection moveFrom() {
29+
auto product = std::move(*hostProduct_);
30+
hostProduct_.reset();
31+
return product;
32+
}
33+
34+
portabletest::TestHostMultiCollection2 moveFromMulti2() {
35+
auto product = std::move(*hostProductMulti2_);
36+
hostProductMulti2_.reset();
37+
return product;
38+
}
39+
40+
portabletest::TestHostMultiCollection3 moveFromMulti3() {
41+
auto product = std::move(*hostProductMulti3_);
42+
hostProductMulti3_.reset();
43+
return product;
44+
}
2945

3046
private:
3147
const device::EDGetToken<portabletest::TestDeviceCollection> getToken_;
@@ -35,9 +51,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
3551
const device::ESGetToken<AlpakaESTestDataCDevice, AlpakaESTestRecordC> esTokenDevice_;
3652

3753
// hold the output product between acquire() and produce()
38-
portabletest::TestHostCollection hostProduct_;
39-
portabletest::TestHostMultiCollection2 hostProductMulti2_;
40-
portabletest::TestHostMultiCollection3 hostProductMulti3_;
54+
std::optional<portabletest::TestHostCollection> hostProduct_;
55+
std::optional<portabletest::TestHostMultiCollection2> hostProductMulti2_;
56+
std::optional<portabletest::TestHostMultiCollection3> hostProductMulti3_;
4157
};
4258
} // namespace ALPAKA_ACCELERATOR_NAMESPACE
4359

RecoLocalTracker/SiPixelClusterizer/plugins/alpaka/SiPixelPhase2DigiToCluster.cc

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// C++ includes
22
#include <memory>
3+
#include <optional>
34
#include <stdexcept>
45
#include <string>
56
#include <utility>
@@ -52,7 +53,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
5253
const SiPixelClusterThresholds clusterThresholds_;
5354
uint32_t nDigis_ = 0;
5455

55-
SiPixelDigisSoACollection digis_d;
56+
std::optional<SiPixelDigisSoACollection> digis_d_;
5657
};
5758

5859
SiPixelPhase2DigiToCluster::SiPixelPhase2DigiToCluster(const edm::ParameterSet& iConfig)
@@ -88,7 +89,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
8889
const TrackerGeometry* geom_ = &iSetup.getData(geomToken_);
8990

9091
uint32_t nDigis = 0;
91-
9292
for (const auto& det : input) {
9393
nDigis += det.size();
9494
}
@@ -107,39 +107,33 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
107107
auto const gind = genericDet->index();
108108
for (auto const& px : det) {
109109
digis_h.view()[nDigis].moduleId() = uint16_t(gind);
110-
111110
digis_h.view()[nDigis].xx() = uint16_t(px.row());
112111
digis_h.view()[nDigis].yy() = uint16_t(px.column());
113112
digis_h.view()[nDigis].adc() = uint16_t(px.adc());
114-
115113
digis_h.view()[nDigis].clus() = 0;
116-
117114
digis_h.view()[nDigis].pdigi() = uint32_t(px.packedData());
118-
119115
digis_h.view()[nDigis].rawIdArr() = uint32_t(detid);
120-
121-
nDigis++;
116+
++nDigis;
122117
}
123118
}
124119

125-
digis_d = SiPixelDigisSoACollection(nDigis, iEvent.queue());
126-
alpaka::memcpy(iEvent.queue(), digis_d.buffer(), digis_h.buffer());
127-
128-
Algo_.makePhase2ClustersAsync(iEvent.queue(), clusterThresholds_, digis_d.view(), nDigis_);
120+
digis_d_ = SiPixelDigisSoACollection(nDigis, iEvent.queue());
121+
alpaka::memcpy(iEvent.queue(), digis_d_->buffer(), digis_h.buffer());
122+
Algo_.makePhase2ClustersAsync(iEvent.queue(), clusterThresholds_, digis_d_->view(), nDigis_);
129123
}
130124

131125
void SiPixelPhase2DigiToCluster::produce(device::Event& iEvent, device::EventSetup const& iSetup) {
132126
if (nDigis_ == 0) {
133127
SiPixelClustersSoACollection clusters_d{pixelTopology::Phase2::numberOfModules, iEvent.queue()};
134-
SiPixelDigisSoACollection digis_d_zero{nDigis_, iEvent.queue()};
128+
SiPixelDigisSoACollection digis_d_zero{0, iEvent.queue()};
135129
iEvent.emplace(digiPutToken_, std::move(digis_d_zero));
136130
iEvent.emplace(clusterPutToken_, std::move(clusters_d));
137-
return;
131+
} else {
132+
digis_d_->setNModules(Algo_.nModules());
133+
iEvent.emplace(digiPutToken_, std::move(*digis_d_));
134+
iEvent.emplace(clusterPutToken_, Algo_.getClusters());
138135
}
139-
140-
digis_d.setNModules(Algo_.nModules());
141-
iEvent.emplace(digiPutToken_, std::move(digis_d));
142-
iEvent.emplace(clusterPutToken_, Algo_.getClusters());
136+
digis_d_.reset();
143137
}
144138

145139
} // namespace ALPAKA_ACCELERATOR_NAMESPACE

RecoLocalTracker/SiPixelClusterizer/plugins/alpaka/SiPixelRawToCluster.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include <memory>
2+
#include <optional>
23
#include <stdexcept>
34
#include <string>
45
#include <utility>
@@ -262,10 +263,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
262263
// are no valid pointers to clusters' Collection columns, instantiation
263264
// of TrackingRecHits fail. Example: workflow 11604.0
264265

265-
iEvent.emplace(digiPutToken_, nDigis_, iEvent.queue());
266+
iEvent.emplace(digiPutToken_, 0, iEvent.queue());
266267
iEvent.emplace(clusterPutToken_, pixelTopology::Phase1::numberOfModules, iEvent.queue());
267268
if (includeErrors_) {
268-
iEvent.emplace(digiErrorPutToken_);
269+
iEvent.emplace(digiErrorPutToken_, 0, iEvent.queue());
269270
iEvent.emplace(fmtErrorToken_);
270271
}
271272
return;

0 commit comments

Comments
 (0)