Releases: tlk00/BitMagic
BitMagic release v7.4.0
- Continued effort to provide better version for WebAssembly, first WASM SIMD build is available using:
#define BMWASMSIMDOPT (or define via makefile).
emcc command like may look like:
emcc -std=c++11 -s ALLOW_MEMORY_GROWTH=1 -O2 -msse4.2 -msimd128 -D BMWASMSIMDOPT -s WASM=1 -s DISABLE_EXCEPTION_CATCHING=0 -fno-rtti
Please note that WebAssembly SIMD is implemented as cross-compilation tweak for SSE4.2 (thus needs -msse4.4
flag).
WebAssembly SIMD is still an experimental feature for all browsers but Google Chrome.
Initial performance observations sometimes show faster than native(without SIMD) speed for optimized algorithms.
- Implemented 3-valued logic operations (INVERT, AND, OR) following the Kleene truth tables.
https://en.wikipedia.org/wiki/Three-valued_logic
Usage example:
https://github.com/tlk00/BitMagic/tree/master/samples/bv3vlogic
- Fixed bugs in parallel algorithms (race condition).
BitMagic release v7.3.1
Unfortunately v7.3.0 had a bug in serialization of XOR compressed succinct vectors, this patch fixes the issue.
BitMagic release v7.3.0
BitMagic v.7.3.0 focuses on improving compression (speed and rate) of bit-transposed vectors and data frames.
XOR compression filter went through additional testing on real-life datasets, resulted in significant re-implementation of algorithms to optimize for 32/64-bit systems or SIMD. New implementation includes a version of task-parallel algorithms (not final and poorly documented at this moment) to calculate XOR similarity model using multiple cores/threads (gives times faster performance). Future versions will provide better documentation/examples.
Continued effort to provide better version for WebAssembly.
Improved compressed container serialization (compression rate and speed).
Fixed threading issue in C mappings (contributed by Luiz Irber) affecting Rust bindings (applicable to other languages).
Fixed issue with bm::str_sparse_vector<> with remapping of non-English characters (issue isolated by Andrea Asztalos).
Fixed compilation issue related to Clang compiler compatibility and [[fallthrough]] (fix by Aaron Ucko).
BitMagic release v7.2.0
Release Notes: BitMagic 7.2.0
-
Continued effort to provide more optimized version for ARM CPU.
Optimized bm::bvector<> bit-vector left-right shifting for better ARM performance.
As a low level function this functionality impacts multiple scenarious related to
costruction or update of sorted compressed containers. -
Lots of focus on improving compressed container serialization (compression rate).
New serialization format takes advantage of Binary Interpolated Coding which results in
significant reduction in size of serialized BLOBs.
For more detail please visit updated use case for compression of dictionaries here:
http://bitmagic.io/star-search.html
- The main focus of this release was to improve memory compact container for strings.
bm::str_sparse_vector<> while it is called "sparse vector" this container demonstrates
excellent compression performance on dense vectors (20 to 30% improvements on different cases).
- Performance improvements for bm::str_sparse_vector<>::const_iterator
(up to 2x times faster now) - bm::str_sparse_vector<>::const_iterator can now iterate on substrings
- new methods for bm::sparse_vector_scanner<>
bm::sparse_vector_scanner<>::find_eq_str_prefix(..) - prefix search
bm::sparse_vector_scanner<>::find_eq_str(..) scan the vector,
return bit-vector resultset of matching indexes - new example on how to use compressed vector functionality
(substring iterators, scanner)
https://github.com/tlk00/BitMagic/tree/master/samples/strsvsample06 - new algorithm for bit-transposed dictionary remapping, it is now based on
character frequency analysis and substitution similar to Huffman coding - fixed bug in bm::str_sparse_vector<>::back_insert_iterator related to processing
of NULL-able vectors
Release notes:
http://bitmagic.io/bm-7.2.0.html
BitMagic release v7.1.0
-
Fixed bug (rooted in 6.x.x versions) of AND operation.
This is rare, but potentially serious issue, please upgrade your version asap. -
ARM CPU improvements
ARM CPU is getting much attention nowdays, BitMagic library succinct containers
are very useful in situations of limited memory and edge computing.
This release improves suppirt there.
BitMagic v.7.1.0 was formally tested and verified to work on 32-bit ARM (Raspberry Pi).
Formal ARM testing showed certain pain points of BitMagic
(bitscan algorithms reliance on POPCNT). As part of 7.1.0 release we introduced a different approach
to bitscan based on CLZ (count leading zeroes) which is available natively on ARM.
This resulted in significant improvement in performance of bvector<>::enumerator on ARM.
ARM testing also showed ways to improve Rank-Select algorithms and succinct containers based on Rank.
Some optimizations are still in progress, subject of follow up releases.
ARM NEON SIMD support is planned as well.
Release notes:
http://bitmagic.io/bm-7.1.0.html
BitMagic release v7.0.0
- Improvements to Binary Interpolative Coding as a workhorse compression method
for bit-vectors.
New serialization format is backward compatible and gives 5-6% improved compression (based on Gov2 tests). - Fixed bug in bvector<>::select() (Rank-select index) algorithm
Release notes and tests:
http://bitmagic.io/bm-7.0.0.html
BitMagic release v6.4.0
-
New algorithm bm::rank_range_split(...) (bmalgo.h)
to determine N ranges with the same rank (population count).
See example:
(samples/bvsample24)
New algorithm can be used for planning of parallel processing when
bit-vector defines a pool of tasks which needs to be broken into
a few sub-groups based on equal weight. -
AVX2 optimizations for population counting for bm::aggregator<>
-
New bm::bvector<>::enumerator constructor to take const bm::bvector<>&
reference. -
Rank-Select compressed container rsc_sparse_vector<> constructor to
explicitly define NOT NULL values. This new mode is for use case
when rsc_container values are known and can now be randompy assigned
using rank-select index. This new mode is times faster for
construction of compressed containers in compact memory.
See samples\rscsample04
- implemented rsc_sparse_vector<>::inc(size_type i) and variants to increment
succinct container values in compact memory.
This new functions can be used for memory compact term-requency analysis
or building hystograms in compact memory.
See samples\rscsample04
-
Fixed bug in bm::sparse_vector_find_first_mismatch algorithm
-
improved compilers support of [[fallthrough]] in a Clang corner case
(thanks to Aaron Ucko) -
fixed compilation issues related (GCC) related to handling of
attribute((always_inline)) (forced inline)
Release notes:
http://bitmagic.io/bm-6.4.0.html
BitMagic release v6.3.0
1.The main story for this release is to improves rsc_sparse_vector<> (Rank-Select compressed container) to add const_iterator class to simplify (and speed up) access to container content.
-
New exmple: samples/rscsample03 illustrates usage models for: rsc_sparse_vector<>::const_iterator
-
Performance optimizations:
- improved speed of rsc_sparse_vector<>::decode* methods (up to 2x improvement)
- improved performance of bvector<>::enumerator
- New method to compute corrected rank bvector<>::rank_corrected()
New method computes rank() minus value(0 or 1) of the index value.
rank_corrected() is faster than an equivalent expression of "rank()-test()"
BitMagic uses it now in succinct algorithms for address resolution.
Release notes:
http://bitmagic.io/bm-6.3.0.html
BitMagic release v6.2.0
Release Notes: BitMagic 6.2.0
1.This release introduces a new group of algorithms for re-interpretation of bit-vectors as a ranges/intervals.
Bit-interval is a contiguous block of 1s flanked with 0s as “011110”.
For example bit-vector “0101110” can be interpreted as two ranges / intervals of set values: [1..1],[3..5].
New version adds a new header for interval algorithms and iterators.
New algorithms are:
bm::find_interval_end(..) – search for end of bit-block coordinate
bm::find_interval_start(..) – search for start of bit-block coordinate
bm::is_inetrval(…) – check if two coordinates represent an solid block of 1s flanked with 0s (an interval)
bm::interval_enumerator<> - const forward iterator to interpret a bit-vector as intervals.
-
Re-worked examples sample22 and sample23 to illustrate new interval algorithms and interval_enumerator<>.
https://github.com/tlk00/BitMagic/blob/master/samples/bvsample22/sample22.cpp
https://github.com/tlk00/BitMagic/blob/master/samples/bvsample23/sample23.cpp -
Minor improvements for WebAssembly build for cleaner ‘noexcept’ declaration which positively affects performance.
Release notes:
http://bitmagic.io/bm-6.2.0.html
BitMagic release v6.1.0
Release Notes: BitMagic 6.1.0
-
Performance improvements for WebAssembly Emscripten builds with exceptions enabled.
2-5 times better performance in synthetic tests and real life applications. -
New bvector<> functions for ranges and intervals
Example:
https://github.com/tlk00/BitMagic/blob/master/samples/bvsample22/sample22.cpp
Detailed release notes:
http://bitmagic.io/bm-6.1.0.html