1.0.0
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
andzfp_stream
structs. zfp_config
: struct that encapsulates compression mode and parameters.- Rounding modes for reducing bias in compression errors.
- New examples:
array
,iteratorC
, andppm
.
Changed
- Headers from
array/
,cfp/include/
, andinclude/
have been renamed
and reorganized into a commoninclude/
directory.- The libzfp API is now confined to
zfp.h
,zfp.hpp
, andzfp.mod
for C, C++, and Fortran bindings, respectively. These all appear in
the top-levelinclude/
directory upon installation. - C++ headers now use a
.hpp
suffix; C headers use a.h
suffix. - C++ headers like
array/zfparray.h
have been renamedzfp/array.hpp
. - C headers like
cfp/include/cfparrays.h
have been renamedzfp/array.h
.
- The libzfp API is now confined to
size_t
andptrdiff_t
replaceuint
andint
for array sizes and
strides in the array classes and C/Fortran APIs.zfp_bool
replacesint
as Boolean type in the C API.bitstream_offset
andbitstream_size
replacesize_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 likefloat
to allow obtaining aconst_pointer
to an element
of an immutable array. zfp::array::compressed_data()
now returnsvoid*
instead ofuchar*
.- The array (de)serialization API has been revised, resulting in new
zfp::array::header
andzfp::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 ofzforp_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 azfp::array::header
constructor that accepts an array object.ZFP_VERSION_RELEASE
is no longer defined (useZFP_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 incfp/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
andprivate_const_view
. ZFP_MAX_BITS
is off by one.diffusionC
,iteratorC
are not being built withgmake
.