Skip to content

Commit d6e7a91

Browse files
update benches
1 parent f50895e commit d6e7a91

File tree

3 files changed

+158
-22
lines changed

3 files changed

+158
-22
lines changed

Cargo.lock

Lines changed: 100 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ authors = ["Ragnar Groot Koerkamp", "Igor Martayan"]
2626
description = "A SIMD-accelerated library to compute random minimizers"
2727

2828
[dependencies]
29+
clap = { version = "4.5.47", features = ["derive"] }
2930
itertools = "0.14"
3031
packed-seq.workspace = true
3132
seq-hash.workspace = true

examples/bench.rs

Lines changed: 57 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,96 @@
1+
use clap::Parser;
12
use packed_seq::SeqVec;
23
use seq_hash::{NtHasher, SeqHasher};
4+
use simd_minimizers::private::sliding_min::Cache;
5+
6+
#[derive(clap::Parser)]
7+
struct Args {
8+
#[arg(short)]
9+
a: bool,
10+
#[arg(short)]
11+
b: bool,
12+
#[arg(short)]
13+
c: bool,
14+
#[arg(short)]
15+
d: bool,
16+
17+
#[arg(short)]
18+
n: Option<usize>,
19+
}
320

421
fn main() {
522
let k = 9;
623
let w = 19;
724

25+
let Args { a, b, c, d, n } = Args::parse();
26+
27+
let ns = n.map(|n| vec![n]).unwrap_or( vec![50, 150, 300, 1000, 10000, 100000]);
28+
829
eprintln!(" n fwd simd/scalar can simd/scalar");
9-
for n in [50, 100, 150, 500, 10000, 100000, 1000000] {
10-
let seq = packed_seq::PackedSeqVec::random(n);
30+
for n in ns {
1131
eprint!("{n:>7}: ");
1232

13-
let time = bench(w, n, &seq, &NtHasher::<false>::new(k), false, true);
14-
eprint!(" {:5.2}", time);
15-
let time = bench(w, n, &seq, &NtHasher::<false>::new(k), false, false);
16-
eprint!(" {:5.2}", time);
33+
if a {
34+
let time = bench(w, n, &NtHasher::<false>::new(k), false, true);
35+
eprint!(" {:5.2}", time);
36+
}
37+
if b {
38+
let time = bench(w, n, &NtHasher::<false>::new(k), false, false);
39+
eprint!(" {:5.2}", time);
40+
}
1741

18-
let time = bench(w, n, &seq, &NtHasher::<true>::new(k), true, true);
19-
eprint!(" {:5.2}", time);
20-
let time = bench(w, n, &seq, &NtHasher::<true>::new(k), true, false);
21-
eprint!(" {:5.2}", time);
42+
if c {
43+
let time = bench(w, n, &NtHasher::<true>::new(k), true, true);
44+
eprint!(" {:5.2}", time);
45+
}
46+
if d {
47+
let time = bench(w, n, &NtHasher::<true>::new(k), true, false);
48+
eprint!(" {:5.2}", time);
49+
}
2250
eprintln!();
2351
}
2452
}
2553

2654
fn bench(
2755
w: usize,
2856
n: usize,
29-
seq: &packed_seq::PackedSeqVec,
3057
hasher: &impl SeqHasher,
3158
canonical: bool,
3259
simd: bool,
3360
) -> f32 {
34-
let total = 100_000_000;
61+
let total = 150_000_000;
3562
let samples = total / n;
3663

3764
let poss = &mut vec![];
3865
let mut times = vec![];
66+
let mut cache = Cache::default();
3967
for _ in 0..samples {
68+
let seq = packed_seq::PackedSeqVec::random(n);
4069
poss.clear();
4170
let s = std::time::Instant::now();
4271
if simd {
4372
if canonical {
44-
simd_minimizers::canonical_minimizer_positions(seq.as_slice(), hasher, w, poss);
73+
simd_minimizers::canonical_minimizer_positions(seq.as_slice(), hasher, w, poss, &mut cache);
4574
} else {
46-
simd_minimizers::minimizer_positions(seq.as_slice(), hasher, w, poss);
75+
simd_minimizers::minimizer_positions(seq.as_slice(), hasher, w, poss, &mut cache);
4776
}
4877
} else {
4978
if canonical {
50-
simd_minimizers::scalar::canonical_minimizer_positions_scalar(seq.as_slice(), hasher, w, poss);
79+
simd_minimizers::scalar::canonical_minimizer_positions_scalar(
80+
seq.as_slice(),
81+
hasher,
82+
w,
83+
poss,
84+
&mut cache
85+
);
5186
} else {
52-
simd_minimizers::scalar::minimizer_positions_scalar(seq.as_slice(), hasher, w, poss);
87+
simd_minimizers::scalar::minimizer_positions_scalar(
88+
seq.as_slice(),
89+
hasher,
90+
w,
91+
poss,
92+
&mut cache
93+
);
5394
}
5495
}
5596
times.push(s.elapsed().as_nanos());

0 commit comments

Comments
 (0)