File indexing completed on 2024-04-06 12:15:44
0001 #ifndef HeterogeneousCore_CUDAUtilities_EventCache_h
0002 #define HeterogeneousCore_CUDAUtilities_EventCache_h
0003
0004 #include <vector>
0005
0006 #include <cuda_runtime.h>
0007
0008 #include "FWCore/Utilities/interface/ReusableObjectHolder.h"
0009 #include "HeterogeneousCore/CUDAUtilities/interface/SharedEventPtr.h"
0010
0011 class CUDAService;
0012
0013 namespace cms {
0014 namespace cuda {
0015 class EventCache {
0016 public:
0017 using BareEvent = SharedEventPtr::element_type;
0018
0019 EventCache();
0020
0021
0022
0023
0024
0025
0026
0027 SharedEventPtr get();
0028
0029 private:
0030 friend class ::CUDAService;
0031
0032
0033 SharedEventPtr makeOrGet(int dev);
0034
0035
0036 void clear();
0037
0038 class Deleter {
0039 public:
0040 Deleter() = default;
0041 Deleter(int d) : device_{d} {}
0042 void operator()(cudaEvent_t event) const;
0043
0044 private:
0045 int device_ = -1;
0046 };
0047
0048 std::vector<edm::ReusableObjectHolder<BareEvent, Deleter>> cache_;
0049 };
0050
0051
0052
0053 EventCache& getEventCache();
0054 }
0055 }
0056
0057 #endif