From cf91c1033bd3c6ed71e46ad93998daba178c307d Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Tue, 4 Mar 2025 09:35:43 -0600
Subject: [PATCH] Create two benches in backprop, one old size, one new size

---
 .../backprop/benches/backprop_bench.rs        | 87 ++++++++++---------
 1 file changed, 46 insertions(+), 41 deletions(-)

diff --git a/juno_samples/rodinia/backprop/benches/backprop_bench.rs b/juno_samples/rodinia/backprop/benches/backprop_bench.rs
index 98d582b5..492bce3b 100644
--- a/juno_samples/rodinia/backprop/benches/backprop_bench.rs
+++ b/juno_samples/rodinia/backprop/benches/backprop_bench.rs
@@ -9,7 +9,8 @@ juno_build::juno!("backprop");
 
 // We need this even though we don't use anything from the library because of
 // Rust build scripts only linking static libraries into the library, and not
-// into the benchmark binary. Ugh!
+// into the benchmark binary. Yuck!
+#[allow(unused_imports)]
 use juno_backprop::*;
 
 fn backprop_bench(c: &mut Criterion) {
@@ -18,52 +19,56 @@ fn backprop_bench(c: &mut Criterion) {
 
     let mut rng = StdRng::seed_from_u64(7);
 
-    let input_n = 33554432;
-    let hidden_n = 16;
-    let output_n = 1;
+    let mut bench = |name, input_n: usize| {
+        let hidden_n = 16;
+        let output_n = 1;
 
-    let mut input_vals = vec![0.0f32; input_n + 1];
-    input_vals[0] = 1.0;
+        let mut input_vals = vec![0.0f32; input_n + 1];
+        input_vals[0] = 1.0;
 
-    // For some reason the bpnn_randomize_row function used on target just sets it to 0.1
-    let target = vec![0.1f32; output_n + 1];
+        // For some reason the bpnn_randomize_row function used on target just sets it to 0.1
+        let target = vec![0.1f32; output_n + 1];
 
-    let input_weights = (0..(input_n + 1) * (hidden_n + 1))
-        .map(|_| rng.random::<f32>())
-        .collect::<Vec<_>>();
-    let hidden_weights = (0..(hidden_n + 1) * (output_n + 1))
-        .map(|_| rng.random::<f32>())
-        .collect::<Vec<_>>();
+        let input_weights = (0..(input_n + 1) * (hidden_n + 1))
+            .map(|_| rng.random::<f32>())
+            .collect::<Vec<_>>();
+        let hidden_weights = (0..(hidden_n + 1) * (output_n + 1))
+            .map(|_| rng.random::<f32>())
+            .collect::<Vec<_>>();
 
-    let input_prev_weights = vec![0.0; (input_n + 1) * (hidden_n + 1)];
-    let hidden_prev_weights = vec![0.0; (hidden_n + 1) * (output_n + 1)];
+        let input_prev_weights = vec![0.0; (input_n + 1) * (hidden_n + 1)];
+        let hidden_prev_weights = vec![0.0; (hidden_n + 1) * (output_n + 1)];
 
-    let mut r = runner!(backprop);
-    let input_vals = HerculesImmBox::from(&input_vals as &[f32]);
-    let target = HerculesImmBox::from(&target as &[f32]);
-    let mut input_weights = HerculesMutBox::from(input_weights.to_vec());
-    let mut hidden_weights = HerculesMutBox::from(hidden_weights.to_vec());
-    let mut input_prev_weights = HerculesMutBox::from(input_prev_weights.to_vec());
-    let mut hidden_prev_weights = HerculesMutBox::from(hidden_prev_weights.to_vec());
+        let mut r = runner!(backprop);
+        let input_vals = HerculesImmBox::from(&input_vals as &[f32]);
+        let target = HerculesImmBox::from(&target as &[f32]);
+        let mut input_weights = HerculesMutBox::from(input_weights.to_vec());
+        let mut hidden_weights = HerculesMutBox::from(hidden_weights.to_vec());
+        let mut input_prev_weights = HerculesMutBox::from(input_prev_weights.to_vec());
+        let mut hidden_prev_weights = HerculesMutBox::from(hidden_prev_weights.to_vec());
 
-    group.bench_function("backprop bench large", |b| {
-        b.iter(|| {
-            async_std::task::block_on(async {
-                r.run(
-                    input_n as u64,
-                    hidden_n as u64,
-                    output_n as u64,
-                    input_vals.to(),
-                    input_weights.to(),
-                    hidden_weights.to(),
-                    target.to(),
-                    input_prev_weights.to(),
-                    hidden_prev_weights.to(),
-                )
-                .await
-            });
-        })
-    });
+        group.bench_function(name, |b| {
+            b.iter(|| {
+                async_std::task::block_on(async {
+                    r.run(
+                        input_n as u64,
+                        hidden_n as u64,
+                        output_n as u64,
+                        input_vals.to(),
+                        input_weights.to(),
+                        hidden_weights.to(),
+                        target.to(),
+                        input_prev_weights.to(),
+                        hidden_prev_weights.to(),
+                    )
+                    .await
+                });
+            })
+        });
+    };
+
+    bench("backprop bench small", 65536);
+    bench("backprop bench large", 33554432);
 }
 
 criterion_group!(benches, backprop_bench);
-- 
GitLab