refactor: remove the software timing measures since they are not reliable
This commit is contained in:
parent
f162fe8734
commit
f944cce39d
1 changed files with 5 additions and 23 deletions
28
src/bench.rs
28
src/bench.rs
|
@ -6,15 +6,6 @@ use hal::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
macro_rules! display_results {
|
|
||||||
($name:expr, $rust_cycles:expr, $c_cycles:expr) => {
|
|
||||||
info!(
|
|
||||||
"Benchmark {}:\nRust\t: {}\nC\t: {}",
|
|
||||||
$name, $rust_cycles, $c_cycles
|
|
||||||
)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn bench(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
pub fn bench(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
||||||
bench_delay(pin, delay);
|
bench_delay(pin, delay);
|
||||||
|
@ -22,40 +13,31 @@ pub fn bench(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_delay(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
fn bench_delay(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
||||||
let short_sleep = time_exec(pin, || delay.delay_ms(20u32));
|
time_exec(pin, || delay.delay_ms(20u32));
|
||||||
let long_sleep = time_exec(pin, || delay.delay_ms(50u32));
|
time_exec(pin, || delay.delay_ms(50u32));
|
||||||
info!("Bench for short sleep: {}", short_sleep);
|
|
||||||
info!("Bench for long sleep: {}", long_sleep);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn time_exec<F>(pin: &mut Pin<Output<PushPull>>, mut f: F) -> u32
|
fn time_exec<F>(pin: &mut Pin<Output<PushPull>>, mut f: F)
|
||||||
where
|
where
|
||||||
F: FnMut(),
|
F: FnMut(),
|
||||||
{
|
{
|
||||||
info!("Running the requested function 50 times and returning the average");
|
info!("Running the requested function 50 times and returning the average");
|
||||||
const RUNS: u32 = 50;
|
const RUNS: u32 = 50;
|
||||||
let start = cortex_m::peripheral::SYST::get_current();
|
|
||||||
pin.set_high().expect("could not set pun to high");
|
pin.set_high().expect("could not set pun to high");
|
||||||
for _ in 0..RUNS {
|
for _ in 0..RUNS {
|
||||||
f();
|
f();
|
||||||
}
|
}
|
||||||
pin.set_low().expect("could not set pun to low");
|
pin.set_low().expect("could not set pun to low");
|
||||||
let end = cortex_m::peripheral::SYST::get_current();
|
|
||||||
// the timer counts down
|
|
||||||
info!("Start: {}\nEnd: {}", start, end);
|
|
||||||
let total = start.wrapping_sub(end);
|
|
||||||
total / RUNS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_crc(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
fn bench_crc(pin: &mut Pin<Output<PushPull>>, delay: &mut Delay) {
|
||||||
const DATA: &[u8] = b"hello world AAAAAAAAAAAAAAAAAAAAAAA";
|
const DATA: &[u8] = b"hello world AAAAAAAAAAAAAAAAAAAAAAA";
|
||||||
delay.delay_ms(50_u32);
|
delay.delay_ms(50_u32);
|
||||||
let native = time_exec(pin, || {
|
time_exec(pin, || {
|
||||||
Crc32Rust::checksum(DATA);
|
Crc32Rust::checksum(DATA);
|
||||||
});
|
});
|
||||||
delay.delay_ms(50_u32);
|
delay.delay_ms(50_u32);
|
||||||
let c_code = time_exec(pin, || {
|
time_exec(pin, || {
|
||||||
Crc32C::checksum(DATA);
|
Crc32C::checksum(DATA);
|
||||||
});
|
});
|
||||||
display_results!("CRC", native, c_code);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue