19个版本
0.6.8 | 2024年4月19日 |
---|---|
0.6.7 | 2023年10月24日 |
0.6.3 | 2022年6月1日 |
0.6.2 | 2020年12月1日 |
0.1.4 | 2016年10月4日 |
#16 在 算法 中
1,526,933 每月下载量
在 1,446 个crate中 (88 个直接使用)
43KB
939 行
bytecount
真正快速地计算字节
此实现使用了Joshua Landau的“hyperscreamingcount”算法,比其他任何方法都更快。newlinebench仓库对旧版本的此仓库有进一步基准测试。
要在您的crate中使用bytecount,如果您有cargo-edit,只需在以crate根目录为当前路径的终端中输入cargo add bytecount
即可。否则,您可以手动编辑您的Cargo.toml
,将以下内容添加到您的[dependencies]
部分:
在您的crate根目录(lib.rs
或main.rs
,具体取决于您是编写库还是应用程序),添加extern crate bytecount;
。现在您可以使用以下方式简单地使用bytecount::count
extern crate bytecount;
fn main() {
let mytext = "some potentially large text, perhaps read from disk?";
let spaces = bytecount::count(mytext.as_bytes(), b' ');
..
}
bytecount支持两个功能来利用现代CPU的功能,从而大大加快计数。要允许您的用户使用它们,请将以下内容添加到您的Cargo.toml
[features]
runtime-dispatch-simd = ["bytecount/runtime-dispatch-simd"]
generic-simd = ["bytecount/generic-simd"]
第一个,runtime-dispatch-simd
,允许在运行时检测SIMD功能,这允许使用SSE2和AVX2代码路径,但不能与no_std
一起使用。
您的用户可以使用以下方法使用运行时调度编译
cargo build --release --features runtime-dispatch-simd
第二个是 generic-simd
,它使用 std::simd
和 #![feature(portable_simd)]
来提供一个快速的、与架构无关的 SIMD 代码路径,但需要运行在 nightly 版本上。
您的用户可以使用以下方法编译此代码路径:
cargo build --release --features generic-simd
为更具体的架构构建也会提高性能。您可以使用以下方法实现:
RUSTFLAGS="-C target-cpu=native" cargo build --release
标量算法的详细解释见 此处。
注意:版本 0.4.0 及之前版本与 Rust 1.20.0 兼容。版本 0.5.0 至 0.6.0 需要 Rust 1.26 或更高版本,并且至少需要 1.27.2 才能使用 SIMD。从 0.6.0 版本开始需要 Rust 1.32.0 或更高版本。
许可证
根据您的意愿,许可协议如下: