Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-06 02:45:27

0001 #ifndef HeterogeneousCore_AlpakaTest_plugins_alpaka_TestHelperClass_h
0002 #define HeterogeneousCore_AlpakaTest_plugins_alpaka_TestHelperClass_h
0003 
0004 #include <optional>
0005 
0006 #include "DataFormats/PortableTestObjects/interface/TestHostCollection.h"
0007 #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceCollection.h"
0008 #include "FWCore/Framework/interface/ConsumesCollector.h"
0009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0010 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
0011 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0012 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
0013 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h"
0014 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0015 #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h"
0016 #include "HeterogeneousCore/AlpakaTest/interface/ESTestData.h"
0017 #include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h"
0018 
0019 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0020   class TestHelperClass {
0021   public:
0022     TestHelperClass(edm::ParameterSet const& iConfig, edm::ConsumesCollector iC);
0023 
0024     static void fillPSetDescription(edm::ParameterSetDescription& iDesc);
0025 
0026     void makeAsync(device::Event const& iEvent, device::EventSetup const& iSetup);
0027 
0028     portabletest::TestHostCollection moveFrom() {
0029       auto product = std::move(*hostProduct_);
0030       hostProduct_.reset();
0031       return product;
0032     }
0033 
0034     portabletest::TestHostMultiCollection2 moveFromMulti2() {
0035       auto product = std::move(*hostProductMulti2_);
0036       hostProductMulti2_.reset();
0037       return product;
0038     }
0039 
0040     portabletest::TestHostMultiCollection3 moveFromMulti3() {
0041       auto product = std::move(*hostProductMulti3_);
0042       hostProductMulti3_.reset();
0043       return product;
0044     }
0045 
0046   private:
0047     const device::EDGetToken<portabletest::TestDeviceCollection> getToken_;
0048     const device::EDGetToken<portabletest::TestDeviceMultiCollection2> getTokenMulti2_;
0049     const device::EDGetToken<portabletest::TestDeviceMultiCollection3> getTokenMulti3_;
0050     const edm::ESGetToken<cms::alpakatest::ESTestDataA, AlpakaESTestRecordA> esTokenHost_;
0051     const device::ESGetToken<AlpakaESTestDataCDevice, AlpakaESTestRecordC> esTokenDevice_;
0052 
0053     // hold the output product between acquire() and produce()
0054     std::optional<portabletest::TestHostCollection> hostProduct_;
0055     std::optional<portabletest::TestHostMultiCollection2> hostProductMulti2_;
0056     std::optional<portabletest::TestHostMultiCollection3> hostProductMulti3_;
0057   };
0058 }  // namespace ALPAKA_ACCELERATOR_NAMESPACE
0059 
0060 #endif