* 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 */
| 143 | * In this example we configure the multiple decompressions by inspecting the compressed buffers |
| 144 | */ |
| 145 | void 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 |