Lossy and Lossless Compression Preconditioning

Compression of the sparse triangular factors is implemented using the ZFP library (>= 0.5.5):

https://computing.llnl.gov/projects/floating-point-compression

STRUMPACK needs to be configured with ZFP support:

> cmake ../ \
-DTPL_ENABLE_ZFP=ON \
-DTPL_ZFP_INCLUDE_DIRS=$ZFPHOME/include \
-DTPL_ZFP_LIBRARIES="$ZFPHOME/lib/libzfp.so"

Lossy compression

When enabled, lossy compression will compress the sparse triangular factors, hence reducing the overall memory requirements of the solver and allowing users to solver larger problems. Because compression is lossy, the solver will be approximate (a preconditioner), and the default outer iterative solver will in this case be preconditioned GMRES. All computations will still be performed in the original precision specified by the user, so one should not expect any speedup from this compression.

Lossy compression can be enabled/disabled via the command line options:

--sp_compression lossy
--sp_compression none

or via the C++ API as follows

void strumpack::SPOptions::set_compression(CompressionType::LOSSY);
void strumpack::SPOptions::set_compression(CompressionType::NONE); // disable
CompressionType strumpack::SPOptions::compression() const; // get compression type (none/hss/blr/hodlr)
CompressionType compression() const
Definition: StrumpackOptions.hpp:910
void set_compression(CompressionType c)
Definition: StrumpackOptions.hpp:546
CompressionType
Definition: StrumpackOptions.hpp:91

The lossy compression uses fixed precision (see https://zfp.readthedocs.io/en/release0.5.4/modes.html#modes ). The precision is specified in number of bit planes, and can be set with:

--sp_lossy_precision [1-64] (default 16)

or via the C++ API as follows

int strumpack::SPOptions::lossy_precision() const; // get precision
void set_lossy_precision(int p)
Definition: StrumpackOptions.hpp:764
int lossy_precision() const
Definition: StrumpackOptions.hpp:1142

Lossless compression

For lossless compression, set the precision to 0 or a negative value.

The lossless compression mode will not be able to achieve much compression, but the solver will be exact.