Skip to content

Releases: kelindar/bitmap

v1.5.2

06 Nov 05:37
649a9ff
Compare
Choose a tag to compare

What's Changed

New Contributors

  • @mhr3 made their first contribution in #37

Full Changelog: v1.5.1...v1.5.2

v1.5.1

02 Jul 10:15
c15d0a3
Compare
Choose a tag to compare

What's Changed

Full Changelog: v1.5.0...v1.5.1

v1.5.0

03 May 19:18
fa863a0
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.4.1...v1.5.0

v1.4.1

08 Jun 20:19
2bbf548
Compare
Choose a tag to compare

What's Changed

  • Improved aggregations, rolled back popcount by @kelindar in #29

Full Changelog: v1.4.0...v1.4.1

v1.4.0

07 Jun 18:26
9bb0cfc
Compare
Choose a tag to compare

This release adds simple generic functions for filtered reduction specifically Sum([]T, Bitmap), Min([]T, Bitmap) and Max([]T, Bitmap). They are not the most optimized at the moment, but should be at least 2x better than the naive implementations using range or loop, as these reductions are done in a vectorized way.

What's Changed

Full Changelog: v1.3.0...v1.4.0

v1.3.0

04 Jun 21:33
9c2019d
Compare
Choose a tag to compare

This release adds a vectorized population count implementation, described in the paper https://arxiv.org/pdf/1611.07612.pdf by W. Mula, N. Kurz and D. Lemire. The code itself is borrowed from https://github.com/viant/vec/tree/main/bits with few alteration and a toolchain, I have it working for amd64 but haven't implemented for arm64 yet.

This results in a 50% improvement of performance for Count() operation and is especially useful for large bitmaps.

What's Changed

Full Changelog: v1.2.2...v1.3.0

v1.2.2

04 Jun 09:57
5f7e2a1
Compare
Choose a tag to compare

What's Changed

  • Add hexadecimal JSON marshalling by @mFat7y in #26

Full Changelog: v1.2.1...v1.2.2

v1.2.1

01 Apr 11:19
9b9fa52
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.2.0...v1.2.1

v1.2.0

23 Jan 08:45
0d25d02
Compare
Choose a tag to compare

This release adds optimized code to perform And, And Not, Or and Xor operations on multiple bitmaps at once. The signature hence now adds a variadic parameter for extra bitmaps, as shown below.

func (*Bitmap) And(other Bitmap, extra ...Bitmap)
cpu: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
BenchmarkMany/and4-naive-8         	  100153	     12324 ns/op	       0 B/op	       0 allocs/op
BenchmarkMany/and4-many-8          	  139195	      8709 ns/op	       0 B/op	       0 allocs/op

The main difference is that SIMD code generated now performs multiple of these instructions at once, allowing us to make better use of the cached destination bitmap. Below are the comparison results between naive version which calls And() 4 times and the batched version which calls And() with 1 other bitmap and 3 extra.

image

image

image

What's Changed

Full Changelog: v1.1.5...v1.2.0

v1.1.5

24 Dec 11:50
2b3f985
Compare
Choose a tag to compare

Instead of simply using next power of 2 to resize bitmaps, now after 256 elements we will use a formula that is similar to one used during slice append, which increases the slice gradually 25% at a time, saving space.

What's Changed

Full Changelog: v1.1.4...v1.1.5