• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • Compute Graph Framework SDK Reference  5.14
    All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
    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 (static_cast<uint32_t>(flags) & (1U << static_cast<uint32_t>(type))) != 0U;
    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
    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;
    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 bindNvSciBufObj(NvSciBufObj bufObj) override
    void fillNvSciBufAttrs(NvSciBufAttrList attrList) const
    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
    人人超碰97caoporen国产