Skip to content

Commit 8721994

Browse files
committed
Make the ZVertex SoA collection run-time sized
FIXME the code needs to be updated not to rely on zVertex::MAXVTX, zVertex::MAXTRACKS.
1 parent eb8cf5c commit 8721994

File tree

10 files changed

+28
-62
lines changed

10 files changed

+28
-62
lines changed

DataFormats/VertexSoA/interface/ZVertexDevice.h

+2-11
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,12 @@
44
#include <cstdint>
55

66
#include <alpaka/alpaka.hpp>
7+
78
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
8-
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
99
#include "DataFormats/VertexSoA/interface/ZVertexHost.h"
1010
#include "DataFormats/Portable/interface/PortableDeviceCollection.h"
1111

1212
template <typename TDev>
13-
class ZVertexDevice : public PortableDeviceMultiCollection<TDev, reco::ZVertexSoA, reco::ZVertexTracksSoA> {
14-
public:
15-
ZVertexDevice() = default; // necessary for ROOT dictionaries
16-
17-
// Constructor which specifies the queue
18-
template <typename TQueue>
19-
explicit ZVertexDevice(TQueue queue)
20-
: PortableDeviceMultiCollection<TDev, reco::ZVertexSoA, reco::ZVertexTracksSoA>(
21-
{{zVertex::MAXVTX, zVertex::MAXTRACKS}}, queue) {}
22-
};
13+
using ZVertexDevice = PortableDeviceMultiCollection<TDev, reco::ZVertexSoA, reco::ZVertexTracksSoA>;
2314

2415
#endif // DataFormats_VertexSoA_interface_ZVertexDevice_h

DataFormats/VertexSoA/interface/ZVertexHost.h

+3-21
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,10 @@
55

66
#include <alpaka/alpaka.hpp>
77

8-
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
9-
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
10-
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
118
#include "DataFormats/Portable/interface/PortableHostCollection.h"
9+
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
10+
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
1211

13-
// This alias is needed to call the SET_PORTABLEHOSTMULTICOLLECTION_READ_RULES macro without commas.
14-
using ZVertexHostBase = PortableHostCollection2<reco::ZVertexSoA, reco::ZVertexTracksSoA>;
15-
16-
class ZVertexHost : public ZVertexHostBase {
17-
public:
18-
ZVertexHost() = default; // necessary for ROOT dictionaries
19-
20-
// Constructor which specifies the queue
21-
template <typename TQueue>
22-
explicit ZVertexHost(TQueue queue)
23-
: PortableHostCollection2<reco::ZVertexSoA, reco::ZVertexTracksSoA>({{zVertex::MAXVTX, zVertex::MAXTRACKS}},
24-
queue) {}
25-
26-
// Constructor which specifies the DevHost
27-
explicit ZVertexHost(alpaka_common::DevHost const& host)
28-
: PortableHostCollection2<reco::ZVertexSoA, reco::ZVertexTracksSoA>({{zVertex::MAXVTX, zVertex::MAXTRACKS}},
29-
host) {}
30-
};
12+
using ZVertexHost = PortableHostCollection2<reco::ZVertexSoA, reco::ZVertexTracksSoA>;
3113

3214
#endif // DataFormats_VertexSoA_ZVertexHost_H

DataFormats/VertexSoA/interface/alpaka/ZVertexSoACollection.h

+4-19
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
#include <cstdint>
55

66
#include <alpaka/alpaka.hpp>
7+
78
#include "DataFormats/Portable/interface/alpaka/PortableCollection.h"
8-
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
9-
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
10-
#include "DataFormats/VertexSoA/interface/ZVertexHost.h"
119
#include "DataFormats/VertexSoA/interface/ZVertexDevice.h"
12-
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
10+
#include "DataFormats/VertexSoA/interface/ZVertexHost.h"
11+
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
1312
#include "HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h"
13+
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
1414

1515
namespace ALPAKA_ACCELERATOR_NAMESPACE {
1616

@@ -19,21 +19,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
1919

2020
} // namespace ALPAKA_ACCELERATOR_NAMESPACE
2121

22-
namespace cms::alpakatools {
23-
template <typename TDevice>
24-
struct CopyToHost<ZVertexDevice<TDevice>> {
25-
template <typename TQueue>
26-
static auto copyAsync(TQueue& queue, ZVertexDevice<TDevice> const& deviceData) {
27-
ZVertexHost hostData(queue);
28-
alpaka::memcpy(queue, hostData.buffer(), deviceData.buffer());
29-
#ifdef GPU_DEBUG
30-
printf("ZVertexSoACollection: I'm copying to host.\n");
31-
#endif
32-
return hostData;
33-
}
34-
};
35-
} // namespace cms::alpakatools
36-
3722
ASSERT_DEVICE_MATCHES_HOST_COLLECTION(ZVertexSoACollection, ZVertexHost);
3823

3924
#endif // DataFormats_VertexSoA_interface_ZVertexSoACollection_h

DataFormats/VertexSoA/src/classes.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#include "DataFormats/Portable/interface/PortableHostCollectionReadRules.h"
22
#include "DataFormats/VertexSoA/interface/ZVertexHost.h"
33

