Pixie
Loading...
Searching...
No Matches
implementations.h
Go to the documentation of this file.
1
#pragma once
2
11
12
// clang-format off
13
/*
14
* Rank/select benchmark snapshot, 2026-07-13.
15
*
16
* Tables report one pinned Release pass on CPU 0, with Google Benchmark's
17
* 0.2 s warmup and 1.0 s minimum time. Query setup, support construction,
18
* and the 512 KiB query pool are outside the timed query region. Every row
19
* constructs RankSelectSupport with SelectSupport::kBoth, so auxiliary
20
* memory includes both select directions and excludes the external source.
21
*
22
* Random sources use the deterministic benchmark generator (seed 42) with the
23
* stated expected one-fill percentage. FNBP is the deterministic
24
* Ferrada-Navarro balanced-parentheses source produced by the Cartesian RMQ
25
* backward monotone-stack construction. FNBP rows reach 2^30; its source
26
* construction is linear in encoded bits.
27
*
28
* Query CPU time, ns.
29
*
30
* | source | N | rank1 | rank0 | select1 | select0 |
31
* | :----------- | ---: | ------: | ------: | ------: | ------: |
32
* | random 12.5% | 2^10 | 2.731 | 2.864 | 19.286 | 15.712 |
33
* | random 12.5% | 2^14 | 2.726 | 2.904 | 20.145 | 23.044 |
34
* | random 12.5% | 2^18 | 2.826 | 2.937 | 19.492 | 16.752 |
35
* | random 12.5% | 2^22 | 3.466 | 3.250 | 20.785 | 18.527 |
36
* | random 12.5% | 2^26 | 7.378 | 12.393 | 60.703 | 59.822 |
37
* | random 12.5% | 2^30 | 27.321 | 22.617 | 156.325 | 119.631 |
38
* | random 12.5% | 2^34 | 53.798 | 64.239 | 275.460 | 300.452 |
39
* | random 50% | 2^10 | 2.774 | 2.891 | 20.117 | 22.126 |
40
* | random 50% | 2^14 | 2.750 | 2.877 | 20.415 | 19.468 |
41
* | random 50% | 2^18 | 2.840 | 3.027 | 19.088 | 19.561 |
42
* | random 50% | 2^22 | 3.172 | 3.352 | 21.740 | 20.402 |
43
* | random 50% | 2^26 | 10.587 | 7.433 | 55.366 | 59.901 |
44
* | random 50% | 2^30 | 22.155 | 22.636 | 154.189 | 122.074 |
45
* | random 50% | 2^34 | 55.595 | 59.473 | 288.319 | 299.892 |
46
* | random 87.5% | 2^10 | 2.795 | 2.934 | 19.643 | 22.013 |
47
* | random 87.5% | 2^14 | 2.769 | 2.931 | 20.337 | 18.226 |
48
* | random 87.5% | 2^18 | 2.833 | 2.992 | 18.922 | 21.248 |
49
* | random 87.5% | 2^22 | 3.119 | 3.285 | 21.576 | 24.707 |
50
* | random 87.5% | 2^26 | 8.828 | 11.294 | 70.811 | 57.801 |
51
* | random 87.5% | 2^30 | 22.653 | 22.509 | 147.442 | 129.210 |
52
* | random 87.5% | 2^34 | 53.092 | 56.994 | 331.554 | 241.458 |
53
* | FNBP | 2^10 | 3.795 | 4.173 | 19.302 | 21.880 |
54
* | FNBP | 2^14 | 3.799 | 4.115 | 20.284 | 19.068 |
55
* | FNBP | 2^18 | 3.871 | 4.156 | 18.976 | 16.639 |
56
* | FNBP | 2^22 | 4.710 | 4.665 | 21.420 | 18.803 |
57
* | FNBP | 2^26 | 7.478 | 8.516 | 53.575 | 45.020 |
58
* | FNBP | 2^30 | 20.484 | 29.839 | 142.972 | 120.746 |
59
*
60
* Construction CPU time, ms, and owned auxiliary metadata. Random rows use
61
* the 50% source; this kBoth benchmark reserves combined select-sample
62
* capacity from the total bit count, independently of the fill ratio.
63
*
64
* | source | N | build | aux MiB | aux bits ratio |
65
* | :--------- | ---: | ------: | ------: | -------------: |
66
* | random 50% | 2^10 | 0.009 | 0.002 | 19.500 |
67
* | random 50% | 2^14 | 0.009 | 0.002 | 1.219 |
68
* | random 50% | 2^18 | 0.022 | 0.005 | 0.145 |
69
* | random 50% | 2^22 | 0.141 | 0.020 | 0.041 |
70
* | random 50% | 2^26 | 2.172 | 0.291 | 0.036 |
71
* | random 50% | 2^30 | 35.674 | 4.627 | 0.036 |
72
* | random 50% | 2^34 | 639.913 | 74.002 | 0.036 |
73
* | FNBP | 2^10 | 0.009 | 0.002 | 19.500 |
74
* | FNBP | 2^14 | 0.009 | 0.002 | 1.219 |
75
* | FNBP | 2^18 | 0.021 | 0.005 | 0.145 |
76
* | FNBP | 2^22 | 0.139 | 0.020 | 0.041 |
77
* | FNBP | 2^26 | 2.289 | 0.291 | 0.036 |
78
* | FNBP | 2^30 | 36.093 | 4.627 | 0.036 |
79
*/
80
// clang-format on
81
82
#include <
pixie/rank_select.h
>
83
#include <pixie/rank_select/support.h>
rank_select.h
Common interface for rank/select support over packed bit sequences.
include
pixie
rank_select
implementations.h
Generated by
1.13.2