MCPcopy Create free account
hub / github.com/NVIDIA/nvcomp / BatchData

Class BatchData

examples/BatchData.h:41–175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

39#include "BatchDataCPU.h"
40
41class BatchData
42{
43public:
44 BatchData(
45 const std::vector<std::vector<char>>& host_data,
46 const size_t chunk_size) :
47 m_ptrs(),
48 m_sizes(),
49 m_data(),
50 m_size(0)
51 {
52 m_size = compute_batch_size(host_data, chunk_size);
53
54 m_data = nvcomp::thrust::device_vector<uint8_t>(chunk_size * size());
55
56 std::vector<void*> uncompressed_ptrs(size());
57 for (size_t i = 0; i < size(); ++i) {
58 uncompressed_ptrs[i] = static_cast<void*>(data() + chunk_size * i);
59 }
60
61 m_ptrs = nvcomp::thrust::device_vector<void*>(uncompressed_ptrs);
62 std::vector<size_t> sizes
63 = compute_chunk_sizes(host_data, size(), chunk_size);
64 m_sizes = nvcomp::thrust::device_vector<size_t>(sizes);
65
66 // copy data to GPU
67 size_t offset = 0;
68 for (size_t i = 0; i < host_data.size(); ++i) {
69 CUDA_CHECK(cudaMemcpy(
70 uncompressed_ptrs[offset],
71 host_data[i].data(),
72 host_data[i].size(),
73 cudaMemcpyHostToDevice));
74
75 const size_t num_chunks
76 = (host_data[i].size() + chunk_size - 1) / chunk_size;
77 offset += num_chunks;
78 }
79 }
80
81 BatchData(const BatchDataCPU& batch_data, bool copy_data = false) :
82 m_ptrs(),
83 m_sizes(),
84 m_data(),
85 m_size()
86 {
87 m_size = batch_data.size();
88 m_sizes = nvcomp::thrust::device_vector<size_t>(
89 batch_data.sizes(), batch_data.sizes() + size());
90
91 size_t data_size = std::accumulate(
92 batch_data.sizes(),
93 batch_data.sizes() + size(),
94 static_cast<size_t>(0));
95 m_data = nvcomp::thrust::device_vector<uint8_t>(data_size);
96
97 size_t offset = 0;
98 std::vector<void*> ptrs(size());

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected