You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
`pixie` is a **succinct data structures library**.
6
+
7
+
<brclear="left" />
8
+
4
9
---
5
10
6
11
## Features
7
12
8
13
***BitVector**
9
-
* Data structure with 3.61% overhead supporting rank and select for 1 bits. Select support for 0 bits require additional 0.39%, currently not implemented
14
+
* Data structure with 3.61% overhead supporting rank and select for 1 bits.
10
15
* Supports:
11
16
*`rank(i)`: number of set bits (`1`s) up to position `i`.
12
17
*`select(k)`: position of the `k`-th set bit.
13
-
* Implementation mainly follows [1] with SIMD optimizations similar to [2]
14
-
* AVX-512 support is mandatory for now and thus will not compile without it.
18
+
* Similar operations `rank0/select0` for `0`.
19
+
* Implementation mainly follows [1] with SIMD optimizations similar to [2]
20
+
* Optimized via AVX-512/AVX-2, for large binary sequences performance is I/O bounded.
21
+
***RmMTree**
22
+
* Implementation of a range min-max tree, it supports `rank`, `select` and `excess`-related operations allowing for a fast navigation in DFUDS/BP trees.
15
23
---
16
24
17
25
## Requirements
18
26
19
27
* C++20
20
-
* Compiler with AVX-512 support recommended for best performance.
21
-
*[CMake](https://cmake.org/) ≥ 3.15.
28
+
*[CMake](https://cmake.org/) ≥ 3.18.
22
29
23
30
---
24
31
@@ -27,57 +34,78 @@
27
34
```bash
28
35
git clone https://github.com/Malkovsky/pixie.git
29
36
cd pixie
30
-
mkdir build &&cd build
31
-
cmake ..
32
-
make -j
37
+
cmake --preset release
38
+
cmake --build --preset release
39
+
```
40
+
41
+
Manual alternative:
42
+
43
+
```bash
44
+
mkdir -p build/release
45
+
cmake -B build/release -DCMAKE_BUILD_TYPE=Release
46
+
cmake --build build/release -j
33
47
```
34
48
35
-
This will build the library along with benchmarks and tests.
49
+
Tests are enabled by default (`PIXIE_TESTS=ON`). Benchmarks are opt-in; enable with `-DPIXIE_BENCHMARKS=ON` or configure with the `benchmarks-all` preset, you can use `benchmark-diagnostic` preset for performance diagnostics (Release with debug info + performance counters support).
36
50
37
51
---
38
52
39
53
## Running Tests
40
54
41
-
After building:
55
+
After building with presets, binaries are located in `build/release`.
42
56
43
57
### BitVector
44
58
45
59
```bash
46
-
./unittests
60
+
./build/release/unittests
47
61
```
48
62
49
63
### RmM Tree
50
64
51
65
```bash
52
-
./test_rmm
66
+
./build/release/test_rmm
53
67
```
54
68
55
69
---
56
70
57
71
## Running Benchmarks
58
72
73
+
Before running benchmarks, configure with presets:
74
+
75
+
```bash
76
+
cmake --preset benchmarks-all
77
+
cmake --build --preset release
78
+
```
79
+
80
+
For a RelWithDebInfo diagnostic build, use:
81
+
82
+
```bash
83
+
cmake --preset benchmarks-diagnostic
84
+
cmake --build --preset release
85
+
```
86
+
59
87
### BitVector
60
88
61
89
Benchmarks are random 50/50 0-1 bitvectors up to $2^{34}$ bits.
62
90
63
91
```bash
64
-
./benchmarks
92
+
./build/release/benchmarks
65
93
```
66
94
67
95
### RmM Tree
68
96
69
97
```bash
70
-
./bench_rmm
98
+
./build/release/bench_rmm
71
99
```
72
100
73
-
For comparison with range min-max tree implementation from [sdsl-lite](https://github.com/simongog/sdsl-lite) (Release build required: `cmake .. -DCMAKE_BUILD_TYPE=Release`):
101
+
For comparison with range min-max tree implementation from [sdsl-lite](https://github.com/simongog/sdsl-lite) (Release build required; use the release preset or `-DCMAKE_BUILD_TYPE=Release`):
For visualization, write the JSON output to a file using `--benchmark_out=<file>` (e.g. `./bench_rmm --benchmark_out=rmm_bench.json`) and plot it with `misc/plot_rmm.py` (add `--sdsl-json rmm_bench_sdsl.json` for comparison).
108
+
For visualization, write the JSON output to a file using `--benchmark_out=<file>` (e.g. `./build/release/bench_rmm --benchmark_out=rmm_bench.json`) and plot it with `scripts/plot_rmm.py` (add `--sdsl-json rmm_bench_sdsl.json` for comparison).
0 commit comments