From 211800d825b2427df63ccccafad182b3b1ecf26a Mon Sep 17 00:00:00 2001 From: Aaron Councilman <aaronjc4@illinois.edu> Date: Mon, 17 Feb 2025 18:54:08 -0600 Subject: [PATCH] Avoid extra memory in cfd --- juno_samples/rodinia/cfd/src/euler.jn | 7 +++---- juno_samples/rodinia/cfd/src/main.rs | 12 ++++++++++-- juno_samples/rodinia/cfd/src/pre_euler.jn | 9 ++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/juno_samples/rodinia/cfd/src/euler.jn b/juno_samples/rodinia/cfd/src/euler.jn index 5645823a..984d5a93 100644 --- a/juno_samples/rodinia/cfd/src/euler.jn +++ b/juno_samples/rodinia/cfd/src/euler.jn @@ -231,11 +231,10 @@ const RK : usize = 3; fn time_step<nelr: usize>( j: usize, old_variables: Variables::<nelr>, + variables: Variables::<nelr>, step_factors: f32[nelr], fluxes: Variables::<nelr>, ) -> Variables::<nelr> { - let variables : Variables::<nelr>; - for i = 0 to nelr { let factor = step_factors[i] / (RK + 1 - j) as f32; @@ -245,7 +244,7 @@ fn time_step<nelr: usize>( variables.momentum.z[i] = old_variables.momentum.z[i] + factor * fluxes.momentum.z[i]; variables.energy[i] = old_variables.energy[i] + factor * fluxes.energy[i]; } - + return variables; } @@ -286,7 +285,7 @@ fn euler<nelr: usize>( ff_flux_contribution_momentum_x, ff_flux_contribution_momentum_y, ff_flux_contribution_momentum_z); - variables = time_step::<nelr>(j, old_variables, step_factors, fluxes); + variables = time_step::<nelr>(j, old_variables, variables, step_factors, fluxes); } } diff --git a/juno_samples/rodinia/cfd/src/main.rs b/juno_samples/rodinia/cfd/src/main.rs index 0f2ae3b8..2251548f 100644 --- a/juno_samples/rodinia/cfd/src/main.rs +++ b/juno_samples/rodinia/cfd/src/main.rs @@ -34,7 +34,7 @@ fn run_euler( ff_fc_momentum_y: &Float3, ff_fc_momentum_z: &Float3, ) -> Vec<f32> { - let variables = HerculesImmBox::from(variables.as_slice()); + let mut variables = HerculesMutBox::from(variables); let areas = HerculesImmBox::from(areas); let elements_surrounding_elements = HerculesImmBox::from(elements_surrounding_elements); let normals = HerculesImmBox::from(normals); @@ -87,7 +87,7 @@ fn run_pre_euler( ff_fc_momentum_y: &Float3, ff_fc_momentum_z: &Float3, ) -> Vec<f32> { - let variables = HerculesImmBox::from(variables.as_slice()); + let mut variables = HerculesMutBox::from(variables); let areas = HerculesImmBox::from(areas); let elements_surrounding_elements = HerculesImmBox::from(elements_surrounding_elements); let normals = HerculesImmBox::from(normals); @@ -223,6 +223,14 @@ fn cfd_harness(args: CFDInputs) { }; if !compare_floats(&res_juno, &res_rust) { + let len = res_juno.len(); + let diff = res_juno + .into_iter() + .zip(res_rust.into_iter()) + .enumerate() + .filter(|(_, (x, y))| !compare_float(*x, *y)) + .collect::<Vec<_>>(); + println!("Diff at {} of {}", diff.len(), len); panic!("Mismatch in results"); } } diff --git a/juno_samples/rodinia/cfd/src/pre_euler.jn b/juno_samples/rodinia/cfd/src/pre_euler.jn index d5499c96..22f40b57 100644 --- a/juno_samples/rodinia/cfd/src/pre_euler.jn +++ b/juno_samples/rodinia/cfd/src/pre_euler.jn @@ -310,21 +310,20 @@ const RK : usize = 3; fn time_step<nelr: usize>( j: usize, old_variables: Variables::<nelr>, + variables: Variables::<nelr>, step_factors: f32[nelr], fluxes: Variables::<nelr>, ) -> Variables::<nelr> { - let variables : Variables::<nelr>; - for i = 0 to nelr { let factor = step_factors[i] / (RK + 1 - j) as f32; variables.density[i] = old_variables.density[i] + factor * fluxes.density[i]; - variables.energy[i] = old_variables.energy[i] + factor * fluxes.energy[i]; variables.momentum.x[i] = old_variables.momentum.x[i] + factor * fluxes.momentum.x[i]; variables.momentum.y[i] = old_variables.momentum.y[i] + factor * fluxes.momentum.y[i]; variables.momentum.z[i] = old_variables.momentum.z[i] + factor * fluxes.momentum.z[i]; + variables.energy[i] = old_variables.energy[i] + factor * fluxes.energy[i]; } - + return variables; } @@ -367,7 +366,7 @@ fn pre_euler<nelr: usize>( fc_momentum_y, fc_momentum_z, fc_density_energy, ff_fc_density_energy, ff_fc_momentum_x, ff_fc_momentum_y, ff_fc_momentum_z); - variables = time_step::<nelr>(j, old_variables, step_factors, fluxes); + variables = time_step::<nelr>(j, old_variables, variables, step_factors, fluxes); } } -- GitLab