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