From cf46a38bdedee77c69a1770aba372debd3c3e1f3 Mon Sep 17 00:00:00 2001 From: Martin Larralde <martin.larralde@embl.de> Date: Mon, 24 Jun 2024 13:45:00 +0200 Subject: [PATCH] Reorganize all benchmarks in `lightmotif` crate --- lightmotif/benches/encode.rs | 20 ++--- lightmotif/benches/score.rs | 145 +++++++++++++++++--------------- lightmotif/benches/stripe.rs | 20 ++--- lightmotif/benches/threshold.rs | 24 +++--- 4 files changed, 108 insertions(+), 101 deletions(-) diff --git a/lightmotif/benches/encode.rs b/lightmotif/benches/encode.rs index 147b048..d1f4b1a 100644 --- a/lightmotif/benches/encode.rs +++ b/lightmotif/benches/encode.rs @@ -23,34 +23,34 @@ mod dna { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { + fn sse2(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "neon")] #[bench] - fn bench_neon(bencher: &mut test::Bencher) { + fn neon(bencher: &mut test::Bencher) { let pli = Pipeline::neon().unwrap(); bench(bencher, &pli); } @@ -72,34 +72,34 @@ mod protein { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { + fn sse2(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "neon")] #[bench] - fn bench_neon(bencher: &mut test::Bencher) { + fn neon(bencher: &mut test::Bencher) { let pli = Pipeline::neon().unwrap(); bench(bencher, &pli); } diff --git a/lightmotif/benches/score.rs b/lightmotif/benches/score.rs index a1fee26..4f00440 100644 --- a/lightmotif/benches/score.rs +++ b/lightmotif/benches/score.rs @@ -46,41 +46,41 @@ mod dna { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench::<U32, _>(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { + fn sse2(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U16, _>(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2_32(bencher: &mut test::Bencher) { + fn sse2_32(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U32, _>(bencher, &pli); } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "neon")] #[bench] - fn bench_neon(bencher: &mut test::Bencher) { + fn neon(bencher: &mut test::Bencher) { let pli = Pipeline::neon().unwrap(); bench::<U16, _>(bencher, &pli); } @@ -112,41 +112,41 @@ mod dna { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench::<U32, _>(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { + fn sse2(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U16, _>(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2_32(bencher: &mut test::Bencher) { + fn sse2_32(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U32, _>(bencher, &pli); } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "neon")] #[bench] - fn bench_neon(bencher: &mut test::Bencher) { + fn neon(bencher: &mut test::Bencher) { let pli = Pipeline::neon().unwrap(); bench::<U16, _>(bencher, &pli); } @@ -160,68 +160,75 @@ mod protein { const SEQUENCE: &str = include_str!("abyB1.txt"); - fn bench<C: StrictlyPositive, P: Score<f32, Protein, C>>(bencher: &mut test::Bencher, pli: &P) { - let encoded = EncodedSequence::<Protein>::encode(SEQUENCE).unwrap(); - let mut striped = Pipeline::generic().stripe(encoded); - - let cm = CountMatrix::<Protein>::from_sequences([ - EncodedSequence::encode("SFKELGFDSLTAVELRNRLAAAT").unwrap(), - EncodedSequence::encode("AFKELGFDSLAAIQLRNRLLADV").unwrap(), - EncodedSequence::encode("PSRRLGFDSLTAVELRNQLAAST").unwrap(), - EncodedSequence::encode("AFREIGFDSLTAVELRNRLGAAA").unwrap(), - EncodedSequence::encode("SLMEEGLDSLAAVELGGTLQRDT").unwrap(), - EncodedSequence::encode("GFFDLGMDSLMAVELRRRIEQGV").unwrap(), - ]) - .unwrap(); - let pbm = cm.to_freq(0.1); - let pssm = pbm.to_scoring(None); - - striped.configure(&pssm); - let mut scores = StripedScores::empty(); - scores.resize(striped.matrix().rows(), striped.len()); - bencher.bytes = SEQUENCE.len() as u64; - bencher.iter(|| { - test::black_box(pli.score_into(&pssm, &striped, &mut scores)); - }); - } + mod f32 { + use super::*; - #[bench] - fn bench_generic(bencher: &mut test::Bencher) { - let pli = Pipeline::generic(); - bench::<U32, _>(bencher, &pli); - } + fn bench<C: StrictlyPositive, P: Score<f32, Protein, C>>( + bencher: &mut test::Bencher, + pli: &P, + ) { + let encoded = EncodedSequence::<Protein>::encode(SEQUENCE).unwrap(); + let mut striped = Pipeline::generic().stripe(encoded); - #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { - let pli = Pipeline::dispatch(); - bench(bencher, &pli); - } + let cm = CountMatrix::<Protein>::from_sequences([ + EncodedSequence::encode("SFKELGFDSLTAVELRNRLAAAT").unwrap(), + EncodedSequence::encode("AFKELGFDSLAAIQLRNRLLADV").unwrap(), + EncodedSequence::encode("PSRRLGFDSLTAVELRNQLAAST").unwrap(), + EncodedSequence::encode("AFREIGFDSLTAVELRNRLGAAA").unwrap(), + EncodedSequence::encode("SLMEEGLDSLAAVELGGTLQRDT").unwrap(), + EncodedSequence::encode("GFFDLGMDSLMAVELRRRIEQGV").unwrap(), + ]) + .unwrap(); + let pbm = cm.to_freq(0.1); + let pssm = pbm.to_scoring(None); - #[cfg(target_feature = "sse2")] - #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { - let pli = Pipeline::sse2().unwrap(); - bench::<U16, _>(bencher, &pli); - } + striped.configure(&pssm); + let mut scores = StripedScores::empty(); + scores.resize(striped.matrix().rows(), striped.len()); + bencher.bytes = SEQUENCE.len() as u64; + bencher.iter(|| { + test::black_box(pli.score_into(&pssm, &striped, &mut scores)); + }); + } - #[cfg(target_feature = "sse2")] - #[bench] - fn bench_sse2_32(bencher: &mut test::Bencher) { - let pli = Pipeline::sse2().unwrap(); - bench::<U32, _>(bencher, &pli); - } + #[bench] + fn generic(bencher: &mut test::Bencher) { + let pli = Pipeline::generic(); + bench::<U32, _>(bencher, &pli); + } - #[cfg(target_feature = "avx2")] - #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { - let pli = Pipeline::avx2().unwrap(); - bench(bencher, &pli); - } + #[bench] + fn dispatch(bencher: &mut test::Bencher) { + let pli = Pipeline::dispatch(); + bench(bencher, &pli); + } + + #[cfg(target_feature = "sse2")] + #[bench] + fn sse2(bencher: &mut test::Bencher) { + let pli = Pipeline::sse2().unwrap(); + bench::<U16, _>(bencher, &pli); + } + + #[cfg(target_feature = "sse2")] + #[bench] + fn sse2_32(bencher: &mut test::Bencher) { + let pli = Pipeline::sse2().unwrap(); + bench::<U32, _>(bencher, &pli); + } - #[cfg(target_feature = "neon")] - #[bench] - fn bench_neon(bencher: &mut test::Bencher) { - let pli = Pipeline::neon().unwrap(); - bench::<U16, _>(bencher, &pli); + #[cfg(target_feature = "avx2")] + #[bench] + fn avx2(bencher: &mut test::Bencher) { + let pli = Pipeline::avx2().unwrap(); + bench(bencher, &pli); + } + + #[cfg(target_feature = "neon")] + #[bench] + fn neon(bencher: &mut test::Bencher) { + let pli = Pipeline::neon().unwrap(); + bench::<U16, _>(bencher, &pli); + } } } diff --git a/lightmotif/benches/stripe.rs b/lightmotif/benches/stripe.rs index 61c055c..3ab0a21 100644 --- a/lightmotif/benches/stripe.rs +++ b/lightmotif/benches/stripe.rs @@ -28,34 +28,34 @@ mod dna { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } // #[cfg(target_feature = "sse2")] // #[bench] - // fn bench_sse2(bencher: &mut test::Bencher) { + // fn sse2(bencher: &mut test::Bencher) { // let pli = Pipeline::sse2().unwrap(); // bench(bencher, &pli); // } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } // #[cfg(target_feature = "neon")] // #[bench] - // fn bench_neon(bencher: &mut test::Bencher) { + // fn neon(bencher: &mut test::Bencher) { // let pli = Pipeline::neon().unwrap(); // bench(bencher, &pli); // } @@ -80,34 +80,34 @@ mod protein { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } // #[cfg(target_feature = "sse2")] // #[bench] - // fn bench_sse2(bencher: &mut test::Bencher) { + // fn sse2(bencher: &mut test::Bencher) { // let pli = Pipeline::sse2().unwrap(); // bench(bencher, &pli); // } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } // #[cfg(target_feature = "neon")] // #[bench] - // fn bench_neon(bencher: &mut test::Bencher) { + // fn neon(bencher: &mut test::Bencher) { // let pli = Pipeline::neon().unwrap(); // bench(bencher, &pli); // } diff --git a/lightmotif/benches/threshold.rs b/lightmotif/benches/threshold.rs index 1e530e2..923c84b 100644 --- a/lightmotif/benches/threshold.rs +++ b/lightmotif/benches/threshold.rs @@ -47,41 +47,41 @@ mod f32 { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench::<U32, _>(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { + fn sse2(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U16, _>(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2_32(bencher: &mut test::Bencher) { + fn sse2_32(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U32, _>(bencher, &pli); } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "neon")] #[bench] - fn bench_neon(bencher: &mut test::Bencher) { + fn neon(bencher: &mut test::Bencher) { let pli = Pipeline::neon().unwrap(); bench::<U16, _>(bencher, &pli); } @@ -128,41 +128,41 @@ mod u8 { } #[bench] - fn bench_generic(bencher: &mut test::Bencher) { + fn generic(bencher: &mut test::Bencher) { let pli = Pipeline::generic(); bench::<U32, _>(bencher, &pli); } #[bench] - fn bench_dispatch(bencher: &mut test::Bencher) { + fn dispatch(bencher: &mut test::Bencher) { let pli = Pipeline::dispatch(); bench(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2(bencher: &mut test::Bencher) { + fn sse2(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U16, _>(bencher, &pli); } #[cfg(target_feature = "sse2")] #[bench] - fn bench_sse2_32(bencher: &mut test::Bencher) { + fn sse2_32(bencher: &mut test::Bencher) { let pli = Pipeline::sse2().unwrap(); bench::<U32, _>(bencher, &pli); } #[cfg(target_feature = "avx2")] #[bench] - fn bench_avx2(bencher: &mut test::Bencher) { + fn avx2(bencher: &mut test::Bencher) { let pli = Pipeline::avx2().unwrap(); bench(bencher, &pli); } #[cfg(target_feature = "neon")] #[bench] - fn bench_neon(bencher: &mut test::Bencher) { + fn neon(bencher: &mut test::Bencher) { let pli = Pipeline::neon().unwrap(); bench::<U16, _>(bencher, &pli); } -- GitLab