4-
SET_PORTABLEHOSTMULTICOLLECTION_READ_RULES(ZVertexHostBase);
4+
SET_PORTABLEHOSTMULTICOLLECTION_READ_RULES(ZVertexHost);

DataFormats/VertexSoA/src/classes_def.xml

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<class name="portablecollection::CollectionLeaf<1, reco::ZVertexTracksLayout<128, false>>"/>
1414

1515
<!-- Collection declaration for dictionary -->
16-
<class name="ZVertexHostBase"/>
1716
<class name="ZVertexHost"/>
1817
<class name="edm::Wrapper<ZVertexHost>" splitLevel="0"/>
1918
</lcgdict>

DataFormats/VertexSoA/test/alpaka/ZVertexSoA_test.cc

+11-6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include <alpaka/alpaka.hpp>
2020

21+
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
2122
#include "DataFormats/VertexSoA/interface/ZVertexDevice.h"
2223
#include "DataFormats/VertexSoA/interface/ZVertexHost.h"
2324
#include "DataFormats/VertexSoA/interface/alpaka/ZVertexSoACollection.h"
@@ -48,15 +49,19 @@ int main() {
4849
{
4950
// Instantiate vertices on device. PortableCollection allocates
5051
// SoA on device automatically.
51-
ZVertexSoACollection zvertex_d(queue);
52+
ZVertexSoACollection zvertex_d({{zVertex::MAXVTX, zVertex::MAXTRACKS}}, queue);
5253
testZVertexSoAT::runKernels(zvertex_d.view(), zvertex_d.view<reco::ZVertexTracksSoA>(), queue);
5354

54-
// Instantate vertices on host. This is where the data will be
55-
// copied to from device.
56-
ZVertexHost zvertex_h(queue);
57-
std::cout << zvertex_h.view().metadata().size() << std::endl;
58-
alpaka::memcpy(queue, zvertex_h.buffer(), zvertex_d.const_buffer());
55+
// If the device is actually the host, use the collection as-is.
56+
// Otherwise, copy the data from the device to the host.
57+
ZVertexHost zvertex_h;
58+
#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED
59+
zvertex_h = std::move(zvertex_d);
60+
#else
61+
zvertex_h = cms::alpakatools::CopyToHost<ZVertexSoACollection>::copyAsync(queue, zvertex_d);
62+
#endif
5963
alpaka::wait(queue);
64+
std::cout << zvertex_h.view().metadata().size() << std::endl;
6065

6166
// Print results
6267
std::cout << "idv\t"

RecoTracker/PixelVertexFinding/plugins/alpaka/clusterTracksByDensity.h

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <alpaka/alpaka.hpp>
99

10+
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
1011
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
1112
#include "HeterogeneousCore/AlpakaInterface/interface/HistoContainer.h"
1213
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"

RecoTracker/PixelVertexFinding/plugins/alpaka/clusterTracksDBSCAN.h

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <alpaka/alpaka.hpp>
99

10+
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
1011
#include "DataFormats/VertexSoA/interface/ZVertexSoA.h"
1112
#include "HeterogeneousCore/AlpakaInterface/interface/HistoContainer.h"
1213
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"

RecoTracker/PixelVertexFinding/plugins/alpaka/vertexFinder.dev.cc

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <alpaka/alpaka.hpp>
22

33
#include "DataFormats/TrackSoA/interface/alpaka/TrackUtilities.h"
4+
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
45
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
56
#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"
67
#include "RecoTracker/PixelVertexFinding/interface/PixelVertexWorkSpaceLayout.h"
@@ -132,7 +133,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
132133
#ifdef PIXVERTEX_DEBUG_PRODUCE
133134
std::cout << "producing Vertices on GPU" << std::endl;
134135
#endif // PIXVERTEX_DEBUG_PRODUCE
135-
ZVertexSoACollection vertices(queue);
136+
ZVertexSoACollection vertices({{zVertex::MAXVTX, zVertex::MAXTRACKS}}, queue);
136137

137138
auto soa = vertices.view();
138139
auto trksoa = vertices.view<reco::ZVertexTracksSoA>();

RecoTracker/PixelVertexFinding/test/alpaka/VertexFinder_t.dev.cc

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
// TrackUtilities only included in order to compile SoALayout with Eigen columns
1010
#include "DataFormats/TrackSoA/interface/alpaka/TrackUtilities.h"
11+
#include "DataFormats/VertexSoA/interface/ZVertexDefinitions.h"
1112
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
1213
#include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
1314
#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"
@@ -121,8 +122,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
121122
void runKernels(Queue& queue) {
122123
vertexFinder::PixelVertexWorkSpaceSoADevice ws_d(zVertex::MAXTRACKS, queue);
123124
vertexFinder::PixelVertexWorkSpaceSoAHost ws_h(zVertex::MAXTRACKS, queue);
124-
ZVertexHost vertices_h(queue);
125-
ZVertexSoACollection vertices_d(queue);
125+
ZVertexHost vertices_h({{zVertex::MAXVTX, zVertex::MAXTRACKS}}, queue);
126+
ZVertexSoACollection vertices_d({{zVertex::MAXVTX, zVertex::MAXTRACKS}}, queue);
126127

127128
float eps = 0.1f;
128129
std::array<float, 3> par{{eps, 0.01f, 9.0f}};

0 commit comments

Comments
 (0)