File indexing completed on 2023-03-17 11:05:46
0001 #ifndef HeterogeneousCore_CUDAUtilities_memsetAsync_h
0002 #define HeterogeneousCore_CUDAUtilities_memsetAsync_h
0003
0004 #include "HeterogeneousCore/CUDAUtilities/interface/cudaCheck.h"
0005 #include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"
0006
0007 #include <type_traits>
0008
0009 namespace cms {
0010 namespace cuda {
0011 template <typename T>
0012 inline void memsetAsync(device::unique_ptr<T>& ptr, T value, cudaStream_t stream) {
0013
0014
0015 static_assert(std::is_array<T>::value == false,
0016 "For array types, use the other overload with the size parameter");
0017 cudaCheck(cudaMemsetAsync(ptr.get(), value, sizeof(T), stream));
0018 }
0019
0020
0021
0022
0023
0024
0025
0026 template <typename T>
0027 inline void memsetAsync(device::unique_ptr<T[]>& ptr, int value, size_t nelements, cudaStream_t stream) {
0028 cudaCheck(cudaMemsetAsync(ptr.get(), value, nelements * sizeof(T), stream));
0029 }
0030 }
0031 }
0032
0033 #endif