binaries!

This commit is contained in:
nora 2023-12-03 13:58:31 +01:00
parent 13ac9a70ce
commit 5dff963dc2
8 changed files with 286 additions and 69 deletions

View file

@ -4,27 +4,27 @@ benchmarks:
Ensure that `input.txt` contains many, many copies of the actual input, the actual input is way too small.
`cargo build --release && hyperfine 'target/release/day1 naive' 'target/release/day1 zero_alloc' 'target/release/day1 branchless' 'target/release/day1 vectorized'`
`cargo build --release && hyperfine 'target/release/day1 part2 naive' 'target/release/day1 part2 zero_alloc' 'target/release/day1 part2 branchless' 'target/release/day1 part2 vectorized'`
```
Benchmark 1: target/release/day1 naive
Time (mean ± σ): 4.735 s ± 0.061 s [User: 4.663 s, System: 0.072 s]
Range (min … max): 4.643 s … 4.798 s 10 runs
Benchmark 1: target/release/day1 part2 naive
Time (mean ± σ): 1.066 s ± 0.017 s [User: 1.048 s, System: 0.018 s]
Range (min … max): 1.049 s … 1.099 s 10 runs
Benchmark 2: target/release/day1 zero_alloc
Time (mean ± σ): 880.1 ms ± 10.7 ms [User: 807.9 ms, System: 72.1 ms]
Range (min … max): 858.3 ms … 891.4 ms 10 runs
Benchmark 2: target/release/day1 part2 zero_alloc
Time (mean ± σ): 212.7 ms ± 3.5 ms [User: 195.0 ms, System: 17.6 ms]
Range (min … max): 206.9 ms … 219.0 ms 14 runs
Benchmark 3: target/release/day1 branchless
Time (mean ± σ): 587.1 ms ± 4.4 ms [User: 515.0 ms, System: 72.1 ms]
Range (min … max): 578.3 ms … 594.1 ms 10 runs
Benchmark 3: target/release/day1 part2 branchless
Time (mean ± σ): 137.2 ms ± 1.8 ms [User: 117.5 ms, System: 19.6 ms]
Range (min … max): 133.5 ms … 142.2 ms 21 runs
Benchmark 4: target/release/day1 vectorized
Time (mean ± σ): 394.3 ms ± 5.2 ms [User: 322.2 ms, System: 71.9 ms]
Range (min … max): 386.4 ms … 400.0 ms 10 runs
Benchmark 4: target/release/day1 part2 vectorized
Time (mean ± σ): 87.9 ms ± 0.9 ms [User: 68.6 ms, System: 19.1 ms]
Range (min … max): 86.5 ms … 90.6 ms 33 runs
Summary
target/release/day1 vectorized ran
1.49 ± 0.02 times faster than target/release/day1 branchless
2.23 ± 0.04 times faster than target/release/day1 zero_alloc
12.01 ± 0.22 times faster than target/release/day1 naive
target/release/day1 part2 vectorized ran
1.56 ± 0.03 times faster than target/release/day1 part2 branchless
2.42 ± 0.05 times faster than target/release/day1 part2 zero_alloc
12.13 ± 0.22 times faster than target/release/day1 part2 naive
```

View file

@ -9,30 +9,7 @@ mod vectorized;
mod zero_alloc;
fn main() {
let kind = std::env::args().nth(1).unwrap_or("naive".into());
let mut input = std::hint::black_box(include_str!("../input.txt")).to_owned();
input.reserve(10); // enough to read u64
unsafe {
input
.as_mut_vec()
.spare_capacity_mut()
.fill(MaybeUninit::new(0))
};
match kind.as_str() {
"part1" => part1(&input),
"naive" => naive::part2(&input),
"zero_alloc" => zero_alloc::part2(&input),
"branchless" => unsafe { branchless::part2(&input) },
"no_lines" => unsafe { no_lines::part2(&input) },
"vectorized" => unsafe { vectorized::part2(&input) },
_ => {
eprintln!("error: invalid mode, must be part1,naive,zero_alloc,branchless");
std::process::exit(1);
}
};
helper::main::<Day1>(include_str!("../input.txt"));
}
struct Day1;

View file

@ -9,20 +9,7 @@ use nom::{
};
fn main() {
let kind = std::env::args().nth(1).unwrap_or("naive".into());
let input = std::hint::black_box(include_str!("../input.txt")).to_owned();
let result = match kind.as_str() {
"part1" => part1(&input),
"part2" => part2(&input),
_ => {
eprintln!("error: invalid mode, must be part1");
std::process::exit(1);
}
};
println!("result: {result}");
helper::main::<Day2>(include_str!("../input.txt"));
}
struct Day2;

View file

@ -3,20 +3,7 @@ use std::collections::HashMap;
use helper::{Day, Variants};
fn main() {
let kind = std::env::args().nth(1).unwrap_or("naive".into());
let input = std::hint::black_box(include_str!("../input.txt")).to_owned();
let result = match kind.as_str() {
"part1" => part1(&input),
"part2" => part2(&input),
_ => {
eprintln!("error: invalid mode, must be part1");
std::process::exit(1);
}
};
println!("result: {result}");
helper::main::<Day3>(include_str!("../input.txt"));
}
struct Day3;