1 个不稳定版本
0.1.0 | 2022年10月24日 |
---|
1080 在 算法 中
33 每月下载量
用于 forma-render
51KB
1K SLoC
crumsort-rs
crumsort的并行Rust移植版。
此移植的目标是擅长排序分布良好的数据,因此它不是一个完全的1:1副本。
临时注意事项
由于在最初编写时存在一些约束,因此存在一些限制
- 比crumsort更快地排序均匀数据,但严重倾斜的分布较慢(缺少
crumsort_analyze
函数) - 旨在作为排序大型(
u64或
u128
)整数的解决方案 - 仅排序
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