From 22a63e1eb5a985e24627c7253e2949691f24fd41 Mon Sep 17 00:00:00 2001 From: Andrea Bocci Date: Wed, 20 Jul 2022 20:20:04 +0200 Subject: [PATCH] Add a scalar to TestSoA --- .../PortableTestObjects/interface/TestSoA.h | 4 +++- .../PortableTestObjects/src/classes_def.xml | 2 +- DataFormats/SoATemplate/interface/SoALayout.h | 1 + .../AlpakaTest/plugins/TestAlpakaAnalyzer.cc | 23 +++++++++++++++---- .../AlpakaTest/plugins/alpaka/TestAlgo.dev.cc | 3 +++ 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/DataFormats/PortableTestObjects/interface/TestSoA.h b/DataFormats/PortableTestObjects/interface/TestSoA.h index 3d2152d866ba1..83f21402ce781 100644 --- a/DataFormats/PortableTestObjects/interface/TestSoA.h +++ b/DataFormats/PortableTestObjects/interface/TestSoA.h @@ -13,7 +13,9 @@ namespace portabletest { SOA_COLUMN(double, x), SOA_COLUMN(double, y), SOA_COLUMN(double, z), - SOA_COLUMN(int32_t, id)) + SOA_COLUMN(int32_t, id), + // scalars: one value for the whole structure + SOA_SCALAR(double, r)) using TestSoA = TestSoALayout<>; diff --git a/DataFormats/PortableTestObjects/src/classes_def.xml b/DataFormats/PortableTestObjects/src/classes_def.xml index 21b727eee18c6..00a49dc35744f 100644 --- a/DataFormats/PortableTestObjects/src/classes_def.xml +++ b/DataFormats/PortableTestObjects/src/classes_def.xml @@ -6,7 +6,7 @@ - + diff --git a/DataFormats/SoATemplate/interface/SoALayout.h b/DataFormats/SoATemplate/interface/SoALayout.h index a4c429ad6e977..41143a84a8717 100644 --- a/DataFormats/SoATemplate/interface/SoALayout.h +++ b/DataFormats/SoATemplate/interface/SoALayout.h @@ -525,6 +525,7 @@ /* data members */ \ std::byte* mem_; \ size_type nElements_; \ + size_type const scalar_ = 1; \ byte_size_type byteSize_; \ _ITERATE_ON_ALL(_DECLARE_SOA_DATA_MEMBER, ~, __VA_ARGS__) \ /* Making the code conditional is problematic in macros as the commas will interfere with parameter lisings */ \ diff --git a/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc b/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc index 8b1779e9e4e6e..ae2f3448ed06d 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc +++ b/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc @@ -28,11 +28,24 @@ class TestAlpakaAnalyzer : public edm::stream::EDAnalyzer<> { edm::LogInfo msg("TestAlpakaAnalyzer"); msg << source_.encode() << ".size() = " << view.metadata().size() << '\n'; - msg << "data = " << product.buffer().data() << " x = " << view.x() << " y = " << view.y() << " z = " << view.z() - << " id = " << view.id() << '\n'; - msg << std::hex << "[y - x] = 0x" << reinterpret_cast(view.y()) - reinterpret_cast(view.x()) - << " [z - y] = 0x" << reinterpret_cast(view.z()) - reinterpret_cast(view.y()) - << " [id - z] = 0x" << reinterpret_cast(view.id()) - reinterpret_cast(view.z()); + msg << " data = " << product.buffer().data() << ",\n" + << " x = " << view.metadata().addressOf_x() << ",\n" + << " y = " << view.metadata().addressOf_y() << ",\n" + << " z = " << view.metadata().addressOf_z() << ",\n" + << " id = " << view.metadata().addressOf_id() << ",\n" + << " r = " << view.metadata().addressOf_r() << '\n'; + msg << std::hex << " [y - x] = 0x" + << reinterpret_cast(view.metadata().addressOf_y()) - + reinterpret_cast(view.metadata().addressOf_x()) + << " [z - y] = 0x" + << reinterpret_cast(view.metadata().addressOf_z()) - + reinterpret_cast(view.metadata().addressOf_y()) + << " [id - z] = 0x" + << reinterpret_cast(view.metadata().addressOf_id()) - + reinterpret_cast(view.metadata().addressOf_z()) + << " [r - id] = 0x" + << reinterpret_cast(view.metadata().addressOf_r()) - + reinterpret_cast(view.metadata().addressOf_id()); } static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc index 797125d5f330f..613065886899b 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc @@ -19,6 +19,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // this example accepts an arbitrary number of blocks and threads, and always uses 1 element per thread const int32_t thread = alpaka::getIdx(acc)[0u]; const int32_t stride = alpaka::getWorkDiv(acc)[0u]; + if (thread == 0) { + view.r() = 1.; + } for (auto i = thread; i < size; i += stride) { view[i] = {0., 0., 0., i}; }