File indexing completed on 2025-01-22 07:33:55
0001 #include <alpaka/alpaka.hpp>
0002
0003 #include "DataFormats/SiPixelDigiSoA/interface/SiPixelDigisDevice.h"
0004 #include "DataFormats/SiPixelDigiSoA/interface/SiPixelDigisHost.h"
0005 #include "DataFormats/SiPixelDigiSoA/interface/alpaka/SiPixelDigisSoACollection.h"
0006 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0007 #include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h"
0008
0009 #include "Digis_test.h"
0010
0011 namespace ALPAKA_ACCELERATOR_NAMESPACE::testDigisSoA {
0012
0013 class TestFillKernel {
0014 public:
0015 ALPAKA_FN_ACC void operator()(Acc1D const& acc, SiPixelDigisSoAView digi_view) const {
0016 for (int32_t j : cms::alpakatools::uniform_elements(acc, digi_view.metadata().size())) {
0017 digi_view[j].clus() = j;
0018 digi_view[j].rawIdArr() = j * 2;
0019 digi_view[j].xx() = j * 3;
0020 digi_view[j].moduleId() = j * 4;
0021 }
0022 }
0023 };
0024
0025 class TestVerifyKernel {
0026 public:
0027 ALPAKA_FN_ACC void operator()(Acc1D const& acc, SiPixelDigisSoAConstView digi_view) const {
0028 for (uint32_t j : cms::alpakatools::uniform_elements(acc, digi_view.metadata().size())) {
0029 ALPAKA_ASSERT_ACC(digi_view[j].clus() == int(j));
0030 ALPAKA_ASSERT_ACC(digi_view[j].rawIdArr() == j * 2);
0031 ALPAKA_ASSERT_ACC(digi_view[j].xx() == j * 3);
0032 ALPAKA_ASSERT_ACC(digi_view[j].moduleId() == j * 4);
0033 }
0034 }
0035 };
0036
0037 void runKernels(SiPixelDigisSoAView digi_view, Queue& queue) {
0038 uint32_t items = 64;
0039 uint32_t groups = cms::alpakatools::divide_up_by(digi_view.metadata().size(), items);
0040 auto workDiv = cms::alpakatools::make_workdiv<Acc1D>(groups, items);
0041 alpaka::exec<Acc1D>(queue, workDiv, TestFillKernel{}, digi_view);
0042 alpaka::exec<Acc1D>(queue, workDiv, TestVerifyKernel{}, digi_view);
0043 }
0044
0045 }