mirror of
https://github.com/Noratrieb/advent-of-code.git
synced 2026-01-16 10:35:02 +01:00
binaries!
This commit is contained in:
parent
13ac9a70ce
commit
5dff963dc2
8 changed files with 286 additions and 69 deletions
|
|
@ -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
|
||||
```
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue