#排序 #并行 #排序器

crumsort

针对均匀分布优化的crumsort并行实现

1 个不稳定版本

0.1.0 2022年10月24日

1080算法

33 每月下载量
用于 forma-render

Apache-2.0

51KB
1K SLoC

crumsort-rs

crumsort的并行Rust移植版。

此移植的目标是擅长排序分布良好的数据,因此它不是一个完全的1:1副本。

临时注意事项

由于在最初编写时存在一些约束,因此存在一些限制

  • 比crumsort更快地排序均匀数据,但严重倾斜的分布较慢(缺少crumsort_analyze函数)
  • 旨在作为排序大型(u64u128)整数的解决方案
  • 仅排序Copy + Default数据,作为限制使用unsafe的一种方式
  • 缺少未并行化的版本(数据需要实现Send
  • 缺少*_by*_by_key排序替代方案(数据需要实现Ord

请随时通过提交拉取请求来提交对这些领域的改进。

与并行pdqsort(Rayon)的基准测试

所有基准测试都在M1 Pro上的bench示例上运行

cargo run --release --example bench

均匀分布的随机u32

长度 算法 吞吐量 改进
212 pdqsort 32.15Mkeys/s 0.00%
212 crumsort 38.70Mkeys/s 20.39%
216 pdqsort 129.96Mkeys/s 0.00%
216 crumsort 176.95Mkeys/s 36.16%
220 pdqsort 226.31Mkeys/s 0.00%
220 crumsort 368.09Mkeys/s 62.65%
224 pdqsort 227.80Mkeys/s 0.00%
224 crumsort 399.89Mkeys/s 75.54%

均匀分布的随机u64

长度 算法 吞吐量 改进
212 pdqsort 33.18Mkeys/s 0.00%
212 crumsort 40.79Mkeys/s 22.91%
216 pdqsort 151.24Mkeys/s 0.00%
216 crumsort 237.48Mkeys/s 57.02%
220 pdqsort 218.64Mkeys/s 0.00%
220 crumsort 364.79Mkeys/s 66.85%
224 pdqsort 226.83Mkeys/s 0.00%
224 crumsort 385.42Mkeys/s 69.92%

注意

这不是一个官方支持的Google产品。

依赖项

~1.5MB
~25K SLoC