8 个版本
0.4.3 | 2024年6月29日 |
---|---|
0.4.2 | 2024年1月30日 |
0.4.1 | 2022年4月27日 |
0.3.1 | 2021年5月18日 |
0.1.0 |
|
#121 in 文本处理
19,792 每月下载量
255KB
1.5K SLoC
切片切片
基于 Wojciech Muła 展示的工作,使用 SIMD 加速的单模式子串搜索的快速实现。对于快速的多模式子串搜索算法,请参阅 aho-corasick
包。
示例
use sliceslice::x86::DynamicAvx2Searcher;
fn main() {
let searcher = unsafe { DynamicAvx2Searcher::new(b"ipsum".to_owned().into()) };
assert!(unsafe {
searcher.search_in(b"Lorem ipsum dolor sit amet, consectetur adipiscing elit")
});
assert!(!unsafe {
searcher.search_in(b"foo bar baz qux quux quuz corge grault garply waldo fred")
});
}
基准测试
我们在一个 i386
基准测试 上运行,该测试在一个 HP EliteDesk 800 G2 Tower PC 上,使用 Intel Core i7-6700 处理器 @ 3.40GHz,16GB RAM 和 512GB 硬盘空间,运行 Ubuntu 20.04.1 LTS,gcc 9.3.0 和 Rust 1.46.0。
库 | 版本 | 功能 | 短搜索字符串 | 长搜索字符串 |
---|---|---|---|---|
std | 1.46.0 | String::find |
[335.32 ms 335.56 ms 335.83 ms] | [344.62 ms 345.01 ms 345.52 ms] |
memmem | 0.1.1 | TwoWaySearcher::search_in |
[87.927 ms 88.029 ms 88.151 ms] | [401.40 ms 401.59 ms 401.81 ms] |
twoway | 0.2.1 | find_bytes |
[274.60 ms 274.82 ms 275.07 ms] | [146.32 ms 146.44 ms 146.58 ms] |
sse4-strstr¹ | 0.0.0-9308a59 | avx2_strstr_v2 |
[75.389 ms 75.515 ms 75.682 ms] | [38.521 ms 38.579 ms 38.649 ms] |
切片切片 | 0.2.0 | DynamicAvx2Searcher::search_in |
[79.283 ms 79.416 ms 79.596 ms] | [35.135 ms 35.181 ms 35.247 ms] |
¹ sse4-strstr 不是内存安全的,因为它可以读取搜索字符串的末尾之外,请参阅 sliceslice 的文档,其中更详细地讨论了此问题。
许可
在 MIT 许可证下发布。有关详细信息,请参阅 LICENSE 文件。