Commit graph

560 commits

Author SHA1 Message Date
Richard Artoul
339a78d88d wokring 2018-12-07 16:11:15 -05:00
Richard Artoul
e8e4369f76 all passing 2018-12-07 16:11:15 -05:00
Richard Artoul
30946a0372 working 2018-12-07 16:11:15 -05:00
Richard Artoul
af3cb91a40 first 2018-12-07 16:11:15 -05:00
Richard Artoul
2e1f60ac42 horrible wip 2018-12-07 16:11:15 -05:00
Richard Artoul
d2da91fdde add test 2018-12-07 16:11:15 -05:00
Richard Artoul
d3606e274d fix bug 2018-12-07 16:11:15 -05:00
Richard Artoul
b77c8a630b Add in place union 2018-12-07 16:11:15 -05:00
Todd Gruben
de1b9b4de2 yata gofmt 2018-11-26 15:21:37 -06:00
Todd Gruben
f6d34b42ba gofmt 2018-11-26 15:05:43 -06:00
Seebs
3f6c17f433 roaring: use DirectAdd rather than op.apply for cheap performance win
Calling op.apply on an op we know to be an add ends up noticably
increasing the cost of the operation; this trivial change gets about
a 5-10% reduction in reported runtime of benchmarks doing a lot
of adds. (The other IntersectionCount benchmarks don't actually use
Add most of the time, so it doesn't show up in them.)

name                                    old time/op  new time/op  delta
GetBenchData-8                          4.25ms ± 0%  3.91ms ± 2%   -8.04%  (p=0.002 n=6+6)
Bitmap_IntersectionCount_ArrayArray-8   20.9µs ± 2%  18.7µs ± 3%  -10.18%  (p=0.004 n=5+6)
SliceAscending-8                        24.7ms ± 0%  21.8ms ± 0%  -11.74%  (p=0.004 n=5+6)
SliceDescending-8                       29.8ms ± 0%  27.0ms ± 0%   -9.56%  (p=0.004 n=5+6)
SliceAscendingStriped-8                 32.0ms ± 0%  29.5ms ± 0%   -8.07%  (p=0.008 n=5+5)
SliceDescendingStriped-8                39.3ms ± 1%  36.8ms ± 1%   -6.27%  (p=0.002 n=6+6)
2018-11-26 14:12:02 -06:00
Seebs
67e3dc4a08 roaring: improve SliceAscending/SliceDescending tests
Two changes: First, make SliceDescending set the entire
slice, not all-but-one bits. Second, add tests that are
"striped", so it's writing to 8 parts of the slice
sequentially, rather than just going up or down the whole
thing, because that gives us some cheap indication of
cache-locality impact, which turns out to be possibly
significant.
2018-11-26 14:12:02 -06:00
Todd Gruben
0404354faa add shift operater to pql 2018-11-26 11:29:05 -06:00
Todd Gruben
933d5e28e7 initial bit shift functions for all container type 2018-11-20 15:12:02 -06:00
Seebs
e20671b2b4 silence gometalinter
I am aware that I don't actually ever use the length of a
after this line of code, but if I don't correctly update it,
any future change that needs that length will break
mysteriously. We humbly ask gometalinter to consider
the reply of counsel in _Arkell v. Pressdram_ (1971).
2018-11-16 15:00:09 -06:00
Seebs
7c82f48046 improve testing for intersections of array/array pairs
A transient bug introduced in intersectionCountArrayArray was
not caught by the tests, because it would only manifest when
two containers of different lengths were being compared. Also
improve the testing for intersectArrayArray, even though that
code hasn't been changed.
2018-11-16 15:00:09 -06:00
Seebs
1a8633f3a5 use roaring conventions for variable names
Roaring likes to call things "a" and "b", not "1" and "2",
and use "n" for length, not "l", etcetera. Adopt these
conventions to make code more readable.

Also drop the 'vb' value since it isn't expensive to
compute and the compiler can figure out that it can
reuse the value.
2018-11-16 15:00:09 -06:00
Seebs
9b552ab508 enhance TestRunCountRange
confirm that the number of runs comes out as expected,
and add a couple of numbers out of order to verify that
the 17-18-19 set gets coalesced into one run even
if we add 17 and 19 before 18.
2018-11-16 14:59:46 -06:00
Seebs
d4364bea52 slightly streamline array/array comparison
The net effect of this is to not recompute "the current
value of the first array" on every loop, pretty much.
However, the swap to make sure the inner loop is on the
longer array seems to be significant for performance.
On my system, this moves runtime from ~29us per op
to ~17us per op.
2018-11-16 14:59:46 -06:00
Seebs
32c4b3540f simplify intersectBitmapRun output to remove a conversion
If the total number of things returned was small enough to
make an array, intersectBitmapRun converted to an array. This
seems possibly-premature; future processing might well prefer
a bitmap. We know everything gets optimized before being
written out, let's not convert without a specific reason. But
also, let's use an array no matter which container is small
enough to prove that we can do so safely.

Fixes #854.
2018-11-16 14:59:09 -06:00
Seebs
c8e6fd2e43 improve type matrix for IntersectionCount benchmarks
The circumstances under which bitmaps are converted between
types are not 100% nailed down, and the IntersectionCount
benchmark was actually using a bitmap for the "run" data set
as well as for the "bitmap" data set. Fix that by using
Optimize() explicitly. Also, add a second RLE set so we
can compare the difference between "one run for the entire
set" and "several runs".

Also add array/array comparisons. We use two different
lengths of arrays, because performance turns out to vary
between "first array longer" and "second array longer".

Also added a benchmark for getBenchData itself, since it's
at least one possible use case for "creating a lot of
containers".
2018-11-16 14:59:09 -06:00
Seebs
8e270f9201 provide commented-out test case for bug in dead code
bitmapEquals isn't currently being called ever, but it has
an arcane edge-case bug, so I've made the test case for it
and commented it out for future reference.
2018-11-15 15:11:08 -06:00
Seebs
33add4f1e0 proof of concept for stats
This commit adds some trivial stat-tracking which can be
observed at localhost:10101/debug/vars. However, writes to
a locking data structure aren't cheap, so the stat-tracking
is by default not compiled. To build it, add the build
tag `roaringstats`, which will cause the `statsHit` function
to actually do something. Otherwise, it's an empty and
inlineable function, meaning the compiler throws it away
entirely.

This would, in principle, let us get additional visibility
into edge cases and which code paths are hot. This is not
the same thing as profiling for overall performance; the
stat counts aren't affected by whether a particular code path
is using a large amount of CPU time, just reporting how
often it happens at all.
2018-11-15 15:10:48 -06:00
Yuce Tekol
70f85211d9
prevent panic in Bitmap.UnmarshalBinary when there is no data 2018-11-15 22:06:21 +03:00
Todd Gruben
6aad568f28 added TODO(2.0) comment 2018-09-25 11:07:01 -05:00
Todd Gruben
be3bc105cd fixed upconvert;reverted to released interface 2018-09-25 10:40:04 -05:00
Todd Gruben
64e86614f8 shrank n(container bit count cache) to int32 2018-09-25 09:14:19 -05:00
Matt Jaffee
3ca7944fe3
remove unecessary lines
confirmed that bounds checks are still avoided by
go test -gcflags="-d=ssa/check_bce/debug=1"

./roaring.go:3387:8: Found IsSliceInBounds
./roaring.go:3388:8: Found IsSliceInBounds
./roaring.go:3436:21: Found IsSliceInBounds
2018-09-20 12:37:28 -05:00
tgruben
9b0cc07b30
Merge branch 'master' into bounds-check 2018-09-20 09:09:27 -05:00
Yuce Tekol
fcdc3b7427
trivial comment fix 2018-09-19 20:54:06 +03:00
Yuce Tekol
e664a0e42f
rename add -> DirectAdd 2018-09-17 20:25:14 +03:00
Yuce Tekol
37fdd73a7f
DirectAdd adds a single value 2018-09-17 17:16:03 +03:00
Yuce Tekol
09c24cd3be
Changed the signature of Bitmap.DirectAdd function 2018-09-17 17:10:02 +03:00
Yuce Tekol
266051dd26
Adds DirectAdd function to roaring.Bitmap 2018-09-17 16:25:34 +03:00
Todd Gruben
fe8756927c manual gofmt 2018-09-14 15:40:37 -05:00
Todd Gruben
51e57ad550 code cleanup 2018-09-14 14:46:02 -05:00
tgruben
eb7af13be2
Merge branch 'master' into bounds-check 2018-09-14 14:37:23 -05:00
Todd Gruben
136ee7beab updated comments and gofmt 2018-09-14 10:27:33 -05:00
Matt Jaffee
b412309447
rename standard roaring to "official" throughout 2018-09-13 13:38:18 -05:00
Matt Jaffee
b2ec5e373e
fixup explanatory comment 2018-09-13 13:33:51 -05:00
Matt Jaffee
4a5f12631c
more naked returns 2018-09-12 17:29:35 -05:00
Matt Jaffee
3bc9c66f5e
remove some naked returns and simplify 2018-09-12 17:21:17 -05:00
Matt Jaffee
a3243f99e1
linter fixes - reorder return vals, remove unused const 2018-09-12 13:24:59 -05:00
Matt Jaffee
8254d0fadd
improve import roaring docs, check errors 2018-09-12 12:08:57 -05:00
Matt Jaffee
d3717e2afe
make Bitmap.UnmarshalBinary work for roaring or pilosa format 2018-09-12 10:50:05 -05:00
Todd Gruben
93e5767325 cleanup #1622 2018-09-06 16:27:10 -05:00
Travis Turner
8a1f8659fa
change test to use exported UnmarshalStandardRoaring() 2018-09-05 10:13:15 -05:00
Todd Gruben
1d99da1f28
added support for both pilosa and standard roaring uploads 2018-09-05 10:13:15 -05:00
Todd Gruben
cc80e0b0e4
initial support for bulk importing standard roaring files per shard 2018-09-05 10:13:15 -05:00
Todd Gruben
019ca63cf4
add support for reading standard roaring bitmaps to pilosa/roaring. 2018-09-05 10:13:15 -05:00