Skip to content

Commit 567a8bc

Browse files
authored
Merge pull request #46876 from fwyzard/no_default_constructed_PortableCollections
Do not use default-constructed PortableCollections
2 parents 530e534 + 6d13038 commit 567a8bc

File tree

6 files changed

+54
-49
lines changed

6 files changed

+54
-49
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: 22 additions & 33 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>
@@ -43,16 +44,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
4344

4445
const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
4546
const edm::EDGetTokenT<edm::DetSetVector<PixelDigi>> pixelDigiToken_;
46-
47-
device::EDPutToken<SiPixelDigisSoACollection> digiPutToken_;
48-
device::EDPutToken<SiPixelClustersSoACollection> clusterPutToken_;
49-
50-
Algo Algo_;
51-
47+
const device::EDPutToken<SiPixelDigisSoACollection> digiPutToken_;
48+
const device::EDPutToken<SiPixelClustersSoACollection> clusterPutToken_;
5249
const SiPixelClusterThresholds clusterThresholds_;
53-
uint32_t nDigis_ = 0;
5450

55-
SiPixelDigisSoACollection digis_d;
51+
Algo algo_;
52+
uint32_t nDigis_ = 0;
53+
std::optional<SiPixelDigisSoACollection> digis_d_;
5654
};
5755

5856
SiPixelPhase2DigiToCluster::SiPixelPhase2DigiToCluster(const edm::ParameterSet& iConfig)
@@ -87,59 +85,50 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
8785

8886
const TrackerGeometry* geom_ = &iSetup.getData(geomToken_);
8987

90-
uint32_t nDigis = 0;
91-
88+
nDigis_ = 0;
9289
for (const auto& det : input) {
93-
nDigis += det.size();
90+
nDigis_ += det.size();
9491
}
92+
digis_d_ = SiPixelDigisSoACollection(nDigis_, iEvent.queue());
9593

96-
if (nDigis == 0)
94+
if (nDigis_ == 0)
9795
return;
9896

99-
nDigis_ = nDigis;
10097
SiPixelDigisHost digis_h(nDigis_, iEvent.queue());
10198

102-
nDigis = 0;
99+
uint32_t nDigis = 0;
103100
for (const auto& det : input) {
104101
unsigned int detid = det.detId();
105102
DetId detIdObject(detid);
106103
const GeomDetUnit* genericDet = geom_->idToDetUnit(detIdObject);
107104
auto const gind = genericDet->index();
108105
for (auto const& px : det) {
109106
digis_h.view()[nDigis].moduleId() = uint16_t(gind);
110-
111107
digis_h.view()[nDigis].xx() = uint16_t(px.row());
112108
digis_h.view()[nDigis].yy() = uint16_t(px.column());
113109
digis_h.view()[nDigis].adc() = uint16_t(px.adc());
114-
115110
digis_h.view()[nDigis].clus() = 0;
116-
117111
digis_h.view()[nDigis].pdigi() = uint32_t(px.packedData());
118-
119112
digis_h.view()[nDigis].rawIdArr() = uint32_t(detid);
120-
121-
nDigis++;
113+
++nDigis;
122114
}
123115
}
116+
assert(nDigis == nDigis_);
124117

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_);
118+
alpaka::memcpy(iEvent.queue(), digis_d_->buffer(), digis_h.buffer());
119+
algo_.makePhase2ClustersAsync(iEvent.queue(), clusterThresholds_, digis_d_->view(), nDigis_);
129120
}
130121

131122
void SiPixelPhase2DigiToCluster::produce(device::Event& iEvent, device::EventSetup const& iSetup) {
132123
if (nDigis_ == 0) {
133-
SiPixelClustersSoACollection clusters_d{pixelTopology::Phase2::numberOfModules, iEvent.queue()};
134-
SiPixelDigisSoACollection digis_d_zero{nDigis_, iEvent.queue()};
135-
iEvent.emplace(digiPutToken_, std::move(digis_d_zero));
136-
iEvent.emplace(clusterPutToken_, std::move(clusters_d));
137-
return;
124+
iEvent.emplace(digiPutToken_, std::move(*digis_d_));
125+
iEvent.emplace(clusterPutToken_, pixelTopology::Phase2::numberOfModules, iEvent.queue());
126+
} else {
127+
digis_d_->setNModules(algo_.nModules());
128+
iEvent.emplace(digiPutToken_, std::move(*digis_d_));
129+
iEvent.emplace(clusterPutToken_, algo_.getClusters());
138130
}
139-
140-
digis_d.setNModules(Algo_.nModules());
141-
iEvent.emplace(digiPutToken_, std::move(digis_d));
142-
iEvent.emplace(clusterPutToken_, Algo_.getClusters());
131+
digis_d_.reset();
143132
}
144133

145134
} // 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)