Avatar ·

Como medir corretamente o desempenho do código em Rust: benchmarking e profiling

Olá, colegas! Escrevo em Rust há cerca de seis meses e me deparei com um problema: não consigo medir adequadamente quanto tempo meu código leva para executar. Tentei usar std::time::Instant, mas os resultados variam de uma execução para outra, especialmente em funções pequenas. Por exemplo, quero comparar duas formas de somar um vetor: ```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()); } ``` No meu notebook (Ryzen 5, Linux), a primeira medição mostra 0.5-1.2 ms, a segunda 0.3-0.9 ms, e a ordem às vezes muda. Entendo que isso é devido a processos em segundo plano, cache, etc., mas como obter números estáveis?