Cómo medir correctamente el rendimiento del código en Rust: benchmarking y profiling
¡Hola, colegas! Llevo unos seis meses escribiendo en Rust y me encontré con un problema: no puedo medir correctamente cuánto tiempo tarda mi código. Intenté usar std::time::Instant, pero los resultados varían de una ejecución a otra, especialmente en funciones pequeñas. Por ejemplo, quiero comparar dos formas de sumar un vector:
```rust
use std::time::Instant;
fn sum_for(v: &[i32]) -> i32 {
let mut sum = 0;
for x in v { sum += x; }
sum
}
fn sum_iter(v: &[i32]) -> i32 {
v.iter().sum()
}
fn main() {
let data = vec![1; 1_000_000];
let start = Instant::now();
let _ = sum_for(&data);
println!("for: {:?}", start.elapsed());
let start = Instant::now();
let _ = sum_iter(&data);
println!("iter: {:?}", start.elapsed());
}
```
En mi portátil (Ryzen 5, Linux) la primera medición muestra 0.5-1.2 ms, la segunda 0.3-0.9 ms, y a veces el orden cambia. Entiendo que esto se debe a procesos en segundo plano, caché, etc., pero ¿cómo obtener cifras estables?