File indexing completed on 2024-04-06 12:15:42
0001 #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceCollection.h"
0002 #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceObject.h"
0003 #include "FWCore/Framework/interface/Frameworkfwd.h"
0004 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0007 #include "FWCore/Utilities/interface/EDGetToken.h"
0008 #include "FWCore/Utilities/interface/InputTag.h"
0009 #include "FWCore/Utilities/interface/StreamID.h"
0010 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
0011 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h"
0012 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/global/EDProducer.h"
0013 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0014
0015 #include "TestAlgo.h"
0016
0017 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0018
0019 class TestAlpakaProducer : public global::EDProducer<> {
0020 public:
0021 TestAlpakaProducer(edm::ParameterSet const& config)
0022 : objectToken_{produces()},
0023 collectionToken_{produces()},
0024 deviceTokenMulti2_{produces()},
0025 deviceTokenMulti3_{produces()},
0026 size_{config.getParameter<int32_t>("size")},
0027 size2_{config.getParameter<int32_t>("size2")},
0028 size3_{config.getParameter<int32_t>("size3")} {}
0029
0030 void produce(edm::StreamID sid, device::Event& event, device::EventSetup const&) const override {
0031
0032 portabletest::TestDeviceCollection deviceCollection{size_, event.queue()};
0033 algo_.fill(event.queue(), deviceCollection);
0034
0035 portabletest::TestDeviceObject deviceObject{event.queue()};
0036 algo_.fillObject(event.queue(), deviceObject, 5., 12., 13., 42);
0037
0038 portabletest::TestDeviceCollection deviceProduct{size_, event.queue()};
0039 algo_.fill(event.queue(), deviceProduct);
0040
0041 portabletest::TestDeviceMultiCollection2 deviceMultiProduct2{{{size_, size2_}}, event.queue()};
0042 algo_.fillMulti2(event.queue(), deviceMultiProduct2);
0043
0044 portabletest::TestDeviceMultiCollection3 deviceMultiProduct3{{{size_, size2_, size3_}}, event.queue()};
0045 algo_.fillMulti3(event.queue(), deviceMultiProduct3);
0046
0047
0048 event.emplace(collectionToken_, std::move(deviceCollection));
0049 event.emplace(objectToken_, std::move(deviceObject));
0050 event.emplace(deviceTokenMulti2_, std::move(deviceMultiProduct2));
0051 event.emplace(deviceTokenMulti3_, std::move(deviceMultiProduct3));
0052 }
0053
0054 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0055 edm::ParameterSetDescription desc;
0056 desc.add<int32_t>("size");
0057 desc.add<int32_t>("size2");
0058 desc.add<int32_t>("size3");
0059 descriptions.addWithDefaultLabel(desc);
0060 }
0061
0062 private:
0063 const device::EDPutToken<portabletest::TestDeviceObject> objectToken_;
0064 const device::EDPutToken<portabletest::TestDeviceCollection> collectionToken_;
0065 const device::EDPutToken<portabletest::TestDeviceMultiCollection2> deviceTokenMulti2_;
0066 const device::EDPutToken<portabletest::TestDeviceMultiCollection3> deviceTokenMulti3_;
0067 const int32_t size_;
0068 const int32_t size2_;
0069 const int32_t size3_;
0070
0071
0072 TestAlgo algo_;
0073 };
0074
0075 }
0076
0077 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0078 DEFINE_FWK_ALPAKA_MODULE(TestAlpakaProducer);