Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-08 03:36:18

0001 #include "FWCore/Concurrency/interface/Async.h"
0002 #include "FWCore/ServiceRegistry/interface/Service.h"
0003 #include "FWCore/Utilities/interface/EDMException.h"
0004 #include "HeterogeneousCore/AlpakaCore/interface/EventCache.h"
0005 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h"
0006 #include "HeterogeneousCore/AlpakaInterface/interface/HostOnlyTask.h"
0007 
0008 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0009   ESProducer::ESProducer(edm::ParameterSet const& iConfig)
0010       : moduleLabel_(iConfig.getParameter<std::string>("@module_label")),
0011         appendToDataLabel_(iConfig.getParameter<std::string>("appendToDataLabel")),
0012         // The 'synchronize' parameter can be unset in Alpaka modules
0013         // specified with the namespace prefix instead if '@alpaka'
0014         // suffix
0015         synchronize_(
0016             iConfig.getUntrackedParameter<edm::ParameterSet>("alpaka").getUntrackedParameter("synchronize", false)) {}
0017 
0018   void ESProducer::enqueueCallback(Queue& queue, edm::WaitingTaskWithArenaHolder holder) {
0019     edm::Service<edm::Async> async;
0020     auto event = cms::alpakatools::getEventCache<Event>().get(alpaka::getDev(queue));
0021     alpaka::enqueue(queue, *event);
0022     async->runAsync(
0023         std::move(holder),
0024         [event = std::move(event)]() mutable { alpaka::wait(*event); },
0025         []() { return "Enqueued via " EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) "::ESProducer::enqueueCallback()"; });
0026   }
0027 
0028   void ESProducer::throwSomeNullException() {
0029     throw edm::Exception(edm::errors::UnimplementedFeature)
0030         << "The Alpaka backend has multiple devices. The device-specific produce() function returned a null product "
0031            "for some of the devices of the backend, but not all. This is not currently supported.";
0032   }
0033 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE