BitMagic Home C++ Boost Logo
BitMagic Home
BitMagic News
BitMagic Technical Articles
BitMagic Documentation
BitMagic Team
BitMagic Download

Please use our BLOG to subscribe to BM library news.

April 25, 2010. BM library version 3.7.0 released

  • Fixed logical bug in deserialization (serious!)
  • Performance optimization count_and(), bvector destruction, etc.
  • Simplified template arguments for bvector<>

    March 23, 2010. BM library version 3.6.4 released

  • Sigficantly improved performance of deserialization

    January 9, 2010. BM library version 3.6.3 released

  • Maintenance release: fixes critical bug in 64-bit mode

    December 16, 2009. SSE2 vs CUDA. Part 2.
    CUDA vs SSE2 in parallel bit stream transposition / similarity. Part 2.

    November 22, 2009. BM library version 3.6.1 released

  • improved performance of Elias Gamma decoding. Deserialization of compressed bit-vectors is seriously faster
  • introduced hardware specific optimizations for Intel Nehalem SSE 4.2
  • fixed stack overrun bug

    October 19, 2009. Elias Gamma encoding of bit-vector Delta Gaps

    October 17, 2009. BM library version 3.6.0 released

  • improved bit-vector serialization with bitset compression. New serialization adds Gamma encoding on top of D-Gap compression. This should reduce IO for databases and search systems using serialized bit-vectors.
  • fixed functionality bug in deserialization with logical AND
  • new serialization API (old API kept for backward compatibility)

    August 19, 2009. SSE2 vs CUDA.
    CUDA vs SSE2 in parallel bit stream transposition / similarity.

    Aug 08, 2009. BM library version 3.5.3 released

  • improved performance of AND logical operations and derived DOT product algorithms (cound_and(), any_and())
  • improved compression of serialized bvectors (serialization format remains backward compatible)
  • fixed compatibility issues with MSVC8 and Intel C++ 11 .1 (SSE2 optimization mode)
  • improved automatic variables disambiguation using 'restrict'

    Aug 05, 2009. BitMagic Library BLOG at:

    July 24, 2009. BM library version 3.5.2 released

  • Serialization improvements: faster speed on x86 platforms, compact storage for short vectors
  • Improved performance of bit traversal (enumerator)

    Aug 5, 2007. BM library version 3.5.0 released

  • Serialization improvements: new functions to deserialize bit-vector applying set operation (AND, OR, XOR, etc) or compute bit count. Works faster than deserialization with subsequent logical operation. Applications do not need to create temporary vectors.
  • Fixed several bugs

    Apr 20, 2006. BM library version 3.4.0 released

  • Serialization improvements: faster code, better compression
  • Fixed several bugs and incompatibilities

    Feb 22, 2005. BM library version 3.3.0 released

  • Serialization methods has been derived into a separate group of functions.

    March 25, 2004. BM library version 3.2.1 released

  • New function bvector<>::set_range , performance optimized, when you need to set or clear many bits in one call
  • New set algorithms (bmalgo.h) count_intervals - compute number of bit intervals (GAPs) in bitvector
    combine_and, combine_or, combine_xor, combine_sub - performance optized recombination of bitvector and an arbitrary set sequence (iterator) (works well with STL containers and other iterable structures)

    October 5, 2003. BM library version 3.2.0 released

  • bvector<> architecture made more open. Some internal access functions now are public. It makes possible to create external functions and algorithms based on bvector, but not part of it. Over time bvector<> template became an example of a swiss-army knife class, slowing down compilation and hard to supportand and understand. This design change will make possible migration of some methods (like serialize/deserialize) into a separate place.
  • Added bmalgo.h - new header with bvector based optimized algorithms. Now it includes distance metrics (Hamming, etc). This algorithms work 3-5 times faster than straighforward approach. See also Efficient distance metrics
  • Fixed a serious bug which could result in incorrect functionality and even crash in multi-threaded applications.
  • more SSE2 optimizations (no dramatic improvement, but still better performance on some operations)
  • Added support for "restrict" keyword. It's turned on by BM_HASRESTRICT define. Some compilers (Intel C++) benefit from that by generating better code with out of order stores.

    September 25, 2003. SSE2 optimization article updated.
    More information on memory bandwidth issues and bitset distances (on example of Hamming distance).

    August 16, 2003. BM library version 3.1.4 released
    This release fixes several critical incorrect functionality bugs and one incorrect memory read bug. It's strongly suggested to download and use the new release.

    BM was reviewed by Pavel Vozenilek. As a result of this review several changes were made:

  • Platform dependent SSE2 code now migrated into a separate header. The change is supposed to facilitate implementation of new platform dependent plugins for other SIMD architectures like 3DNow!, Altivec, etc.
  • Use of defines and constants made more regular. All BM defines are now made local, reduced risk of conflicts with other sources.
  • Created forward declaration header bmfwd.h to spped up compilation of translation units only using pointers or references on bvector.

    June 8, 2003. BM library version 3.1.3 released

  • Improved compatibility between bvector<> and STL algorithms and containers. enumerator can now be used as an argument of std::set_intersection, etc. Added inserter class to copy data from containers to bvector. See sample8.cpp for more details
  • New function: bvector<>::count_range - counts number of 1 bits in a given range of bits
  • New function: bvector<>::set_gap_levels - to change possible GAP sizes after bvector construction
  • New function: bvector<>::optimize_gap_size - computes optimal GAP sizes for bvector
  • bvector<> statistics calculation improved, now statistics includes information about gap blocks bvector<>::calc_stat - function prototype changed
  • bvector<> serialization format changed (incompatible with prev. versions) Added "const" version of serialize function
  • bvector<>::strategy enum has been taken out of bvector<>
  • Implemented new method of keeping GAP flags inside bvector<>. Previous version used mini bitset (template argument 2(MS)) to keep this flag. Current version by default does not use min bitset but keeps this flag in the block pointer. This trick is based on the fact that most allocators give us aligned block of memory and bit 0 in the pointer is always 0 and can be used to keep information. This hack works better than a dedicated bitset of both in terms of memory and performance. BM library fully supports the old implementation. All you need is to define BM_DISBALE_BIT_IN_PTR
  • bvector<>::clear() - received an optional argument free_mem - indicates if we want to free the unused memory
  • fixed several problems in the build environment

    March 28, 2003. BM library version 3.1.2 released

  • BM library tuned for minimal memory consumtion
  • fixed several problems in the build environment
  • improved performance of logical operations (OR, AND, etc.)

    March 6, 2003. BM library version 3.1.1 released
    This version is about 128-bit SSE2 optimization.

    Feb 19, 2003. BM library version 3.1.0 released

  • performance optimization of bvector<>::enumerator. Bitvector as a container. Bitset traversal.
  • lexicographical comparison of bitsets re-implemented for better performance
  • additional optimization of bitcounting procedures to employ out-of-order execution on some processors
  • added several functions making bvector<> look more like standard std::bitset
  • fixed several minor bugs and problems

    Jan 4, 2003. BM library version 3.0.0 released
    Major redesign has been made. BM is not a library anymore. It is library of templates! In its design BM tries to resemble STL, but it still remains independent from STL and does not require any part of STL to be fully functional.

  • STL style allocators are supported now. Optimization of memory allocations.
  • implemented lexicorgahical comparison of bitsets as bit-strings
  • Number of improvements in syntax, added operators support for bit operations (AND, OR, etc) and comparisons
  • performance optimization
  • fixed several bugs

    Sept 28, 2002. BM library version 2.2.0 released

  • variable length GAP blocks, saves some memory
  • number of functions were templetised, improved code reuse (good bye fast compilation)
  • get_count() function renamed to count(). Bit count optimization turned off by default. (define BMCOUNTOPT and recompile code if want it ON) Beware: count optimization makes BM thread unsafe in rear cases because of the mutable variables that can be modified in const count() function.

    July 19, 2002. BM library version 2.1.0 released
    This version is devoted to 64-bit Optimization.

    July 10, 2002. Next version development started
    Target is 64-bit optimization.

    July 8, 2002. This site launched