Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:15:42

0001 #include "FWCore/Framework/interface/ESTransientHandle.h"
0002 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0003 #include "FWCore/Utilities/interface/ESGetToken.h"
0004 #include "FWCore/Utilities/interface/ESInputTag.h"
0005 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0006 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h"
0007 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h"
0008 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0009 #include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
0010 #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h"
0011 #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h"
0012 #include "HeterogeneousCore/AlpakaTest/interface/ESTestData.h"
0013 #include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h"
0014 
0015 #include "testESAlgoAsync.h"
0016 
0017 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0018   /**
0019    * This class demonstrates an ESProducer that
0020    * - consumes device ESProducts (that were produced on different Records)
0021    * - calls a kernel on the queue
0022    */
0023   class TestAlpakaESProducerD : public ESProducer {
0024   public:
0025     TestAlpakaESProducerD(edm::ParameterSet const& iConfig) : ESProducer(iConfig) {
0026       auto cc = setWhatProduced(this);
0027       tokenA_ = cc.consumes(iConfig.getParameter<edm::ESInputTag>("srcA"));
0028       tokenB_ = cc.consumes(iConfig.getParameter<edm::ESInputTag>("srcB"));
0029     }
0030 
0031     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0032       edm::ParameterSetDescription desc;
0033       desc.add("srcA", edm::ESInputTag{});
0034       desc.add("srcB", edm::ESInputTag{});
0035       descriptions.addWithDefaultLabel(desc);
0036     }
0037 
0038     std::optional<AlpakaESTestDataDDevice> produce(device::Record<AlpakaESTestRecordD> const& iRecord) {
0039       auto const& dataA = iRecord.get(tokenA_);
0040       auto const& dataB = iRecord.get(tokenB_);
0041 
0042       return testESAlgoAsync(iRecord.queue(), dataA, dataB);
0043     }
0044 
0045   private:
0046     device::ESGetToken<AlpakaESTestDataADevice, AlpakaESTestRecordA> tokenA_;
0047     device::ESGetToken<cms::alpakatest::AlpakaESTestDataB<Device>, AlpakaESTestRecordB> tokenB_;
0048   };
0049 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0050 
0051 DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(TestAlpakaESProducerD);