NVIDIA DeepStream SDK API Reference

7.0 Release
cuda_utils.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: LicenseRef-NvidiaProprietary
4  *
5  * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
6  * property and proprietary rights in and to this material, related
7  * documentation and any modifications thereto. Any use, reproduction,
8  * disclosure or distribution of this material and related documentation
9  * without an express license agreement from NVIDIA CORPORATION or
10  * its affiliates is strictly prohibited.
11  */
12 
13 
14 #ifndef DS3D_COMMON_HELPER_CUDA_UTILS_H
15 #define DS3D_COMMON_HELPER_CUDA_UTILS_H
16 
17 #include "ds3d/common/common.h"
19 
20 #include <cuda.h>
21 #include <cuda_runtime_api.h>
22 
23 namespace ds3d {
24 
25 class CudaStream {
26  cudaStream_t _stream = nullptr;
27  int _gpuId = 0;
29 
30 public:
31  explicit CudaStream(uint flag = cudaStreamDefault, int gpuId = 0, int priority = 0)
32  {
33  cudaSetDevice(_gpuId);
35  cudaStreamCreateWithPriority(&_stream, flag, priority), , "cudaStreamCreate failed");
36  }
38  {
39  if (_stream != nullptr) {
41  cudaSetDevice(_gpuId), , "cudaStreamDestroy failed to set gpu-id:%d", _gpuId);
42  DS3D_CHECK_CUDA_ERROR(cudaStreamDestroy(_stream), , "cudaStreamDestroy failed");
43  }
44  }
46  {
47  if (!_stream) {
48  return ErrCode::kGood;
49  }
51  cudaSetDevice(_gpuId), return ErrCode::kCuda,
52  "cudaStreamSynchronize failed to set gpu-id:%d", _gpuId);
54  cudaStreamSynchronize(_stream), return ErrCode::kCuda, "cudaStreamSynchronize failed");
55  return ErrCode::kGood;
56  }
57  int gpuId() const { return _gpuId; }
58  cudaStream_t& get() { return _stream; }
59 };
60 
61 class GpuCudaMemBuf : public MemData {
62 public:
64  static std::unique_ptr<GpuCudaMemBuf> CreateBuf(size_t size, int gpuId)
65  {
66  auto mem = std::make_unique<GpuCudaMemBuf>();
67 
69  cudaSetDevice(gpuId), return nullptr,
70  "cudaSetDevice: %d failed when allocate cuda memory", gpuId);
71  size = DS3D_ROUND_UP(size, 256);
72  void* data = nullptr;
74  cudaMalloc(&data, size), return nullptr, "cudaMalloc size: %d failed", (int)size);
75  DS_ASSERT(data);
76 
77  mem->data = data;
78  mem->byteSize = size;
79  mem->devId = 0;
80  mem->type = MemType::kGpuCuda;
81  return mem;
82  }
84  {
85  if (data) {
86  cudaSetDevice(devId);
87  cudaFree(data);
88  data = nullptr;
89  byteSize = 0;
90  }
91  }
92 };
93 
94 }; // namespace ds3d
95 #endif
ds3d::CudaStream::CudaStream
CudaStream(uint flag=cudaStreamDefault, int gpuId=0, int priority=0)
Definition: cuda_utils.h:31
ds3d::MemData::data
void * data
Definition: memdata.h:22
DS_ASSERT
#define DS_ASSERT(...)
Definition: defines.h:31
ds3d::MemData
Definition: memdata.h:21
memdata.h
ds3d::ErrCode::kGood
@ kGood
DS3D_ROUND_UP
#define DS3D_ROUND_UP(value, align)
Definition: defines.h:135
ds3d::ErrCode::kCuda
@ kCuda
nvdsinferserver::CudaStream
Wrapper class for CUDA streams.
Definition: infer_cuda_utils.h:39
ds3d::ErrCode
ErrCode
Definition: common.h:43
ds3d::MemData::byteSize
size_t byteSize
Definition: memdata.h:23
cudaStream_t
struct CUstream_st * cudaStream_t
Forward declaration of cudaStream_t.
Definition: nvbufsurftransform.h:34
ds3d::GpuCudaMemBuf
Definition: cuda_utils.h:61
ds3d::MemType::kGpuCuda
@ kGpuCuda
ds3d::MemData::devId
int devId
Definition: memdata.h:24
DS3D_DISABLE_CLASS_COPY
#define DS3D_DISABLE_CLASS_COPY(NoCopyClass)
Definition: defines.h:25
ds3d::GpuCudaMemBuf::~GpuCudaMemBuf
~GpuCudaMemBuf()
Definition: cuda_utils.h:83
DS3D_CHECK_CUDA_ERROR
#define DS3D_CHECK_CUDA_ERROR(err, action, fmt,...)
Definition: defines.h:90
common.h
ds3d::GpuCudaMemBuf::CreateBuf
static std::unique_ptr< GpuCudaMemBuf > CreateBuf(size_t size, int gpuId)
Definition: cuda_utils.h:64
ds3d::CudaStream::gpuId
int gpuId() const
Definition: cuda_utils.h:57
ds3d::CudaStream::~CudaStream
~CudaStream()
Definition: cuda_utils.h:37
ds3d::CudaStream::get
cudaStream_t & get()
Definition: cuda_utils.h:58
ds3d
Definition: lidar_3d_datatype.h:35
ds3d::GpuCudaMemBuf::GpuCudaMemBuf
GpuCudaMemBuf()
Definition: cuda_utils.h:63
ds3d::CudaStream::sync
ErrCode sync()
Definition: cuda_utils.h:45