Compute Graph Framework SDK Reference  5.16
Buffer.hpp
Go to the documentation of this file.
1
2// This code contains NVIDIA Confidential Information and is disclosed
3// under the Mutual Non-Disclosure Agreement.
4//
5// Notice
6// ALL NVIDIA DESIGN SPECIFICATIONS AND CODE ("MATERIALS") ARE PROVIDED "AS IS" NVIDIA MAKES
7// NO REPRESENTATIONS, WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
8// THE MATERIALS, AND EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTIES OF NONINFRINGEMENT,
9// MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
10//
11// NVIDIA Corporation assumes no responsibility for the consequences of use of such
12// information or for any infringement of patents or other rights of third parties that may
13// result from its use. No license is granted by implication or otherwise under any patent
14// or patent rights of NVIDIA Corporation. No third party distribution is allowed unless
15// expressly authorized by NVIDIA. Details are subject to change without notice.
16// This code supersedes and replaces all information previously supplied.
17// NVIDIA Corporation products are not authorized for use as critical
18// components in life support devices or systems without express written approval of
19// NVIDIA Corporation.
20//
21// Copyright (c) 2021-2023 NVIDIA Corporation. All rights reserved.
22//
23// NVIDIA Corporation and its licensors retain all intellectual property and proprietary
24// rights in and to this software and related documentation and any modifications thereto.
25// Any use, reproduction, disclosure or distribution of this software and related
26// documentation without an express license agreement from NVIDIA Corporation is
27// strictly prohibited.
28//
30
31#ifndef DW_FRAMEWORK_BUFFER_HPP_
32#define DW_FRAMEWORK_BUFFER_HPP_
33
34#include <cstddef>
35#include <nvscibuf.h>
36#include <dwshared/dwfoundation/dw/core/language/Optional.hpp>
37#include <dwshared/dwfoundation/dw/cuda/misc/DevicePtr.hpp>
38
39namespace dw
40{
41namespace framework
42{
43
44enum class BufferBackendType : uint32_t
45{
46 CPU = 0,
47 CUDA = 1,
48 // Add others as appropriate
49};
50
51using BufferFlags = uint32_t;
52
54{
55 // coverity[autosar_cpp14_a5_1_1_violation] RFD Accepted: TID-2056
56 // coverity[cert_int34_c_violation]
57 return 0U != (static_cast<uint32_t>(flags) & (1U << static_cast<uint32_t>(type)));
58}
59
61{
62 // coverity[autosar_cpp14_a5_1_1_violation] RFD Accepted: TID-2056
63 // coverity[cert_int34_c_violation]
64 flags |= (1U << static_cast<uint32_t>(type));
65}
66
68{
70 size_t byteSize;
71};
72
73// coverity[autosar_cpp14_m3_4_1_violation]
75{
76public:
77 // coverity[autosar_cpp14_a0_1_1_violation]
78 // coverity[autosar_cpp14_a2_10_5_violation] RFD Pending: TID-2053
79 static constexpr char LOG_TAG[]{"Buffer"};
80
81 explicit BufferBase(BufferProperties properties);
82
83 virtual ~BufferBase() = default;
84
85 // coverity[autosar_cpp14_a2_10_5_violation] RFD Pending: TID-2053
87
88 virtual void bindNvSciBufObj(NvSciBufObj bufObj);
89
90 virtual void fillNvSciBufAttrs(NvSciBufAttrList attrList) const;
91
92 NvSciBufObj getNvSci();
93
94protected:
96 NvSciBufObj m_bufObj{};
97};
98
99// coverity[autosar_cpp14_a12_1_6_violation]
100class BufferCPU final : public BufferBase
101{
102public:
103 explicit BufferCPU(BufferProperties properties);
104
105 void fillSpecificAttributes(NvSciBufAttrList attrList) const;
106
107 void bindNvSciBufObj(NvSciBufObj bufObj) override;
108
109 void* getCpuPtr(size_t offset);
110
111private:
112 void* m_ptr;
113};
114
115// BufferCUDA class encapsulates API mapping operations on single nvscibuf for cuda.
116// @note - If a buffer needs to be mapped for multiple cuda devices, multiple instances of this class
117// should be used and the appropriate device must be set as current before calling into each instance.
118class BufferCUDA final : public BufferBase
119{
120public:
122
123 ~BufferCUDA() final;
124
125 void fillSpecificAttributes(NvSciBufAttrList attrList) const;
126
127 void bindNvSciBufObj(NvSciBufObj bufObj) override;
128
129 core::DevicePtr<void> getCudaPtr(size_t offset);
130
131private:
132 cudaExternalMemory_t m_cudaHandle{};
133 void* m_ptr{};
134};
135
136// Buffer class encapsulates API mapping operations on single nvscibuf.
137// @note - If a buffer needs to be mapped for multiple cuda devices, multiple instances of this class
138// should be used and the appropriate device must be set as current before calling into each instance.
139// coverity[autosar_cpp14_a0_1_6_violation]
140// coverity[autosar_cpp14_a12_1_6_violation]
141class Buffer final : public BufferBase
142{
143
144public:
145 explicit Buffer(BufferProperties properties);
146
147 void bindNvSciBufObj(NvSciBufObj bufObj) override;
148
149 void fillNvSciBufAttrs(NvSciBufAttrList attrList) const override;
150
151 void* getCpuPtr(size_t offset);
152
153 core::DevicePtr<void> getCudaPtr(size_t offset);
154
155private:
156 dw::core::Optional<BufferCPU> m_bufferCpu{};
157 dw::core::Optional<BufferCUDA> m_bufferCuda{};
158};
159
160} // namespace framework
161} // namespace dw
162
163#endif // DW_FRAMEWORK_BUFFER_HPP_
const BufferProperties & getProperties() const
virtual ~BufferBase()=default
NvSciBufObj m_bufObj
Definition: Buffer.hpp:96
BufferBase(BufferProperties properties)
virtual void bindNvSciBufObj(NvSciBufObj bufObj)
virtual void fillNvSciBufAttrs(NvSciBufAttrList attrList) const
static constexpr char LOG_TAG[]
Definition: Buffer.hpp:79
BufferProperties m_properties
Definition: Buffer.hpp:95
BufferCPU(BufferProperties properties)
void * getCpuPtr(size_t offset)
void bindNvSciBufObj(NvSciBufObj bufObj) override
void fillSpecificAttributes(NvSciBufAttrList attrList) const
void fillSpecificAttributes(NvSciBufAttrList attrList) const
core::DevicePtr< void > getCudaPtr(size_t offset)
void bindNvSciBufObj(NvSciBufObj bufObj) override
void * getCpuPtr(size_t offset)
void fillNvSciBufAttrs(NvSciBufAttrList attrList) const override
void bindNvSciBufObj(NvSciBufObj bufObj) override
Buffer(BufferProperties properties)
core::DevicePtr< void > getCudaPtr(size_t offset)
void BufferFlagsEnableBackend(BufferFlags &flags, BufferBackendType type)
Definition: Buffer.hpp:60
bool BufferFlagsBackendEnabled(BufferFlags flags, BufferBackendType type)
Definition: Buffer.hpp:53
uint32_t BufferFlags
Definition: Buffer.hpp:51
Definition: Buffer.hpp:40