simdutf8
simdutf8 copied to clipboard
Question. Speed on large inputs.
Why do I get only about 12 GB/s with this manual benchmark?
use std::time::Instant;
use simdutf8::basic::from_utf8;
fn main() {
let mut vec: Vec<u8> = Vec::new();
for i in 0..1024 * 1024 * 10 {
vec.push((i % 10) as u8 + b'0');
}
// println!("{:?}", vec);
println!("{}", from_utf8(b"I \xE2\x9D\xA4\xEF\xB8\x8F UTF-8!").unwrap());
let start = Instant::now();
let decoded = from_utf8(vec.as_slice()).unwrap();
// let decoded = std::str::from_utf8(vec.as_slice()).unwrap();
println!("length: {}", decoded.len());
let mut elapsed = Instant::now().duration_since(start);
println!("Elapsed time: {:?}", elapsed);
let giga = 1024 * 1024 * 1024;
println!("Speed: {:?} GB/s", 1000000.0 / (elapsed.as_micros() as f64) * (vec.len() as f64) / (giga as f64));
}
When I run the benchmark (slightly patched), I get about 80 GB/s.
1-latin/1048576 time: [12.134 µs 12.144 µs 12.155 µs]
thrpt: [80.339 GiB/s 80.416 GiB/s 80.481 GiB/s]
cargo 1.65.0 (4bc8f24d3 2022-10-20) and Apple M1 Pro