|
1 | | -use activations::{definitions, reference}; |
2 | | -use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion, BatchSize}; |
| 1 | +use activations::{definitions, reference, Program}; |
| 2 | +use criterion::{black_box, criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion}; |
3 | 3 |
|
4 | | -pub fn criterion_benchmark(c: &mut Criterion) { |
5 | | - let mut group = c.benchmark_group("relu"); |
| 4 | +fn crit(c: &mut Criterion, name: &str, r: impl Fn(f32) -> f32, prog: &Program) { |
| 5 | + let mut group = c.benchmark_group(name); |
6 | 6 | for size in [1i32, 32, 256, 1024, 8192].iter() { |
7 | 7 | group.throughput(criterion::Throughput::Elements(*size as u64)); |
8 | 8 | group.bench_with_input(BenchmarkId::new("Reference", size), size, |b, size| { |
9 | 9 | b.iter_batched( |
10 | 10 | || vec![1.0f32; *size as usize], |
11 | 11 | |v| { |
12 | 12 | for x in v { |
13 | | - reference::relu(black_box(x)); |
| 13 | + r(black_box(x)); |
14 | 14 | } |
15 | 15 | }, |
16 | | - BatchSize::LargeInput |
17 | | - ) |
| 16 | + BatchSize::LargeInput, |
| 17 | + ) |
18 | 18 | }); |
19 | | - let d = definitions::relu(); |
20 | 19 | group.bench_with_input(BenchmarkId::new("VM", size), size, |b, size| { |
21 | 20 | b.iter_batched( |
22 | 21 | || vec![1.0f32; *size as usize], |
23 | 22 | |v| { |
24 | 23 | for x in v { |
25 | | - d.compute(black_box(x)); |
| 24 | + prog.compute(black_box(x)); |
26 | 25 | } |
27 | 26 | }, |
28 | | - BatchSize::LargeInput |
29 | | - ) |
| 27 | + BatchSize::LargeInput, |
| 28 | + ) |
30 | 29 | }); |
31 | 30 | } |
32 | 31 | } |
33 | 32 |
|
| 33 | +fn criterion_benchmark(c: &mut Criterion) { |
| 34 | + crit(c, "relu", reference::relu, &definitions::relu()); |
| 35 | + crit(c, "hardswish", reference::hardswish, &definitions::hardswish()); |
| 36 | + crit(c, "exp2f", reference::exp2f, &definitions::exp2f()); |
| 37 | + crit(c, "sigmoid", reference::sigmoid, &definitions::sigmoid()); |
| 38 | +} |
| 39 | + |
34 | 40 | criterion_group!(benches, criterion_benchmark); |
35 | 41 | criterion_main!(benches); |
0 commit comments