EDMetadataAcquireSentry

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
#ifndef HeterogeneousCore_AlpakaCore_interface_alpaka_EDMetadataAcquireSentry_h
#define HeterogeneousCore_AlpakaCore_interface_alpaka_EDMetadataAcquireSentry_h

#include "FWCore/Concurrency/interface/WaitingTaskWithArenaHolder.h"
#include "FWCore/Utilities/interface/StreamID.h"
#include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDMetadata.h"

namespace ALPAKA_ACCELERATOR_NAMESPACE {
  namespace detail {
    /**
     * Helper class to be used in acquire()
     *
     * TODO: not really a sentry as it doesn't do anything special in its destructor. Better name?
     */
    class EDMetadataAcquireSentry {
    public:
      // TODO: WaitingTaskWithArenaHolder not really needed for host synchronous case
      // Constructor overload to be called from acquire()
      EDMetadataAcquireSentry(edm::StreamID stream, edm::WaitingTaskWithArenaHolder holder, bool synchronize);

      // Constructor overload to be called from registerTransformAsync()
      EDMetadataAcquireSentry(Device const& device, edm::WaitingTaskWithArenaHolder holder, bool synchronize = false);

      EDMetadataAcquireSentry(EDMetadataAcquireSentry const&) = delete;
      EDMetadataAcquireSentry& operator=(EDMetadataAcquireSentry const&) = delete;
      EDMetadataAcquireSentry(EDMetadataAcquireSentry&&) = delete;
      EDMetadataAcquireSentry& operator=(EDMetadataAcquireSentry&&) = delete;

      std::shared_ptr<EDMetadata> metadata() { return metadata_; }

#ifdef ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED
      // all synchronous backends
      std::shared_ptr<EDMetadata> finish() { return std::move(metadata_); }
#else
      // all asynchronous backends
      std::shared_ptr<EDMetadata> finish();
#endif

    private:
      std::shared_ptr<EDMetadata> metadata_;

      edm::WaitingTaskWithArenaHolder waitingTaskHolder_;
      bool const synchronize_;
    };
  }  // namespace detail
}  // namespace ALPAKA_ACCELERATOR_NAMESPACE

#endif