3个不稳定版本
0.1.1 | 2024年2月25日 |
---|---|
0.1.0 | 2024年2月25日 |
0.0.1 | 2023年12月26日 |
在 压缩 中排名 167
每月下载量 47
240KB
3K SLoC
cseq_benchmark
是由 Piotr Beling 编写的用于基准测试紧凑序列和位图的程序。
它可以测试以下crate中包含的列表算法
- cseq: 伊利亚斯-范诺(实验性);
- bitm: 在位向量上执行排名和选择查询;
- sucds: 在位向量上执行排名和选择查询;
- succinct: 在位向量上执行排名和选择查询;
- sux: 在位向量上执行选择查询;
- vers(只有编译时启用了
vers-vecs
特性):在位向量上执行排名和选择查询。
请使用 --help
开关运行程序以查看可用选项。
以下您可以找到关于 安装 cseq_benchmark
和使用它进行的 重现实验 的说明,这些实验可以在已发布的或正在审查的论文中找到。请注意,这些说明已在GNU/Linux下测试过,可能需要对其他系统进行一些修改。
安装
cseq_benchmark
可以从源代码编译和安装。为此,需要一个Rust编译器。获取编译器以及其他必需工具(如 cargo
)的最简单方法是使用 rustup。
请按照 https://rust-lang.net.cn/tools/install 中的说明进行操作。
一旦安装了Rust,只需执行以下命令即可使用本地优化安装 cseq_benchmark
RUSTFLAGS="-C target-cpu=native" cargoinstall --特性=vers-vecs cseq_benchmark
使用 --features=vers-vecs
标志可以编译非移植的 vers 库。如果编译出现问题时,应省略此标志。
重现论文中的实验
专注于简洁数据结构的 Rust 库和程序
(Piotr Beling 专注于简洁数据结构的 Rust 库和程序 提交给 SoftwareX)
通过运行以下命令可以获得支持在位向量上执行秩和选择查询的结构的结果(我们使用 rustc 1.75.0 编译):
cseq_benchmark -f -t 60 -c 20 -q 10000000 -u 1000000000 -n 500000000 bv
cseq_benchmark -f -t 60 -c 20 -q 10000000 -u 1000000000 -n 100000000 bv
注意
- 使用
-t 60 -c 20
开关强制进行长时间测试(预热 60 秒 + 每个测试 60 秒 + 测试之间的冷却/睡眠 20 秒)。可以省略这些开关以更快地获得结果,但重复次数会更少。 -f
开关会将结果写入文件。也可以跳过,因为结果无论如何都会打印到屏幕上。
可以使用位于 https://github.com/beling/benchmark-succinct 的程序(该页面还包含编译说明)来获得包含在 SDSL2 中的方法的结果(该库是用 C++ 编写的;我们使用 clang 14.0.6 编译),通过运行以下命令:
rank_sel 1000000000 500000000 60 10000000
rank_sel 1000000000 100000000 60 10000000
基准测试结果
关于支持位向量秩和选择查询的结构基准测试的说明
- 我们不区分 rank0 和 rank1,因为每个都可以从另一个 trivially 计算得出。
- 在具有 adversarial 分布和 n 个 1 的位向量中,99% 的 1 占据最后 n 个索引。
- 测试的库版本:bitm 0.4.1,succinct 0.5.2,sucds 0.8.1,sux 0.2.0,vers 1.1.0。
- 标记为 * 的支持选择的结构使用或集成了相应的秩结构;为它们提供的空间开销是额外的。
- 我们使用以下内容进行基准测试:长时间测量(t=60)和冷却(c=20)时间,107 个随机查询参数,AMD Ryzen 5600G @3.9GHz CPU,以及启用原生优化编译。
位向量中 1 的均匀分布的秩
位向量长度 | 1010 | 109 | 108 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 的百分比 | 50 | 10 | 50 | 10 | 50 | 10 | ||||||
空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | |
bitm RankSelect101111 | 3.1 | 23 | 3.1 | 23 | 3.1 | 21 | 3.1 | 21 | 3.1 | 6 | 3.1 | 7 |
succinct JacobsonRank | 22.8 | 52 | 22.8 | 52 | 18.8 | 45 | 18.8 | 44 | 22.7 | 12 | 22.7 | 13 |
succinct Rank9 | 25.0 | 19 | 25.0 | 19 | 25.0 | 18 | 25.0 | 17 | 25.0 | 7 | 25.0 | 7 |
sucds Rank9Sel | 25.0 | 19 | 25.0 | 18 | 25.0 | 17 | 25.0 | 17 | 25.0 | 7 | 25.0 | 7 |
vers RsVec | 4.7 | 26 | 5.3 | 26 | 4.7 | 24 | 5.3 | 24 | 4.7 | 6 | 5.3 | 6 |
位向量中 1 的均匀分布的选择 1
位向量长度 | 1010 | 109 | 108 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 的百分比 | 50 | 10 | 50 | 10 | 50 | 10 | ||||||
空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | |
bitm RankSelect101111 二分搜索* | 0.0 | 395 | 0.0 | 396 | 0.0 | 177 | 0.0 | 178 | 0.0 | 87 | 0.0 | 87 |
bitm RankSelect101111 组合采样* | 0.4 | 91 | 0.3 | 92 | 0.4 | 60 | 0.3 | 61 | 0.4 | 29 | 0.3 | 31 |
succinct JacobsonRank* | 0.0 | 1486 | 0.0 | 1449 | 0.0 | 931 | 0.0 | 931 | 0.0 | 436 | 0.0 | 437 |
succinct Rank9* | 0.0 | 838 | 0.0 | 806 | 0.0 | 534 | 0.0 | 516 | 0.0 | 207 | 0.0 | 208 |
sucds Rank9Sel + hints* | 3.1 | 168 | 0.6 | 144 | 3.1 | 107 | 0.6 | 109 | 3.1 | 33 | 0.6 | 41 |
sucds Rank9Sel* | 0.0 | 511 | 0.0 | 448 | 0.0 | 249 | 0.0 | 252 | 0.0 | 103 | 0.0 | 105 |
sux SelectFixed1 | 12.5 | 71 | 2.5 | 204 | 12.5 | 50 | 2.5 | 138 | 12.5 | 15 | 2.5 | 34 |
sux SelectFixed2 | 15.6 | 39 | 3.1 | 90 | 15.6 | 33 | 3.1 | 55 | 15.6 | 10 | 3.1 | 19 |
vers RsVec* | 0.0 | 151 | 0.0 | 159 | 0.0 | 82 | 0.0 | 101 | 0.0 | 32 | 0.0 | 38 |
位向量中 1 的均匀分布的选择 0
位向量长度 | 1010 | 109 | 108 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 的百分比 | 50 | 10 | 50 | 10 | 50 | 10 | ||||||
空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | |
bitm RankSelect101111 二分搜索* | 0.0 | 417 | 0.0 | 416 | 0.0 | 193 | 0.0 | 195 | 0.0 | 89 | 0.0 | 90 |
bitm RankSelect101111 组合采样* | 0.4 | 120 | 0.4 | 122 | 0.4 | 77 | 0.4 | 77 | 0.4 | 32 | 0.4 | 33 |
succinct JacobsonRank* | 0.0 | 1508 | 0.0 | 1451 | 0.0 | 979 | 0.0 | 975 | 0.0 | 452 | 0.0 | 454 |
succinct Rank9* | 0.0 | 841 | 0.0 | 798 | 0.0 | 547 | 0.0 | 531 | 0.0 | 217 | 0.0 | 219 |
sucds Rank9Sel + hints* | 3.1 | 170 | 5.6 | 165 | 3.1 | 108 | 5.6 | 112 | 3.1 | 35 | 5.6 | 34 |
sucds Rank9Sel* | 0.0 | 534 | 0.0 | 456 | 0.0 | 272 | 0.0 | 273 | 0.0 | 107 | 0.0 | 109 |
sux SelectFixed1 | 12.5 | 93 | 22.5 | 61 | 12.5 | 62 | 22.5 | 50 | 12.5 | 17 | 22.5 | 15 |
sux SelectFixed2 | 15.6 | 41 | 28.1 | 37 | 15.6 | 34 | 28.1 | 34 | 15.6 | 10 | 28.1 | 12 |
vers RsVec* | 0.0 | 138 | 0.0 | 146 | 0.0 | 74 | 0.0 | 72 | 0.0 | 30 | 0.0 | 30 |
具有 99% 的 1 在向量末尾附近的对抗性分布的秩
位向量长度 | 1010 | 109 | 108 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 的百分比 | 50 | 10 | 50 | 10 | 50 | 10 | ||||||
空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | |
bitm RankSelect101111 | 3.1 | 23 | 3.1 | 23 | 3.1 | 21 | 3.1 | 21 | 3.1 | 7 | 3.1 | 7 |
succinct JacobsonRank | 22.8 | 52 | 22.8 | 52 | 18.8 | 44 | 18.8 | 44 | 22.7 | 12 | 22.7 | 12 |
succinct Rank9 | 25.0 | 19 | 25.0 | 18 | 25.0 | 17 | 25.0 | 17 | 25.0 | 6 | 25.0 | 7 |
sucds Rank9Sel | 25.0 | 19 | 25.0 | 18 | 25.0 | 17 | 25.0 | 17 | 25.0 | 6 | 25.0 | 7 |
vers RsVec | 4.7 | 26 | 5.3 | 26 | 4.7 | 24 | 5.3 | 24 | 4.7 | 6 | 5.3 | 6 |
具有 99% 的 1 在向量末尾附近的对抗性分布的选择 1
位向量长度 | 1010 | 109 | 108 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 的百分比 | 50 | 10 | 50 | 10 | 50 | 10 | ||||||
空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | |
bitm RankSelect101111 二分搜索* | 0.0 | 296 | 0.0 | 187 | 0.0 | 166 | 0.0 | 97 | 0.0 | 82 | 0.0 | 72 |
bitm RankSelect101111 组合采样* | 0.4 | 82 | 0.3 | 65 | 0.4 | 58 | 0.3 | 33 | 0.4 | 28 | 0.3 | 25 |
succinct JacobsonRank* | 0.0 | 1318 | 0.0 | 1045 | 0.0 | 819 | 0.0 | 477 | 0.0 | 415 | 0.0 | 369 |
succinct Rank9* | 0.0 | 715 | 0.0 | 571 | 0.0 | 477 | 0.0 | 232 | 0.0 | 195 | 0.0 | 168 |
sucds Rank9Sel + hints* | 3.1 | 159 | 0.6 | 115 | 3.1 | 97 | 0.6 | 46 | 3.1 | 26 | 0.6 | 21 |
sucds Rank9Sel* | 0.0 | 435 | 0.0 | 278 | 0.0 | 195 | 0.0 | 127 | 0.0 | 93 | 0.0 | 73 |
sux SelectFixed1 | 12.5 | 51 | 2.5 | 50 | 12.5 | 39 | 2.5 | 31 | 12.5 | 12 | 2.5 | 16 |
sux SelectFixed2 | 15.6 | 37 | 3.1 | 41 | 15.6 | 33 | 3.1 | 32 | 15.6 | 10 | 3.1 | 13 |
vers RsVec* | 0.0 | 142 | 0.0 | 87 | 0.0 | 77 | 0.0 | 39 | 0.0 | 31 | 0.0 | 30 |
具有 99% 的 1 在向量末尾附近的对抗性分布的选择 0
位向量长度 | 1010 | 109 | 108 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 的百分比 | 50 | 10 | 50 | 10 | 50 | 10 | ||||||
空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | 空间开销 [%] | 时间 / 查询 [ns] | |
bitm RankSelect101111 二分搜索* | 0.0 | 335 | 0.0 | 418 | 0.0 | 182 | 0.0 | 192 | 0.0 | 84 | 0.0 | 88 |
bitm RankSelect101111 组合采样* | 0.4 | 107 | 0.4 | 118 | 0.4 | 74 | 0.4 | 76 | 0.4 | 31 | 0.4 | 32 |
succinct JacobsonRank* | 0.0 | 1391 | 0.0 | 1427 | 0.0 | 894 | 0.0 | 963 | 0.0 | 437 | 0.0 | 449 |
succinct Rank9* | 0.0 | 737 | 0.0 | 808 | 0.0 | 490 | 0.0 | 519 | 0.0 | 207 | 0.0 | 216 |
sucds Rank9Sel + hints* | 3.1 | 160 | 5.6 | 164 | 3.1 | 98 | 5.6 | 110 | 3.1 | 27 | 5.6 | 30 |
sucds Rank9Sel* | 0.0 | 415 | 0.0 | 450 | 0.0 | 220 | 0.0 | 264 | 0.0 | 96 | 0.0 | 105 |
sux SelectFixed1 | 12.5 | 56 | 22.5 | 54 | 12.5 | 43 | 22.5 | 46 | 12.5 | 13 | 22.5 | 14 |
sux SelectFixed2 | 15.6 | 39 | 28.1 | 36 | 15.6 | 34 | 28.1 | 34 | 15.6 | 10 | 28.1 | 13 |
vers RsVec* | 0.0 | 132 | 0.0 | 146 | 0.0 | 70 | 0.0 | 71 | 0.0 | 30 | 0.0 | 31 |
依赖关系
~16–48MB
~784K SLoC