ExamplesΒΆ

The code example below demonstrates the oneDTL ZFP encode and decode functions usage.

// Array dimensions
constexpr std::size_t  sx = 128;
constexpr std::size_t  sy = 128;
constexpr std::size_t  sz = 128;
const sycl::range<3>   dimension( sz, sy, sx );

// Input/Output sycl buffers
sycl::buffer<float, 3> bufferIn( dimension );
sycl::buffer<float, 3> bufferOut( dimension );

// Input zfp_field for ZFP encode function
data_compression::zfp_field<float, 3> source( bufferIn, dimension );
// Output zfp_field for ZFP decode function
data_compression::zfp_field<float, 3> destination( bufferOut, dimension );

// ZFP compression mode
data_compression::zfp_fixed_rate<float, 3> mode( 7.7 );
// Count of blocks for each chunk
std::size_t chunk_size = 1;
// Output for encode and input for decode zfp_compressed_stream
data_compression::zfp_compressed_stream<float, 3> stream( dimension,
                                                            mode,
                                                            data_compression::zfp_index_type::offset,
                                                            chunk_size );

// sycl queue
sycl::queue queue{};

// ZFP compression
data_compression::encode(queue, source, stream);
// ZFP decompression
data_compression::decode(queue, stream, destination);