File indexing completed on 2024-04-06 12:15:42
0001 #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceCollection.h"
0002 #include "DataFormats/TestObjects/interface/ToyProducts.h"
0003 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0006 #include "FWCore/Utilities/interface/InputTag.h"
0007 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/EDProducer.h"
0008 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
0009 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0010 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0011 #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h"
0012 #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h"
0013
0014 #include "TestAlgo.h"
0015
0016 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0017
0018
0019
0020
0021
0022
0023
0024 class TestAlpakaStreamProducer : public stream::EDProducer<> {
0025 public:
0026 TestAlpakaStreamProducer(edm::ParameterSet const& config)
0027 : size_{config.getParameter<edm::ParameterSet>("size").getParameter<int32_t>(
0028 EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE))},
0029 size2_{config.getParameter<edm::ParameterSet>("size").getParameter<int32_t>(
0030 EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE))},
0031 size3_{config.getParameter<edm::ParameterSet>("size").getParameter<int32_t>(
0032 EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE))} {
0033 getToken_ = consumes(config.getParameter<edm::InputTag>("source"));
0034 esToken_ = esConsumes(config.getParameter<edm::ESInputTag>("eventSetupSource"));
0035 devicePutToken_ = produces(config.getParameter<std::string>("productInstanceName"));
0036 devicePutTokenMulti2_ = produces(config.getParameter<std::string>("productInstanceName"));
0037 devicePutTokenMulti3_ = produces(config.getParameter<std::string>("productInstanceName"));
0038 }
0039
0040 void produce(device::Event& iEvent, device::EventSetup const& iSetup) override {
0041 [[maybe_unused]] auto inpData = iEvent.getHandle(getToken_);
0042 [[maybe_unused]] auto const& esData = iSetup.getData(esToken_);
0043
0044 auto deviceProduct = std::make_unique<portabletest::TestDeviceCollection>(size_, iEvent.queue());
0045 auto deviceProductMulti2 = std::make_unique<portabletest::TestDeviceMultiCollection2>(
0046 portabletest::TestDeviceMultiCollection2::SizesArray{{size_, size2_}}, iEvent.queue());
0047 auto deviceProductMulti3 = std::make_unique<portabletest::TestDeviceMultiCollection3>(
0048 portabletest::TestDeviceMultiCollection3::SizesArray{{size_, size2_, size3_}}, iEvent.queue());
0049
0050
0051 algo_.fill(iEvent.queue(), *deviceProduct);
0052 algo_.fillMulti2(iEvent.queue(), *deviceProductMulti2);
0053 algo_.fillMulti3(iEvent.queue(), *deviceProductMulti3);
0054
0055 iEvent.put(devicePutToken_, std::move(deviceProduct));
0056 iEvent.put(devicePutTokenMulti2_, std::move(deviceProductMulti2));
0057 iEvent.put(devicePutTokenMulti3_, std::move(deviceProductMulti3));
0058 }
0059
0060 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0061 edm::ParameterSetDescription desc;
0062 desc.add<edm::InputTag>("source");
0063 desc.add("eventSetupSource", edm::ESInputTag{});
0064 desc.add<std::string>("productInstanceName", "");
0065
0066 edm::ParameterSetDescription psetSize;
0067 psetSize.add<int32_t>("alpaka_serial_sync");
0068 psetSize.add<int32_t>("alpaka_cuda_async");
0069 psetSize.add<int32_t>("alpaka_rocm_async");
0070 desc.add("size", psetSize);
0071
0072 descriptions.addWithDefaultLabel(desc);
0073 }
0074
0075 private:
0076 edm::EDGetTokenT<edmtest::IntProduct> getToken_;
0077 device::ESGetToken<cms::alpakatest::AlpakaESTestDataB<Device>, AlpakaESTestRecordB> esToken_;
0078 device::EDPutToken<portabletest::TestDeviceCollection> devicePutToken_;
0079 device::EDPutToken<portabletest::TestDeviceMultiCollection2> devicePutTokenMulti2_;
0080 device::EDPutToken<portabletest::TestDeviceMultiCollection3> devicePutTokenMulti3_;
0081 const int32_t size_;
0082 const int32_t size2_;
0083 const int32_t size3_;
0084
0085
0086 TestAlgo algo_;
0087 };
0088
0089 }
0090
0091 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0092 DEFINE_FWK_ALPAKA_MODULE(TestAlpakaStreamProducer);