19 #ifndef __NVDSINFERSERVER_BATCH_BUFFER_H__
20 #define __NVDSINFERSERVER_BATCH_BUFFER_H__
24 #include <unordered_map>
45 assert(m_Desc.elementSize >= 0);
46 uint32_t b = getBatchSize();
47 return m_Desc.elementSize * m_Desc.dims.numElements * (b ? b : 1);
69 m_Attaches.emplace_back(std::move(buf));
70 assert(!hasAttachLoop());
72 void detach() { m_Attaches.clear(); }
81 std::set<BaseBatchBuffer*> allAttached;
82 for (
auto const& buf : m_Attaches) {
84 if (allAttached.count(buf.get())) {
87 allAttached.emplace(buf.get());
93 uint64_t
bufId()
const {
return m_BufId; }
102 assert(getBufPtr(0) && getBufPtr(batchIdx));
103 if (getBufPtr(0) ==
nullptr || getBufPtr(batchIdx) ==
nullptr) {
106 return (uint8_t*)getBufPtr(batchIdx) - (uint8_t*)getBufPtr(0);
113 uint32_t m_BatchSize = 0;
115 std::vector<SharedBatchBuf> m_Attaches;
116 uint64_t m_BufId = UINT64_C(0);
128 uint32_t
getSize() const final {
return m_Bufs.size(); }
131 assert(arrayIdx < (uint32_t)m_Bufs.size());
132 assert(m_Bufs.at(arrayIdx).get());
133 return m_Bufs.at(arrayIdx).get();
137 assert(arrayIdx < (uint32_t)m_Bufs.size());
138 assert(m_Bufs.at(arrayIdx).get());
139 return buf(arrayIdx);
144 std::dynamic_pointer_cast<BaseBatchBuffer>(
buf);
152 const std::vector<SharedBatchBuf>&
bufs()
const {
return m_Bufs; }
157 assert(idx < (uint32_t)m_Bufs.size());
158 return m_Bufs.at(idx);
162 assert(idx < (uint32_t)m_Bufs.size());
163 return m_Bufs.at(idx);
169 auto iter = std::find_if(m_Bufs.cbegin(), m_Bufs.cend(),
172 const InferBufferDescription& desc = buf->getBufDesc();
173 if (desc.memType == InferMemType::kGpuCuda) {
181 assert((iter != m_Bufs.cend() && gpuId >= 0) ||
182 (iter == m_Bufs.cend() && gpuId == -1));
187 uint64_t
bufId()
const {
return m_BufId; }
193 std::vector<SharedBatchBuf> m_Bufs;
195 uint64_t m_BufId = UINT64_C(0);
208 void* bufBase,
size_t offset,
size_t bufBytes,
211 m_BufBytes(bufBytes), m_BufOffset(offset)
217 assert(batchIdx == 0 || batchIdx < getBatchSize());
219 assert(batchIdx <= 0 || desc.
dataType != InferDataType::kString);
220 batchIdx = std::max(batchIdx, 0U);
221 return (
void*)((uint8_t*)m_BufBase +
233 assert(batchIdx == 0 || batchIdx < getBatchSize());
235 assert(batchIdx <= 0 || desc.
dataType != InferDataType::kString);
236 batchIdx = std::max(batchIdx, 0U);
241 mutable void* m_BufBase =
nullptr;
242 size_t m_BufBytes = 0;
246 size_t m_BufOffset = 0;
251 template <
typename BufPtr>
258 return m_Impl->getBufDesc();
261 return m_Impl->getBufPtr(batchIdx);