From f3ddf1d2e3b74be58efd5a434ad8f7a9f6711b20 Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Fri, 28 Feb 2025 19:42:08 -0600
Subject: [PATCH] Handle outputs

---
 juno_samples/rodinia/cfd/src/cpu_euler.sch    |  4 +-
 .../rodinia/cfd/src/cpu_pre_euler.sch         |  4 +-
 juno_samples/rodinia/cfd/src/lib.rs           | 39 ++++++++++++++-----
 3 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/juno_samples/rodinia/cfd/src/cpu_euler.sch b/juno_samples/rodinia/cfd/src/cpu_euler.sch
index 1244f80e..4cf320a6 100644
--- a/juno_samples/rodinia/cfd/src/cpu_euler.sch
+++ b/juno_samples/rodinia/cfd/src/cpu_euler.sch
@@ -14,8 +14,8 @@ simpl!(*);
 inline(compute_step_factor, compute_flux, compute_flux_contribution, time_step);
 delete-uncalled(*);
 simpl!(*);
-ip-sroa[false](*);
-sroa[false](*);
+ip-sroa[true](*);
+sroa[true](*);
 predication(*);
 const-inline(*);
 simpl!(*);
diff --git a/juno_samples/rodinia/cfd/src/cpu_pre_euler.sch b/juno_samples/rodinia/cfd/src/cpu_pre_euler.sch
index 6329c504..14eb6906 100644
--- a/juno_samples/rodinia/cfd/src/cpu_pre_euler.sch
+++ b/juno_samples/rodinia/cfd/src/cpu_pre_euler.sch
@@ -14,8 +14,8 @@ simpl!(*);
 inline(compute_step_factor, compute_flux, compute_flux_contributions, compute_flux_contribution, time_step);
 delete-uncalled(*);
 simpl!(*);
-ip-sroa[false](*);
-sroa[false](*);
+ip-sroa[true](*);
+sroa[true](*);
 predication(*);
 const-inline(*);
 simpl!(*);
diff --git a/juno_samples/rodinia/cfd/src/lib.rs b/juno_samples/rodinia/cfd/src/lib.rs
index 39384c0d..e054a605 100644
--- a/juno_samples/rodinia/cfd/src/lib.rs
+++ b/juno_samples/rodinia/cfd/src/lib.rs
@@ -55,8 +55,7 @@ fn run_euler(
     let ff_fc_momentum_z = HerculesImmBox::from(ff_fc_momentum_z.as_slice());
 
     let mut runner = runner!(euler);
-
-    HerculesMutBox::from(async_std::task::block_on(async {
+    let (density, x_m, y_m, z_m, energy) = async_std::task::block_on(async {
         runner
             .run(
                 nelr as u64,
@@ -72,9 +71,20 @@ fn run_euler(
                 ff_fc_momentum_z.to(),
             )
             .await
-    }))
-    .as_slice()
-    .to_vec()
+    });
+
+    let total = vec![];
+    let density = HerculesMutBox::from(density).as_slice();
+    let x_m = HerculesMutBox::from(x_m).as_slice();
+    let y_m = HerculesMutBox::from(y_m).as_slice();
+    let z_m = HerculesMutBox::from(z_m).as_slice();
+    let energy = HerculesMutBox::from(energy).as_slice();
+    total.extend(density.into_iter().map(|id: &mut f32| *id));
+    total.extend(x_m.into_iter().map(|id: &mut f32| *id));
+    total.extend(y_m.into_iter().map(|id: &mut f32| *id));
+    total.extend(z_m.into_iter().map(|id: &mut f32| *id));
+    total.extend(energy.into_iter().map(|id: &mut f32| *id));
+    total
 }
 
 fn run_pre_euler(
@@ -114,7 +124,7 @@ fn run_pre_euler(
 
     let variables = variables.to();
 
-    HerculesMutBox::from(async_std::task::block_on(async {
+    let (density, x_m, y_m, z_m, energy) = async_std::task::block_on(async {
         runner
             .run(
                 nelr as u64,
@@ -130,9 +140,20 @@ fn run_pre_euler(
                 ff_fc_momentum_z.to(),
             )
             .await
-    }))
-    .as_slice()
-    .to_vec()
+    });
+
+    let total = vec![];
+    let density = HerculesMutBox::from(density).as_slice();
+    let x_m = HerculesMutBox::from(x_m).as_slice();
+    let y_m = HerculesMutBox::from(y_m).as_slice();
+    let z_m = HerculesMutBox::from(z_m).as_slice();
+    let energy = HerculesMutBox::from(energy).as_slice();
+    total.extend(density.into_iter().map(|id: &mut f32| *id));
+    total.extend(x_m.into_iter().map(|id: &mut f32| *id));
+    total.extend(y_m.into_iter().map(|id: &mut f32| *id));
+    total.extend(z_m.into_iter().map(|id: &mut f32| *id));
+    total.extend(energy.into_iter().map(|id: &mut f32| *id));
+    total
 }
 
 fn compare_float(x: f32, y: f32) -> bool {
-- 
GitLab