diff --git a/juno_samples/rodinia/backprop/benches/backprop_bench.rs b/juno_samples/rodinia/backprop/benches/backprop_bench.rs
index 17bdf6a7766362e79f3536c6cecf4b5282a160c0..492bce3bd7117598009993f040d567c71c78db99 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 = 65536;
-    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", |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);
diff --git a/juno_samples/rodinia/bfs/benches/bfs_bench.rs b/juno_samples/rodinia/bfs/benches/bfs_bench.rs
index bf39a0fce738dc5c100da3b6f0d85eaa2c9420bd..f87b4e09bc2c3707b1436ad21b2f8f8407033e52 100644
--- a/juno_samples/rodinia/bfs/benches/bfs_bench.rs
+++ b/juno_samples/rodinia/bfs/benches/bfs_bench.rs
@@ -9,28 +9,41 @@ use juno_bfs::graph_parser::*;
 
 fn bfs_bench(c: &mut Criterion) {
     let mut group = c.benchmark_group("bfs bench");
+    group.sample_size(10);
 
     let mut r = runner!(bfs);
 
-    let input = "data/graph4096.txt";
-    let (nodes, source, edges) = parse_graph(input.into());
-    let n = nodes.len() as u64;
-    let m = edges.len() as u64;
-    let nodes = HerculesImmBox::from(&nodes as &[Node]);
-    let edges = HerculesImmBox::from(&edges as &[u32]);
     group.bench_function("bfs bench 4096", |b| {
+        let input = "data/graph4096.txt";
+        let (nodes, source, edges) = parse_graph(input.into()).unwrap();
+        let n = nodes.len() as u64;
+        let m = edges.len() as u64;
+        let nodes = HerculesImmBox::from(&nodes as &[Node]);
+        let edges = HerculesImmBox::from(&edges as &[u32]);
         b.iter(|| {
             async_std::task::block_on(async { r.run(n, m, nodes.to(), source, edges.to()).await });
         })
     });
 
-    let input = "data/graph65536.txt";
-    let (nodes, source, edges) = parse_graph(input.into());
-    let n = nodes.len() as u64;
-    let m = edges.len() as u64;
-    let nodes = HerculesImmBox::from(&nodes as &[Node]);
-    let edges = HerculesImmBox::from(&edges as &[u32]);
     group.bench_function("bfs bench 65536", |b| {
+        let input = "data/graph65536.txt";
+        let (nodes, source, edges) = parse_graph(input.into()).unwrap();
+        let n = nodes.len() as u64;
+        let m = edges.len() as u64;
+        let nodes = HerculesImmBox::from(&nodes as &[Node]);
+        let edges = HerculesImmBox::from(&edges as &[u32]);
+        b.iter(|| {
+            async_std::task::block_on(async { r.run(n, m, nodes.to(), source, edges.to()).await });
+        })
+    });
+
+    group.bench_function("bfs bench 64M", |b| {
+        let input = "/scratch/aaronjc4/rodinia_3.1/data/bfs/graph64M.txt";
+        let (nodes, source, edges) = parse_graph(input.into()).expect("PANIC: Couldn't read input file for 64M benchmark. Currently, this benchmark uses a hard-coded path, so it can only be run on the lab machines.");
+        let n = nodes.len() as u64;
+        let m = edges.len() as u64;
+        let nodes = HerculesImmBox::from(&nodes as &[Node]);
+        let edges = HerculesImmBox::from(&edges as &[u32]);
         b.iter(|| {
             async_std::task::block_on(async { r.run(n, m, nodes.to(), source, edges.to()).await });
         })
diff --git a/juno_samples/rodinia/bfs/src/graph_parser.rs b/juno_samples/rodinia/bfs/src/graph_parser.rs
index fecd2a3ed86c23aa64511febb5fd7a5ece8fe0f7..f761d8ea47f428a0965cbf08c27f17270a5fa0d1 100644
--- a/juno_samples/rodinia/bfs/src/graph_parser.rs
+++ b/juno_samples/rodinia/bfs/src/graph_parser.rs
@@ -11,16 +11,18 @@ pub struct Node {
     pub num_edges: u32,
 }
 
-pub fn parse_graph(file: String) -> (Vec<Node>, u32, Vec<u32>) {
-    let mut file = File::open(file).expect("Error opening input file");
+pub fn parse_graph(file: String) -> Result<(Vec<Node>, u32, Vec<u32>), String> {
+    let mut file = File::open(file).map_err(|err| format!("Error opening input file: {}", err))?;
     let mut contents = String::new();
     file.read_to_string(&mut contents)
-        .expect("Error reading input file");
+        .map_err(|err| format!("Error reading input file: {}", err))?;
 
     let mut parser = nom::combinator::all_consuming(graph_parser);
-    let (_, result) = parser.parse(&contents).expect("Parser error");
+    let (_, result) = parser
+        .parse(&contents)
+        .map_err(|err| format!("Parsing error: {}", err))?;
 
-    result
+    Ok(result)
 }
 
 fn graph_parser<'a>(text: &'a str) -> nom::IResult<&'a str, (Vec<Node>, u32, Vec<u32>)> {
diff --git a/juno_samples/rodinia/bfs/src/lib.rs b/juno_samples/rodinia/bfs/src/lib.rs
index f64035409552c5b223b54bc0be8e8bf512698d30..e48dfe2235014c3bdb26337d2bfdd9d9e104c8a4 100644
--- a/juno_samples/rodinia/bfs/src/lib.rs
+++ b/juno_samples/rodinia/bfs/src/lib.rs
@@ -36,7 +36,7 @@ fn run_bfs(nodes: &[Node], source: u32, edges: &[u32]) -> Vec<i32> {
 pub fn bfs_harness(args: BFSInputs) {
     let BFSInputs { input } = args;
 
-    let (nodes, source, edges) = parse_graph(input);
+    let (nodes, source, edges) = parse_graph(input).unwrap();
 
     let costs_juno = run_bfs(&nodes, source, &edges);
     let costs_ref = rust_bfs::bfs(&nodes, source, &edges);
diff --git a/juno_samples/rodinia/cfd/benches/cfd_bench.rs b/juno_samples/rodinia/cfd/benches/cfd_bench.rs
index 5fc73db9d369be5ef9695f37ad1f39122facf991..aa6d772724238d13b6464398b07b67e287716085 100644
--- a/juno_samples/rodinia/cfd/benches/cfd_bench.rs
+++ b/juno_samples/rodinia/cfd/benches/cfd_bench.rs
@@ -10,150 +10,163 @@ use juno_cfd::*;
 
 fn cfd_bench(c: &mut Criterion) {
     let mut group = c.benchmark_group("cfd bench");
+    group.sample_size(10);
 
-    let mut r = runner!(euler);
-    let data_file = "data/fvcorr.domn.097K".to_string();
-    let iterations = 1;
-    let block_size = 16;
-    let FarFieldConditions {
-        ff_variable,
-        ff_fc_momentum_x,
-        ff_fc_momentum_y,
-        ff_fc_momentum_z,
-        ff_fc_density_energy,
-    } = set_far_field_conditions();
-    let GeometryData {
-        nelr,
-        areas,
-        elements_surrounding_elements,
-        normals,
-    } = read_domain_geometry(data_file, block_size);
-    let mut variables = initialize_variables(nelr, &ff_variable);
+    let mut euler_bench = |name, data_file, iterations| {
+        group.bench_function(name, |b| {
+            let mut r = runner!(euler);
+            let block_size = 16;
+            let FarFieldConditions {
+                ff_variable,
+                ff_fc_momentum_x,
+                ff_fc_momentum_y,
+                ff_fc_momentum_z,
+                ff_fc_density_energy,
+            } = set_far_field_conditions();
+            let GeometryData {
+                nelr,
+                areas,
+                elements_surrounding_elements,
+                normals,
+            } = read_domain_geometry(data_file, block_size).expect("PANIC: Couldn't read input for CFD benchmark. Currently, the path for the largest CFD benchmark is hard-coded, so it can only be run on the lab machines.");
+            let mut variables = initialize_variables(nelr, &ff_variable);
 
-    let mut v_density = HerculesMutBox::from(variables.density.as_mut_slice());
-    let mut v_momentum_x = HerculesMutBox::from(variables.momentum.x.as_mut_slice());
-    let mut v_momentum_y = HerculesMutBox::from(variables.momentum.y.as_mut_slice());
-    let mut v_momentum_z = HerculesMutBox::from(variables.momentum.z.as_mut_slice());
-    let mut v_energy = HerculesMutBox::from(variables.energy.as_mut_slice());
+            let mut v_density = HerculesMutBox::from(variables.density.as_mut_slice());
+            let mut v_momentum_x = HerculesMutBox::from(variables.momentum.x.as_mut_slice());
+            let mut v_momentum_y = HerculesMutBox::from(variables.momentum.y.as_mut_slice());
+            let mut v_momentum_z = HerculesMutBox::from(variables.momentum.z.as_mut_slice());
+            let mut v_energy = HerculesMutBox::from(variables.energy.as_mut_slice());
 
-    let areas = HerculesImmBox::from(areas.as_slice());
-    let elements_surrounding_elements =
-        HerculesImmBox::from(elements_surrounding_elements.as_slice());
+            let areas = HerculesImmBox::from(areas.as_slice());
+            let elements_surrounding_elements =
+                HerculesImmBox::from(elements_surrounding_elements.as_slice());
 
-    let normals_x = HerculesImmBox::from(normals.x.as_slice());
-    let normals_y = HerculesImmBox::from(normals.y.as_slice());
-    let normals_z = HerculesImmBox::from(normals.z.as_slice());
+            let normals_x = HerculesImmBox::from(normals.x.as_slice());
+            let normals_y = HerculesImmBox::from(normals.y.as_slice());
+            let normals_z = HerculesImmBox::from(normals.z.as_slice());
 
-    group.bench_function("cfd bench euler", |b| {
-        b.iter(|| {
-            async_std::task::block_on(async {
-                r.run(
-                    nelr as u64,
-                    iterations as u64,
-                    v_density.to(),
-                    v_momentum_x.to(),
-                    v_momentum_y.to(),
-                    v_momentum_z.to(),
-                    v_energy.to(),
-                    areas.to(),
-                    elements_surrounding_elements.to(),
-                    normals_x.to(),
-                    normals_y.to(),
-                    normals_z.to(),
-                    ff_variable.density,
-                    ff_variable.momentum.x,
-                    ff_variable.momentum.y,
-                    ff_variable.momentum.z,
-                    ff_variable.energy,
-                    ff_fc_density_energy.x,
-                    ff_fc_density_energy.y,
-                    ff_fc_density_energy.z,
-                    ff_fc_momentum_x.x,
-                    ff_fc_momentum_x.y,
-                    ff_fc_momentum_x.z,
-                    ff_fc_momentum_y.x,
-                    ff_fc_momentum_y.y,
-                    ff_fc_momentum_y.z,
-                    ff_fc_momentum_z.x,
-                    ff_fc_momentum_z.y,
-                    ff_fc_momentum_z.z,
-                )
-                .await
-            });
-        })
-    });
+            b.iter(|| {
+                async_std::task::block_on(async {
+                    r.run(
+                        nelr as u64,
+                        iterations as u64,
+                        v_density.to(),
+                        v_momentum_x.to(),
+                        v_momentum_y.to(),
+                        v_momentum_z.to(),
+                        v_energy.to(),
+                        areas.to(),
+                        elements_surrounding_elements.to(),
+                        normals_x.to(),
+                        normals_y.to(),
+                        normals_z.to(),
+                        ff_variable.density,
+                        ff_variable.momentum.x,
+                        ff_variable.momentum.y,
+                        ff_variable.momentum.z,
+                        ff_variable.energy,
+                        ff_fc_density_energy.x,
+                        ff_fc_density_energy.y,
+                        ff_fc_density_energy.z,
+                        ff_fc_momentum_x.x,
+                        ff_fc_momentum_x.y,
+                        ff_fc_momentum_x.z,
+                        ff_fc_momentum_y.x,
+                        ff_fc_momentum_y.y,
+                        ff_fc_momentum_y.z,
+                        ff_fc_momentum_z.x,
+                        ff_fc_momentum_z.y,
+                        ff_fc_momentum_z.z,
+                    )
+                    .await
+                });
+            })
+        });
+    };
+    euler_bench("cfd bench euler small", "data/fvcorr.domn.097K", 1);
+    euler_bench(
+        "cfd bench euler large",
+        "/scratch/aaronjc4/rodinia_3.1/data/cfd/missile.domn.0.2M",
+        150,
+    );
 
-    let mut r = runner!(pre_euler);
-    let data_file = "data/fvcorr.domn.097K".to_string();
-    let iterations = 1;
-    let block_size = 16;
-    let FarFieldConditions {
-        ff_variable,
-        ff_fc_momentum_x,
-        ff_fc_momentum_y,
-        ff_fc_momentum_z,
-        ff_fc_density_energy,
-    } = set_far_field_conditions();
-    let GeometryData {
-        nelr,
-        areas,
-        elements_surrounding_elements,
-        normals,
-    } = read_domain_geometry(data_file, block_size);
-    let mut variables = initialize_variables(nelr, &ff_variable);
+    let mut pre_euler_bench = |name, data_file, iterations| {
+        group.bench_function(name, |b| {
+            let mut r = runner!(pre_euler);
+            let block_size = 16;
+            let FarFieldConditions {
+                ff_variable,
+                ff_fc_momentum_x,
+                ff_fc_momentum_y,
+                ff_fc_momentum_z,
+                ff_fc_density_energy,
+            } = set_far_field_conditions();
+            let GeometryData {
+                nelr,
+                areas,
+                elements_surrounding_elements,
+                normals,
+            } = read_domain_geometry(data_file, block_size).expect("PANIC: Couldn't read input for CFD benchmark. Currently, the path for the largest CFD benchmark is hard-coded, so it can only be run on the lab machines.");
+            let mut variables = initialize_variables(nelr, &ff_variable);
 
-    let mut v_density = HerculesMutBox::from(variables.density.as_mut_slice());
-    let mut v_momentum_x = HerculesMutBox::from(variables.momentum.x.as_mut_slice());
-    let mut v_momentum_y = HerculesMutBox::from(variables.momentum.y.as_mut_slice());
-    let mut v_momentum_z = HerculesMutBox::from(variables.momentum.z.as_mut_slice());
-    let mut v_energy = HerculesMutBox::from(variables.energy.as_mut_slice());
+            let mut v_density = HerculesMutBox::from(variables.density.as_mut_slice());
+            let mut v_momentum_x = HerculesMutBox::from(variables.momentum.x.as_mut_slice());
+            let mut v_momentum_y = HerculesMutBox::from(variables.momentum.y.as_mut_slice());
+            let mut v_momentum_z = HerculesMutBox::from(variables.momentum.z.as_mut_slice());
+            let mut v_energy = HerculesMutBox::from(variables.energy.as_mut_slice());
 
-    let areas = HerculesImmBox::from(areas.as_slice());
-    let elements_surrounding_elements =
-        HerculesImmBox::from(elements_surrounding_elements.as_slice());
+            let areas = HerculesImmBox::from(areas.as_slice());
+            let elements_surrounding_elements =
+                HerculesImmBox::from(elements_surrounding_elements.as_slice());
 
-    let normals_x = HerculesImmBox::from(normals.x.as_slice());
-    let normals_y = HerculesImmBox::from(normals.y.as_slice());
-    let normals_z = HerculesImmBox::from(normals.z.as_slice());
+            let normals_x = HerculesImmBox::from(normals.x.as_slice());
+            let normals_y = HerculesImmBox::from(normals.y.as_slice());
+            let normals_z = HerculesImmBox::from(normals.z.as_slice());
 
-    group.bench_function("cfd bench pre-euler", |b| {
-        b.iter(|| {
-            async_std::task::block_on(async {
-                r.run(
-                    nelr as u64,
-                    iterations as u64,
-                    v_density.to(),
-                    v_momentum_x.to(),
-                    v_momentum_y.to(),
-                    v_momentum_z.to(),
-                    v_energy.to(),
-                    areas.to(),
-                    elements_surrounding_elements.to(),
-                    normals_x.to(),
-                    normals_y.to(),
-                    normals_z.to(),
-                    ff_variable.density,
-                    ff_variable.momentum.x,
-                    ff_variable.momentum.y,
-                    ff_variable.momentum.z,
-                    ff_variable.energy,
-                    ff_fc_density_energy.x,
-                    ff_fc_density_energy.y,
-                    ff_fc_density_energy.z,
-                    ff_fc_momentum_x.x,
-                    ff_fc_momentum_x.y,
-                    ff_fc_momentum_x.z,
-                    ff_fc_momentum_y.x,
-                    ff_fc_momentum_y.y,
-                    ff_fc_momentum_y.z,
-                    ff_fc_momentum_z.x,
-                    ff_fc_momentum_z.y,
-                    ff_fc_momentum_z.z,
-                )
-                .await
-            });
-        })
-    });
+            b.iter(|| {
+                async_std::task::block_on(async {
+                    r.run(
+                        nelr as u64,
+                        iterations as u64,
+                        v_density.to(),
+                        v_momentum_x.to(),
+                        v_momentum_y.to(),
+                        v_momentum_z.to(),
+                        v_energy.to(),
+                        areas.to(),
+                        elements_surrounding_elements.to(),
+                        normals_x.to(),
+                        normals_y.to(),
+                        normals_z.to(),
+                        ff_variable.density,
+                        ff_variable.momentum.x,
+                        ff_variable.momentum.y,
+                        ff_variable.momentum.z,
+                        ff_variable.energy,
+                        ff_fc_density_energy.x,
+                        ff_fc_density_energy.y,
+                        ff_fc_density_energy.z,
+                        ff_fc_momentum_x.x,
+                        ff_fc_momentum_x.y,
+                        ff_fc_momentum_x.z,
+                        ff_fc_momentum_y.x,
+                        ff_fc_momentum_y.y,
+                        ff_fc_momentum_y.z,
+                        ff_fc_momentum_z.x,
+                        ff_fc_momentum_z.y,
+                        ff_fc_momentum_z.z,
+                    )
+                    .await
+                });
+            })
+        });
+    };
+    pre_euler_bench("cfd bench pre-euler small", "data/fvcorr.domn.097K", 1);
+    pre_euler_bench(
+        "cfd bench pre-euler large",
+        "/scratch/aaronjc4/rodinia_3.1/data/cfd/missile.domn.0.2M",
+        150,
+    );
 }
 
 criterion_group!(benches, cfd_bench);
diff --git a/juno_samples/rodinia/cfd/src/lib.rs b/juno_samples/rodinia/cfd/src/lib.rs
index a9800ed0d373bddcc678714f81537210236ed412..3b1e21e62f78f2dd1017d908f7b0f73a38712d7f 100644
--- a/juno_samples/rodinia/cfd/src/lib.rs
+++ b/juno_samples/rodinia/cfd/src/lib.rs
@@ -237,7 +237,7 @@ pub fn cfd_harness(args: CFDInputs) {
         areas,
         elements_surrounding_elements,
         normals,
-    } = read_domain_geometry(data_file, block_size);
+    } = read_domain_geometry(data_file, block_size).unwrap();
 
     let variables = initialize_variables(nelr, &ff_variable);
     println!("Running CFD with nelr = {}.", nelr);
diff --git a/juno_samples/rodinia/cfd/src/setup.rs b/juno_samples/rodinia/cfd/src/setup.rs
index 0da0025162c919d2e420d6bbb0e69f98d83e52ff..669810d601a9ccfcbff7b4d06cace3ab8623d0de 100644
--- a/juno_samples/rodinia/cfd/src/setup.rs
+++ b/juno_samples/rodinia/cfd/src/setup.rs
@@ -29,7 +29,7 @@ pub struct AlignedSlice<T> {
 
 impl<T> Debug for AlignedSlice<T>
 where
-    T: Debug
+    T: Debug,
 {
     fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
         write!(f, "{:?}", self.as_slice())
@@ -127,7 +127,15 @@ pub struct FarFieldConditions {
 }
 
 pub fn set_far_field_conditions() -> FarFieldConditions {
-    let mut ff_variable = Variable { density: 0.0, momentum: Float3 { x: 0.0, y: 0.0, z: 0.0 }, energy: 0.0 };
+    let mut ff_variable = Variable {
+        density: 0.0,
+        momentum: Float3 {
+            x: 0.0,
+            y: 0.0,
+            z: 0.0,
+        },
+        energy: 0.0,
+    };
 
     let angle_of_attack = std::f32::consts::PI / 180.0 * deg_angle_of_attack;
 
@@ -186,19 +194,21 @@ pub struct GeometryData {
     pub normals: Normals,
 }
 
-pub fn read_domain_geometry<P>(path: P, block_size: usize) -> GeometryData
+pub fn read_domain_geometry<P>(path: P, block_size: usize) -> Result<GeometryData, String>
 where
     P: AsRef<Path>,
 {
-    let mut file = File::open(path).expect("Error opening input file");
+    let mut file = File::open(path).map_err(|err| format!("Error opening input file: {}", err))?;
     let mut contents = String::new();
     file.read_to_string(&mut contents)
-        .expect("Error reading input file");
+        .map_err(|err| format!("Error reading input file: {}", err))?;
 
     let mut parser = nom::combinator::all_consuming(|s| cfd_parser(block_size, s));
-    let (_, result) = parser.parse(&contents).expect("Parser error");
+    let (_, result) = parser
+        .parse(&contents)
+        .map_err(|err| format!("Parser error: {}", err))?;
 
-    result
+    Ok(result)
 }
 
 fn cfd_parser<'a>(block_size: usize, text: &'a str) -> nom::IResult<&'a str, GeometryData> {
@@ -240,17 +250,17 @@ fn cfd_parser<'a>(block_size: usize, text: &'a str) -> nom::IResult<&'a str, Geo
             let val = i32::from_str(val).unwrap();
             let val = if neg { -val } else { val };
             elements_surrounding_elements[i + j * nelr] = if val < 0 { -1 } else { val } - 1; // it's coming in with Fortran numbering
-                
+
             let t = nom::character::complete::multispace0(text)?.0;
             let (t, val) = nom::number::complete::float(t)?;
             text = t;
             normals.x[i + j * nelr] = -val;
-                
+
             let t = nom::character::complete::multispace0(text)?.0;
             let (t, val) = nom::number::complete::float(t)?;
             text = t;
             normals.y[i + j * nelr] = -val;
-                
+
             let t = nom::character::complete::multispace0(text)?.0;
             let (t, val) = nom::number::complete::float(t)?;
             text = t;
diff --git a/juno_samples/rodinia/srad/benches/srad_bench.rs b/juno_samples/rodinia/srad/benches/srad_bench.rs
index 6af13aae5d9093bd59cf6299dfa64ac3e73209a6..bf0e4ad4e954aa2d0035eefec26d9233ca805550 100644
--- a/juno_samples/rodinia/srad/benches/srad_bench.rs
+++ b/juno_samples/rodinia/srad/benches/srad_bench.rs
@@ -1,7 +1,7 @@
 #![feature(concat_idents)]
 use criterion::{criterion_group, criterion_main, Criterion};
 
-use hercules_rt::{runner, HerculesImmBox, HerculesImmBoxTo, HerculesMutBox, HerculesMutBoxTo};
+use hercules_rt::{runner, HerculesMutBox, HerculesMutBoxTo};
 
 juno_build::juno!("srad");
 
@@ -9,36 +9,39 @@ use juno_srad::*;
 
 fn srad_bench(c: &mut Criterion) {
     let mut group = c.benchmark_group("srad bench");
+    group.sample_size(10);
 
-    let mut r = runner!(srad);
-    let niter = 100;
-    let lambda = 0.5;
-    let nrows = 512;
-    let ncols = 512;
-    let image = "data/image.pgm".to_string();
-    let Image {
-        image: image_ori,
-        max,
-        rows: image_ori_rows,
-        cols: image_ori_cols,
-    } = read_graphics(image);
-    let image = resize(&image_ori, image_ori_rows, image_ori_cols, nrows, ncols);
-    let mut image_h = HerculesMutBox::from(image.clone());
-    group.bench_function("srad bench", |b| {
-        b.iter(|| {
-            async_std::task::block_on(async {
-                r.run(
-                    nrows as u64,
-                    ncols as u64,
-                    niter as u64,
-                    image_h.to(),
-                    max,
-                    lambda,
-                )
-                .await
-            });
-        })
-    });
+    let mut bench = |name, niter, nrows, ncols| {
+        let mut r = runner!(srad);
+        let lambda = 0.5;
+        let image = "data/image.pgm".to_string();
+        let Image {
+            image: image_ori,
+            max,
+            rows: image_ori_rows,
+            cols: image_ori_cols,
+        } = read_graphics(image);
+        let image = resize(&image_ori, image_ori_rows, image_ori_cols, nrows, ncols);
+        let mut image_h = HerculesMutBox::from(image.clone());
+        group.bench_function(name, |b| {
+            b.iter(|| {
+                async_std::task::block_on(async {
+                    r.run(
+                        nrows as u64,
+                        ncols as u64,
+                        niter as u64,
+                        image_h.to(),
+                        max,
+                        lambda,
+                    )
+                    .await
+                });
+            })
+        });
+    };
+
+    bench("srad bench small", 100, 512, 512);
+    bench("srad bench large", 30, 2048, 2048);
 }
 
 criterion_group!(benches, srad_bench);