File indexing completed on 2023-03-17 11:05:45
0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "FWCore/Framework/interface/Frameworkfwd.h"
0003 #include "FWCore/Framework/interface/MakerMacros.h"
0004 #include "FWCore/Framework/interface/global/EDProducer.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0007
0008 #include "CUDADataFormats/Common/interface/Product.h"
0009 #include "HeterogeneousCore/CUDACore/interface/ScopedContext.h"
0010 #include "HeterogeneousCore/CUDATest/interface/Thing.h"
0011
0012 #include "TestCUDAProducerGPUKernel.h"
0013
0014 class TestCUDAProducerGPUFirst : public edm::global::EDProducer<> {
0015 public:
0016 explicit TestCUDAProducerGPUFirst(edm::ParameterSet const& iConfig);
0017 ~TestCUDAProducerGPUFirst() override = default;
0018
0019 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0020
0021 void produce(edm::StreamID stream, edm::Event& iEvent, edm::EventSetup const& iSetup) const override;
0022
0023 private:
0024 std::string const label_;
0025 edm::EDPutTokenT<cms::cuda::Product<cms::cudatest::Thing>> const dstToken_;
0026 TestCUDAProducerGPUKernel const gpuAlgo_;
0027 };
0028
0029 TestCUDAProducerGPUFirst::TestCUDAProducerGPUFirst(edm::ParameterSet const& iConfig)
0030 : label_(iConfig.getParameter<std::string>("@module_label")),
0031 dstToken_{produces<cms::cuda::Product<cms::cudatest::Thing>>()} {}
0032
0033 void TestCUDAProducerGPUFirst::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0034 edm::ParameterSetDescription desc;
0035 descriptions.addWithDefaultLabel(desc);
0036 descriptions.setComment(
0037 "This EDProducer is part of the TestCUDAProducer* family. It models a GPU algorithm this the first algorithm in "
0038 "the chain of the GPU EDProducers. Produces cms::cuda::Productcms::cudatest::Thing>.");
0039 }
0040
0041 void TestCUDAProducerGPUFirst::produce(edm::StreamID streamID,
0042 edm::Event& iEvent,
0043 edm::EventSetup const& iSetup) const {
0044 edm::LogVerbatim("TestCUDAProducerGPUFirst") << label_ << " TestCUDAProducerGPUFirst::produce begin event "
0045 << iEvent.id().event() << " stream " << iEvent.streamID();
0046
0047 cms::cuda::ScopedContextProduce ctx{streamID};
0048
0049 cms::cuda::device::unique_ptr<float[]> output = gpuAlgo_.runAlgo(label_, ctx.stream());
0050 ctx.emplace(iEvent, dstToken_, std::move(output));
0051
0052 edm::LogVerbatim("TestCUDAProducerGPUFirst") << label_ << " TestCUDAProducerGPUFirst::produce end event "
0053 << iEvent.id().event() << " stream " << iEvent.streamID();
0054 }
0055
0056 DEFINE_FWK_MODULE(TestCUDAProducerGPUFirst);