Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-01-16 23:23:55

0001 #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceObject.h"
0002 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0003 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0005 #include "FWCore/Utilities/interface/EDPutToken.h"
0006 #include "FWCore/Utilities/interface/Exception.h"
0007 #include "FWCore/Utilities/interface/InputTag.h"
0008 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDGetToken.h"
0009 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/SynchronizingEDProducer.h"
0010 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0011 #include "HeterogeneousCore/AlpakaInterface/interface/host.h"
0012 #include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
0013 
0014 #include "verifyDeviceObjectAsync.h"
0015 
0016 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0017   class TestAlpakaVerifyObjectOnDevice : public stream::SynchronizingEDProducer<> {
0018   public:
0019     TestAlpakaVerifyObjectOnDevice(edm::ParameterSet const& config)
0020         : SynchronizingEDProducer<>(config),
0021           getToken_{consumes(config.getParameter<edm::InputTag>("source"))},
0022           putToken_{produces()} {}
0023 
0024     void acquire(device::Event const& iEvent, device::EventSetup const& iSetup) override {
0025       auto const& deviceObject = iEvent.get(getToken_);
0026       succeeded_ = verifyDeviceObjectAsync(iEvent.queue(), deviceObject);
0027     }
0028 
0029     void produce(device::Event& iEvent, device::EventSetup const& iSetup) override {
0030       if (not **succeeded_) {
0031         throw cms::Exception("Assert") << "Device object verification failed";
0032       }
0033       iEvent.emplace(putToken_, true);
0034     }
0035 
0036     static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0037       edm::ParameterSetDescription desc;
0038       desc.add<edm::InputTag>("source");
0039       descriptions.addWithDefaultLabel(desc);
0040     }
0041 
0042   private:
0043     const device::EDGetToken<portabletest::TestDeviceObject> getToken_;
0044     const edm::EDPutTokenT<bool> putToken_;
0045     std::optional<cms::alpakatools::host_buffer<bool>> succeeded_;
0046   };
0047 
0048 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0049 
0050 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0051 DEFINE_FWK_ALPAKA_MODULE(TestAlpakaVerifyObjectOnDevice);