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);