Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-30 23:27:57

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         : EDProducer<>(config),
0023           objectToken_{produces()},
0024           collectionToken_{produces()},
0025           deviceTokenMulti2_{produces()},
0026           deviceTokenMulti3_{produces()},
0027           size_{config.getParameter<int32_t>("size")},
0028           size2_{config.getParameter<int32_t>("size2")},
0029           size3_{config.getParameter<int32_t>("size3")} {}
0030 
0031     void produce(edm::StreamID sid, device::Event& event, device::EventSetup const&) const override {
0032       // run the algorithm, potentially asynchronously
0033       portabletest::TestDeviceCollection deviceCollection{size_, event.queue()};
0034       deviceCollection.zeroInitialise(event.queue());
0035       algo_.checkZero(event.queue(), deviceCollection);
0036       algo_.fill(event.queue(), deviceCollection);
0037 
0038       portabletest::TestDeviceObject deviceObject{event.queue()};
0039       deviceObject.zeroInitialise(event.queue());
0040       algo_.checkZero(event.queue(), deviceObject);
0041       algo_.fillObject(event.queue(), deviceObject, 5., 12., 13., 42);
0042 
0043       portabletest::TestDeviceMultiCollection2 deviceMultiProduct2{{{size_, size2_}}, event.queue()};
0044       deviceMultiProduct2.zeroInitialise(event.queue());
0045       algo_.checkZero(event.queue(), deviceMultiProduct2);
0046       algo_.fillMulti2(event.queue(), deviceMultiProduct2);
0047 
0048       portabletest::TestDeviceMultiCollection3 deviceMultiProduct3{{{size_, size2_, size3_}}, event.queue()};
0049       deviceMultiProduct3.zeroInitialise(event.queue());
0050       algo_.checkZero(event.queue(), deviceMultiProduct3);
0051       algo_.fillMulti3(event.queue(), deviceMultiProduct3);
0052 
0053       // put the asynchronous products into the event without waiting
0054       event.emplace(collectionToken_, std::move(deviceCollection));
0055       event.emplace(objectToken_, std::move(deviceObject));
0056       event.emplace(deviceTokenMulti2_, std::move(deviceMultiProduct2));
0057       event.emplace(deviceTokenMulti3_, std::move(deviceMultiProduct3));
0058     }
0059 
0060     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0061       edm::ParameterSetDescription desc;
0062       desc.add<int32_t>("size");
0063       desc.add<int32_t>("size2");
0064       desc.add<int32_t>("size3");
0065       descriptions.addWithDefaultLabel(desc);
0066     }
0067 
0068   private:
0069     const device::EDPutToken<portabletest::TestDeviceObject> objectToken_;
0070     const device::EDPutToken<portabletest::TestDeviceCollection> collectionToken_;
0071     const device::EDPutToken<portabletest::TestDeviceMultiCollection2> deviceTokenMulti2_;
0072     const device::EDPutToken<portabletest::TestDeviceMultiCollection3> deviceTokenMulti3_;
0073     const int32_t size_;
0074     const int32_t size2_;
0075     const int32_t size3_;
0076 
0077     // implementation of the algorithm
0078     TestAlgo algo_;
0079   };
0080 
0081 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0082 
0083 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0084 DEFINE_FWK_ALPAKA_MODULE(TestAlpakaProducer);