Skip to content

Commit 16f5cb4

Browse files
authored
Merge pull request #46887 from fwyzard/fix_PFClusterSoAProducer_input_collection_alt
Fix PFClusterSoAProducer to read a device collection
2 parents 3d2fe38 + 58094c1 commit 16f5cb4

File tree

5 files changed

+69
-56
lines changed

5 files changed

+69
-56
lines changed

RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterECLCC.h

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

4+
#include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitDeviceCollection.h"
45
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
56
#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"
6-
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h"
77
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringEdgeVarsDeviceCollection.h"
8+
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h"
89

910
// The following comment block is required in using the ECL-CC algorithm for topological clustering
1011

@@ -79,9 +80,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
7980
// Initial step of ECL-CC. Uses ID of first neighbour in edgeList with a smaller ID
8081
class ECLCCInit {
8182
public:
82-
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
83-
ALPAKA_FN_ACC void operator()(const TAcc& acc,
84-
reco::PFRecHitHostCollection::ConstView pfRecHits,
83+
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
84+
reco::PFRecHitDeviceCollection::ConstView pfRecHits,
8585
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
8686
reco::PFClusteringEdgeVarsDeviceCollection::View pfClusteringEdgeVars) const {
8787
const int nRH = pfRecHits.size();
@@ -103,9 +103,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
103103
// Processes vertices
104104
class ECLCCCompute1 {
105105
public:
106-
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
107-
ALPAKA_FN_ACC void operator()(const TAcc& acc,
108-
reco::PFRecHitHostCollection::ConstView pfRecHits,
106+
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
107+
reco::PFRecHitDeviceCollection::ConstView pfRecHits,
109108
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
110109
reco::PFClusteringEdgeVarsDeviceCollection::View pfClusteringEdgeVars) const {
111110
const int nRH = pfRecHits.size();
@@ -148,9 +147,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
148147
/* link all vertices to sink */
149148
class ECLCCFlatten {
150149
public:
151-
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
152-
ALPAKA_FN_ACC void operator()(const TAcc& acc,
153-
reco::PFRecHitHostCollection::ConstView pfRecHits,
150+
ALPAKA_FN_ACC void operator()(Acc1D const& acc,
151+
reco::PFRecHitDeviceCollection::ConstView pfRecHits,
154152
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
155153
reco::PFClusteringEdgeVarsDeviceCollection::View pfClusteringEdgeVars) const {
156154
const int nRH = pfRecHits.size();

RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <Eigen/Core>
22
#include <Eigen/Dense>
33

4-
#include "DataFormats/ParticleFlowReco/interface/PFRecHitHostCollection.h"
4+
#include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitDeviceCollection.h"
55
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
66
#include "FWCore/ParameterSet/interface/ParameterSet.h"
77
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
@@ -16,12 +16,14 @@
1616
#include "RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h"
1717

1818
namespace ALPAKA_ACCELERATOR_NAMESPACE {
19+
1920
class PFClusterSoAProducer : public stream::SynchronizingEDProducer<> {
2021
public:
2122
PFClusterSoAProducer(edm::ParameterSet const& config)
2223
: pfClusParamsToken(esConsumes(config.getParameter<edm::ESInputTag>("pfClusterParams"))),
2324
topologyToken_(esConsumes(config.getParameter<edm::ESInputTag>("topology"))),
2425
inputPFRecHitSoA_Token_{consumes(config.getParameter<edm::InputTag>("pfRecHits"))},
26+
inputPFRecHitNum_Token_{consumes(config.getParameter<edm::InputTag>("pfRecHits"))},
2527
outputPFClusterSoA_Token_{produces()},
2628
outputPFRHFractionSoA_Token_{produces()},
2729
numRHF_{cms::alpakatools::make_host_buffer<uint32_t, Platform>()},
@@ -30,10 +32,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
3032
void acquire(device::Event const& event, device::EventSetup const& setup) override {
3133
const reco::PFClusterParamsDeviceCollection& params = setup.getData(pfClusParamsToken);
3234
const reco::PFRecHitHCALTopologyDeviceCollection& topology = setup.getData(topologyToken_);
33-
const reco::PFRecHitHostCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_);
34-
int nRH = 0;
35-
if (pfRecHits->metadata().size() != 0)
36-
nRH = pfRecHits->size();
35+
const reco::PFRecHitDeviceCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_);
36+
int nRH = event.get(inputPFRecHitNum_Token_);
3737

3838
pfClusteringVars_.emplace(nRH, event.queue());
3939
pfClusteringEdgeVars_.emplace(nRH * 8, event.queue());
@@ -42,13 +42,14 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
4242
*numRHF_ = 0;
4343

4444
if (nRH != 0) {
45-
PFClusterProducerKernel kernel(event.queue(), pfRecHits);
45+
PFClusterProducerKernel kernel(event.queue());
4646
kernel.seedTopoAndContract(event.queue(),
4747
params,
4848
topology,
4949
*pfClusteringVars_,
5050
*pfClusteringEdgeVars_,
5151
pfRecHits,
52+
nRH,
5253
*pfClusters_,
5354
numRHF_.data());
5455
}
@@ -57,23 +58,21 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
5758
void produce(device::Event& event, device::EventSetup const& setup) override {
5859
const reco::PFClusterParamsDeviceCollection& params = setup.getData(pfClusParamsToken);
5960
const reco::PFRecHitHCALTopologyDeviceCollection& topology = setup.getData(topologyToken_);
60-
const reco::PFRecHitHostCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_);
61-
int nRH = 0;
61+
const reco::PFRecHitDeviceCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_);
6262

6363
std::optional<reco::PFRecHitFractionDeviceCollection> pfrhFractions;
6464

65-
if (pfRecHits->metadata().size() != 0)
66-
nRH = pfRecHits->size();
67-
65+
int nRH = event.get(inputPFRecHitNum_Token_);
6866
if (nRH != 0) {
69-
pfrhFractions.emplace(*numRHF_.data(), event.queue());
70-
PFClusterProducerKernel kernel(event.queue(), pfRecHits);
67+
pfrhFractions.emplace(*numRHF_, event.queue());
68+
PFClusterProducerKernel kernel(event.queue());
7169
kernel.cluster(event.queue(),
7270
params,
7371
topology,
7472
*pfClusteringVars_,
7573
*pfClusteringEdgeVars_,
7674
pfRecHits,
75+
nRH,
7776
*pfClusters_,
7877
*pfrhFractions);
7978
} else {
@@ -99,7 +98,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
9998
private:
10099
const device::ESGetToken<reco::PFClusterParamsDeviceCollection, JobConfigurationGPURecord> pfClusParamsToken;
101100
const device::ESGetToken<reco::PFRecHitHCALTopologyDeviceCollection, PFRecHitHCALTopologyRecord> topologyToken_;
102-
const edm::EDGetTokenT<reco::PFRecHitHostCollection> inputPFRecHitSoA_Token_;
101+
const device::EDGetToken<reco::PFRecHitDeviceCollection> inputPFRecHitSoA_Token_;
102+
const edm::EDGetTokenT<cms_uint32_t> inputPFRecHitNum_Token_;
103103
const device::EDPutToken<reco::PFClusterDeviceCollection> outputPFClusterSoA_Token_;
104104
const device::EDPutToken<reco::PFRecHitFractionDeviceCollection> outputPFRHFractionSoA_Token_;
105105
cms::alpakatools::host_buffer<uint32_t> numRHF_;

RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
#include <alpaka/alpaka.hpp>
22

3+
#include "DataFormats/ParticleFlowReco/interface/PFLayer.h"
34
#include "FWCore/Utilities/interface/bit_cast.h"
5+
#include "HeterogeneousCore/AlpakaInterface/interface/atomicMaxF.h"
46
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
57
#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"
6-
#include "HeterogeneousCore/AlpakaInterface/interface/atomicMaxF.h"
7-
8-
#include "DataFormats/ParticleFlowReco/interface/PFLayer.h"
9-
#include "RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h"
108
#include "RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterECLCC.h"
9+
#include "RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h"
1110

1211
namespace ALPAKA_ACCELERATOR_NAMESPACE {
1312

@@ -1088,7 +1087,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
10881087
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
10891088
const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams,
10901089
const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology,
1091-
const reco::PFRecHitHostCollection::ConstView pfRecHits,
1090+
const reco::PFRecHitDeviceCollection::ConstView pfRecHits,
10921091
reco::PFClusterDeviceCollection::View clusterView,
10931092
uint32_t* __restrict__ nSeeds) const {
10941093
const int nRH = pfRecHits.size();
@@ -1165,7 +1164,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
11651164
public:
11661165
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
11671166
ALPAKA_FN_ACC void operator()(const TAcc& acc,
1168-
const reco::PFRecHitHostCollection::ConstView pfRecHits,
1167+
const reco::PFRecHitDeviceCollection::ConstView pfRecHits,
11691168
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
11701169
reco::PFClusteringEdgeVarsDeviceCollection::View pfClusteringEdgeVars,
11711170
uint32_t* __restrict__ nSeeds) const {
@@ -1195,7 +1194,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
11951194
public:
11961195
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
11971196
ALPAKA_FN_ACC void operator()(const TAcc& acc,
1198-
const reco::PFRecHitHostCollection::ConstView pfRecHits,
1197+
const reco::PFRecHitDeviceCollection::ConstView pfRecHits,
11991198
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
12001199
reco::PFClusterDeviceCollection::View clusterView,
12011200
uint32_t* __restrict__ nSeeds,
@@ -1319,7 +1318,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
13191318
public:
13201319
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
13211320
ALPAKA_FN_ACC void operator()(const TAcc& acc,
1322-
const reco::PFRecHitHostCollection::ConstView pfRecHits,
1321+
const reco::PFRecHitDeviceCollection::ConstView pfRecHits,
13231322
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
13241323
reco::PFRecHitFractionDeviceCollection::View fracView) const {
13251324
const int nRH = pfRecHits.size();
@@ -1350,7 +1349,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
13501349
public:
13511350
template <bool debug = false, typename TAcc, typename = std::enable_if<!std::is_same_v<Device, alpaka::DevCpu>>>
13521351
ALPAKA_FN_ACC void operator()(const TAcc& acc,
1353-
const reco::PFRecHitHostCollection::ConstView pfRecHits,
1352+
const reco::PFRecHitDeviceCollection::ConstView pfRecHits,
13541353
const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams,
13551354
const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology,
13561355
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
@@ -1412,7 +1411,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
14121411
public:
14131412
template <typename TAcc, typename = std::enable_if_t<alpaka::isAccelerator<TAcc>>>
14141413
ALPAKA_FN_ACC void operator()(const TAcc& acc,
1415-
const reco::PFRecHitHostCollection::ConstView pfRecHits,
1414+
const reco::PFRecHitDeviceCollection::ConstView pfRecHits,
14161415
const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams,
14171416
const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology,
14181417
reco::PFClusteringVarsDeviceCollection::View pfClusteringVars,
@@ -1454,7 +1453,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
14541453
}
14551454
};
14561455

1457-
PFClusterProducerKernel::PFClusterProducerKernel(Queue& queue, const reco::PFRecHitHostCollection& pfRecHits)
1456+
PFClusterProducerKernel::PFClusterProducerKernel(Queue& queue)
14581457
: nSeeds(cms::alpakatools::make_device_buffer<uint32_t>(queue)),
14591458
globalClusterPos(
14601459
cms::alpakatools::make_device_buffer<Position4[]>(queue, blocksForExoticClusters * maxTopoInput)),
@@ -1473,10 +1472,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
14731472
const reco::PFRecHitHCALTopologyDeviceCollection& topology,
14741473
reco::PFClusteringVarsDeviceCollection& pfClusteringVars,
14751474
reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars,
1476-
const reco::PFRecHitHostCollection& pfRecHits,
1475+
const reco::PFRecHitDeviceCollection& pfRecHits,
1476+
int nRH,
14771477
reco::PFClusterDeviceCollection& pfClusters,
14781478
uint32_t* __restrict__ nRHF) {
1479-
const int nRH = pfRecHits->size();
14801479
const int threadsPerBlock = 256;
14811480
const int blocks = divide_up_by(nRH, threadsPerBlock);
14821481

@@ -1533,11 +1532,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
15331532
const reco::PFRecHitHCALTopologyDeviceCollection& topology,
15341533
reco::PFClusteringVarsDeviceCollection& pfClusteringVars,
15351534
reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars,
1536-
const reco::PFRecHitHostCollection& pfRecHits,
1535+
const reco::PFRecHitDeviceCollection& pfRecHits,
1536+
int nRH,
15371537
reco::PFClusterDeviceCollection& pfClusters,
15381538
reco::PFRecHitFractionDeviceCollection& pfrhFractions) {
1539-
const int nRH = pfRecHits->size();
1540-
15411539
// fillRhfIndex
15421540
alpaka::exec<Acc2D>(queue,
15431541
make_workdiv<Acc2D>({divide_up_by(nRH, 32), divide_up_by(nRH, 32)}, {32, 32}),

RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
#ifndef RecoParticleFlow_PFClusterProducer_PFClusterProducerAlpakaKernel_h
22
#define RecoParticleFlow_PFClusterProducer_PFClusterProducerAlpakaKernel_h
33

4-
#include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitDeviceCollection.h"
5-
#include "DataFormats/ParticleFlowReco/interface/PFRecHitHostCollection.h"
64
#include "DataFormats/ParticleFlowReco/interface/alpaka/PFClusterDeviceCollection.h"
5+
#include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitDeviceCollection.h"
76
#include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitFractionDeviceCollection.h"
7+
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
88
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h"
9-
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h"
109
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringEdgeVarsDeviceCollection.h"
10+
#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h"
1111
#include "RecoParticleFlow/PFRecHitProducer/interface/alpaka/PFRecHitTopologyDeviceCollection.h"
12-
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
1312

1413
namespace ALPAKA_ACCELERATOR_NAMESPACE {
1514

@@ -37,14 +36,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
3736

3837
class PFClusterProducerKernel {
3938
public:
40-
PFClusterProducerKernel(Queue& queue, const reco::PFRecHitHostCollection& pfRecHits);
39+
explicit PFClusterProducerKernel(Queue& queue);
4140

4241
void seedTopoAndContract(Queue& queue,
4342
const reco::PFClusterParamsDeviceCollection& params,
4443
const reco::PFRecHitHCALTopologyDeviceCollection& topology,
4544
reco::PFClusteringVarsDeviceCollection& pfClusteringVars,
4645
reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars,
47-
const reco::PFRecHitHostCollection& pfRecHits,
46+
const reco::PFRecHitDeviceCollection& pfRecHits,
47+
int nRH,
4848
reco::PFClusterDeviceCollection& pfClusters,
4949
uint32_t* __restrict__ nRHF);
5050

@@ -53,7 +53,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
5353
const reco::PFRecHitHCALTopologyDeviceCollection& topology,
5454
reco::PFClusteringVarsDeviceCollection& pfClusteringVars,
5555
reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars,
56-
const reco::PFRecHitHostCollection& pfRecHits,
56+
const reco::PFRecHitDeviceCollection& pfRecHits,
57+
int nRH,
5758
reco::PFClusterDeviceCollection& pfClusters,
5859
reco::PFRecHitFractionDeviceCollection& pfrhFractions);
5960

0 commit comments

Comments
 (0)