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

Function multi_comp_decomp_example

examples/high_level_quickstart_example.cpp:145–187  ·  view source on GitHub ↗

* Additionally, we can use the same manager to execute multiple streamed compressions / decompressions * In this example we configure the multiple decompressions by inspecting the compressed buffers */

Source from the content-addressed store, hash-verified

143 * In this example we configure the multiple decompressions by inspecting the compressed buffers
144 */
145void multi_comp_decomp_example(const std::vector<uint8_t*>& device_input_ptrs, std::vector<size_t>& input_buffer_lengths)
146{
147 size_t num_buffers = input_buffer_lengths.size();
148
149 using namespace std;
150
151 cudaStream_t stream;
152 CUDA_CHECK(cudaStreamCreate(&stream));
153
154 const int chunk_size = 1 << 16;
155 nvcompType_t data_type = NVCOMP_TYPE_CHAR;
156
157 nvcompBatchedLZ4Opts_t format_opts{data_type};
158 LZ4Manager nvcomp_manager{chunk_size, format_opts, stream};
159
160 std::vector<uint8_t*> comp_result_buffers(num_buffers);
161
162 for(size_t ix_buffer = 0; ix_buffer < num_buffers; ++ix_buffer) {
163 uint8_t* input_data = device_input_ptrs[ix_buffer];
164 size_t input_length = input_buffer_lengths[ix_buffer];
165
166 auto comp_config = nvcomp_manager.configure_compression(input_length);
167
168 CUDA_CHECK(cudaMalloc(&comp_result_buffers[ix_buffer], comp_config.max_compressed_buffer_size));
169 nvcomp_manager.compress(input_data, comp_result_buffers[ix_buffer], comp_config);
170 }
171
172 std::vector<uint8_t*> decomp_result_buffers(num_buffers);
173 for(size_t ix_buffer = 0; ix_buffer < num_buffers; ++ix_buffer) {
174 uint8_t* comp_data = comp_result_buffers[ix_buffer];
175
176 auto decomp_config = nvcomp_manager.configure_decompression(comp_data);
177
178 CUDA_CHECK(cudaMalloc(&decomp_result_buffers[ix_buffer], decomp_config.decomp_data_size));
179
180 nvcomp_manager.decompress(decomp_result_buffers[ix_buffer], comp_data, decomp_config);
181 }
182
183 for (size_t ix_buffer = 0; ix_buffer < num_buffers; ++ix_buffer) {
184 CUDA_CHECK(cudaFree(decomp_result_buffers[ix_buffer]));
185 CUDA_CHECK(cudaFree(comp_result_buffers[ix_buffer]));
186 }
187}
188
189/**
190 * Additionally, we can use the same manager to execute multiple streamed compressions / decompressions

Callers 1

mainFunction · 0.85

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected