I've been testing simple loops in Rust because I'd like to know more about writing performant ones, here are some very simple examples:
#[inline]
fn rust_cheating(high: isize) -> isize {
let mut total = 0;
let mut i = 4;
let high = high * 2;
while i <= high {
total += i;
i += 4;
}
total
}
fn rust_iter1(n: isize) -> isize {
(1..=n).fold(0, |sum, item| {
if item%2 == 0 {
sum + item*2
} else {
sum
}
})
}
fn rust_iter2(n: isize) -> isize {
(1..=n)
.filter(|item| item%2==0)
.map(|item| item*2)
.fold(0, |sum, item| sum + item)
}
#[inline]
fn rust_iter3(n: isize) -> isize {
(4..=n*2).step_by(4).fold(0, |sum, item| sum + item)
}
Using criterion
, this is the benchmark
rust_cheating time: [179.32 us 179.44 us 179.61 us]
Found 13 outliers among 100 measurements (13.00%)
5 (5.00%) high mild
8 (8.00%) high severe
rust_iter1 time: [270.06 us 270.73 us 271.62 us]
Found 14 outliers among 100 measurements (14.00%)
4 (4.00%) high mild
10 (10.00%) high severe
rust_iter2 time: [270.07 us 270.76 us 271.62 us]
Found 11 outliers among 100 measurements (11.00%)
4 (4.00%) high mild
7 (7.00%) high severe
rust_iter3 time: [496.71 us 498.06 us 499.66 us]
Found 9 outliers among 100 measurements (9.00%)
8 (8.00%) high mild
1 (1.00%) high severe
Any tip on how I can improve? I am using n = 1_000_000
.