Skip to content

1.0.0

Compare
Choose a tag to compare
@lindstro lindstro released this 01 Aug 21:25
· 63 commits to master since this release

1.0.0 (August 1, 2022)

This release is not ABI compatible with prior releases due to numerous changes
to function signatures and data structures like zfp_field. However, few of
the API changes, other than to the cfp C API for compressed arrays, should
impact existing code. Note that numerous header files have been renamed or
moved relative to prior versions.

Added

  • zfp::const_array: read-only variable-rate array that supports
    fixed-precision, fixed-accuracy, and reversible modes.
  • Compressed-array classes for 4D data.
  • const versions of array references, pointers, and iterators.
  • A more complete API for pointers and iterators.
  • cfp support for proxy references and pointers, iterators, and
    (de)serialization.
  • Support for pointers and iterators into array views.
  • zfp::array::size_bytes() allows querying the size of different components
    of an array object (e.g., payload, cache, index, metadata, ...).
  • Templated C++ wrappers around the low-level C API.
  • A generic codec for storing blocks of uncompressed scalars in zfp's
    C++ arrays.
  • Additional functions for querying zfp_field and zfp_stream structs.
  • zfp_config: struct that encapsulates compression mode and parameters.
  • Rounding modes for reducing bias in compression errors.
  • New examples: array, iteratorC, and ppm.

Changed

  • Headers from array/, cfp/include/, and include/ have been renamed
    and reorganized into a common include/ directory.
    • The libzfp API is now confined to zfp.h, zfp.hpp, and zfp.mod
      for C, C++, and Fortran bindings, respectively. These all appear in
      the top-level include/ directory upon installation.
    • C++ headers now use a .hpp suffix; C headers use a .h suffix.
    • C++ headers like array/zfparray.h have been renamed zfp/array.hpp.
    • C headers like cfp/include/cfparrays.h have been renamed zfp/array.h.
  • size_t and ptrdiff_t replace uint and int for array sizes and
    strides in the array classes and C/Fortran APIs.
  • zfp_bool replaces int as Boolean type in the C API.
  • bitstream_offset and bitstream_size replace size_t to ensure support
    for 64-bit offsets into and lengths of bit streams. Consequently, the
    bitstream API has changed accordingly.
  • All array and view iterators are now random-access iterators.
  • Array inspectors now return const_reference rather than a scalar
    type like float to allow obtaining a const_pointer to an element
    of an immutable array.
  • zfp::array::compressed_data() now returns void* instead of uchar*.
  • The array (de)serialization API has been revised, resulting in new
    zfp::array::header and zfp::exception classes with new exception
    messages.
  • The array codec class is now responsible for all details regarding
    compression.
  • The compressed-array C++ implementation has been completely refactored to
    make it more modular, extensible, and reusable across array types.
  • Array block shapes are now computed on the fly rather than stored.
  • The cfp C API now wraps array objects in structs.
  • The zfpy Python API now supports the more general memoryview over
    bytes objects for decompression.
  • The zFORp Fortran module name is now zfp instead of zforp_module.
  • Some command-line options for the diffusion example have changed.
  • CMake 3.9 or later is now required for CMake builds.

Removed

  • zfp::array::get_header() has been replaced with a zfp::array::header
    constructor that accepts an array object.
  • ZFP_VERSION_RELEASE is no longer defined (use ZFP_VERSION_PATCH).

Fixed

  • #66: make install overwrites googletest.
  • #84: Incorrect order of parameters in CUDA memset().
  • #86: C++ compiler warns when __STDC_VERSION__ is undefined.
  • #87: CXXFLAGS is misspelled in cfp/src/Makefile.
  • #98: zfp_stream_maximum_size() underestimates size in reversible mode.
  • #99: Incorrect private_view reads due to missing writeback.
  • #109: Unused CPython array is incompatible with PyPy.
  • #112: PGI compiler bug causes issues with memory alignment.
  • #119: All-subnormal blocks may cause floating-point overflow.
  • #121: CUDA bit offsets are limited to 32 bits.
  • #122: make install does not install zfp command-line utility.
  • #125: OpenMP bit offsets are limited to 32 bits.
  • #126: make install does not install Fortran module.
  • #127: Reversible mode reports incorrect compressed block size.
  • #150: cmocka tests do not build on macOS.
  • #154: Thread safety is broken in private_view and private_const_view.
  • ZFP_MAX_BITS is off by one.
  • diffusionC, iteratorC are not being built with gmake.