Version 7.10.3
Feb 14, 2022Release Notes
-
Fixed bug in serialization/deserialization of empty null-able
bm::str_sparse_vector<>
(could case crashes and assertion faults) -
Fixed bug corner in XOR compression of empty succinct vectors
- C language interface (libbm) – fixed incorrect handling of CPU SIMD capabilities (AVX2)
-
Implemented immutable (read-only) bit-vectors. New version of BitMagic library first introduces an API for making vectors immutable. Immutable mode has two advantages: better memory footprint and faster analytical operations.
Mutable writable vectors in BitMagic are implemented using block allocation strategy (that is why sparse vectors). To facilitate edits in compressive mode vectors do space reservations to avoid frequent re-allocations which otherwise be a performance killer in multi-threaded scenarios. Such memory reservations is obviously not free and goes against the idea of memory succinct operations.
New version adds APIs to freeze vectors to read-only mode, which assembles all blocks together into one memory arena (heap defragmentation, which can reduce memory footprint for your program) and drops any reservations made for editing (reduce RAM consumption). An additional extra benefit is that immutable mode now uses contiguous arena of memory, giving CPU a better chance for cache memory reuse and more efficient hardware prefetch. Performance benchmarking shows that this factor can give 1 to 5 percent performance improvements on data-science operations like binary distance functions (Dice). The performance advantage is a nice bonus for applications which can use and benefit from read-only mode.
current implementation still turns read-write mode back on deserialization of vectors because current serialization format remains without changes for this release.
Example bvsample26 illustrates basic API functions for read-only mode.
-
New method for random access read from the Rank-Select succinct vector
bm::rsc_sparse_vector<>::gather()
– new method can give you 10% and better performance improvement comparing to naïve random access. Actual performance improvement depends on the access pattern and data pattern.Example rscsample06 shows gather method in action.
-
Improved performance of Rank-Select index. The most notisable performance improvement is for Arm and configurations without efficient SIMD acceleration. SSE4.2 and AVX2 builds show minor improvement or parity with the previous version
-
Improved
bm::bvector<>insert()/shift_right()
to avoid unnecessary deoptimization of compressed blocks.