#位向量 #基准测试 #紧凑 #序列 #伊利亚斯-范诺

应用 cseq_benchmark

用于基准测试紧凑序列和位图的程序

3个不稳定版本

0.1.1 2024年2月25日
0.1.0 2024年2月25日
0.0.1 2023年12月26日

压缩 中排名 167

每月下载量 47

MIT/Apache

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

基准测试结果

关于支持位向量秩和选择查询的结构基准测试的说明

  • 我们不区分 rank0rank1,因为每个都可以从另一个 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 的均匀分布的秩

位向量长度1010109108
1 的百分比501050105010
空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]
bitm RankSelect1011113.1233.1233.1213.1213.163.17
succinct JacobsonRank22.85222.85218.84518.84422.71222.713
succinct Rank925.01925.01925.01825.01725.0725.07
sucds Rank9Sel25.01925.01825.01725.01725.0725.07
vers RsVec4.7265.3264.7245.3244.765.36

位向量中 1 的均匀分布的选择 1

位向量长度1010109108
1 的百分比501050105010
空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]
bitm RankSelect101111 二分搜索*0.03950.03960.01770.01780.0870.087
bitm RankSelect101111 组合采样*0.4910.3920.4600.3610.4290.331
succinct JacobsonRank*0.014860.014490.09310.09310.04360.0437
succinct Rank9*0.08380.08060.05340.05160.02070.0208
sucds Rank9Sel + hints*3.11680.61443.11070.61093.1330.641
sucds Rank9Sel*0.05110.04480.02490.02520.01030.0105
sux SelectFixed112.5712.520412.5502.513812.5152.534
sux SelectFixed215.6393.19015.6333.15515.6103.119
vers RsVec*0.01510.01590.0820.01010.0320.038
* 使用相应的支持秩查询的结构;空间开销是额外的

位向量中 1 的均匀分布的选择 0

位向量长度1010109108
1 的百分比501050105010
空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]
bitm RankSelect101111 二分搜索*0.04170.04160.01930.01950.0890.090
bitm RankSelect101111 组合采样*0.41200.41220.4770.4770.4320.433
succinct JacobsonRank*0.015080.014510.09790.09750.04520.0454
succinct Rank9*0.08410.07980.05470.05310.02170.0219
sucds Rank9Sel + hints*3.11705.61653.11085.61123.1355.634
sucds Rank9Sel*0.05340.04560.02720.02730.01070.0109
sux SelectFixed112.59322.56112.56222.55012.51722.515
sux SelectFixed215.64128.13715.63428.13415.61028.112
vers RsVec*0.01380.01460.0740.0720.0300.030
* 使用相应的支持秩查询的结构;空间开销是额外的

具有 99% 的 1 在向量末尾附近的对抗性分布的秩

位向量长度1010109108
1 的百分比501050105010
空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]
bitm RankSelect1011113.1233.1233.1213.1213.173.17
succinct JacobsonRank22.85222.85218.84418.84422.71222.712
succinct Rank925.01925.01825.01725.01725.0625.07
sucds Rank9Sel25.01925.01825.01725.01725.0625.07
vers RsVec4.7265.3264.7245.3244.765.36

具有 99% 的 1 在向量末尾附近的对抗性分布的选择 1

位向量长度1010109108
1 的百分比501050105010
空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]
bitm RankSelect101111 二分搜索*0.02960.01870.01660.0970.0820.072
bitm RankSelect101111 组合采样*0.4820.3650.4580.3330.4280.325
succinct JacobsonRank*0.013180.010450.08190.04770.04150.0369
succinct Rank9*0.07150.05710.04770.02320.01950.0168
sucds Rank9Sel + hints*3.11590.61153.1970.6463.1260.621
sucds Rank9Sel*0.04350.02780.01950.01270.0930.073
sux SelectFixed112.5512.55012.5392.53112.5122.516
sux SelectFixed215.6373.14115.6333.13215.6103.113
vers RsVec*0.01420.0870.0770.0390.0310.030
* 使用相应的支持秩查询的结构;空间开销是额外的

具有 99% 的 1 在向量末尾附近的对抗性分布的选择 0

位向量长度1010109108
1 的百分比501050105010
空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]空间开销 [%]时间 / 查询 [ns]
bitm RankSelect101111 二分搜索*0.03350.04180.01820.01920.0840.088
bitm RankSelect101111 组合采样*0.41070.41180.4740.4760.4310.432
succinct JacobsonRank*0.013910.014270.08940.09630.04370.0449
succinct Rank9*0.07370.08080.04900.05190.02070.0216
sucds Rank9Sel + hints*3.11605.61643.1985.61103.1275.630
sucds Rank9Sel*0.04150.04500.02200.02640.0960.0105
sux SelectFixed112.55622.55412.54322.54612.51322.514
sux SelectFixed215.63928.13615.63428.13415.61028.113
vers RsVec*0.01320.01460.0700.0710.0300.031
* 使用相应的支持秩查询的结构;空间开销是额外的

依赖关系

~16–48MB
~784K SLoC