From dfff5eecca3f6a133fb4c82f29d221a4f406ed13 Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Thu, 27 Feb 2025 14:20:22 -0600 Subject: [PATCH] srad cpu schedule --- juno_samples/rodinia/srad/build.rs | 2 ++ juno_samples/rodinia/srad/src/cpu.sch | 35 +++++++++++++++++++++++++++ juno_samples/rodinia/srad/src/srad.jn | 13 +++++----- 3 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 juno_samples/rodinia/srad/src/cpu.sch diff --git a/juno_samples/rodinia/srad/build.rs b/juno_samples/rodinia/srad/build.rs index 36ba6120..5e1f78f7 100644 --- a/juno_samples/rodinia/srad/build.rs +++ b/juno_samples/rodinia/srad/build.rs @@ -13,6 +13,8 @@ fn main() { JunoCompiler::new() .file_in_src("srad.jn") .unwrap() + .schedule_in_src("cpu.sch") + .unwrap() .build() .unwrap(); } diff --git a/juno_samples/rodinia/srad/src/cpu.sch b/juno_samples/rodinia/srad/src/cpu.sch new file mode 100644 index 00000000..1a81ddad --- /dev/null +++ b/juno_samples/rodinia/srad/src/cpu.sch @@ -0,0 +1,35 @@ +macro simpl!(X) { + ccp(X); + simplify-cfg(X); + lift-dc-math(X); + gvn(X); + phi-elim(X); + dce(X); + infer-schedules(X); +} + +phi-elim(*); +let loop1 = outline(srad@loop1); +let loop2 = outline(srad@loop2); +let loop3 = outline(srad@loop3); +simpl!(*); +const-inline(*); +crc(*); +slf(*); +write-predication(*); +simpl!(*); +predication(*); +simpl!(*); +predication(*); +simpl!(*); +fixpoint { + forkify(*); + fork-guard-elim(*); + fork-coalesce(*); +} +simpl!(*); + +fork-split(*); +unforkify(*); + +gcm(*); diff --git a/juno_samples/rodinia/srad/src/srad.jn b/juno_samples/rodinia/srad/src/srad.jn index 5eea647c..3e016a99 100644 --- a/juno_samples/rodinia/srad/src/srad.jn +++ b/juno_samples/rodinia/srad/src/srad.jn @@ -38,7 +38,7 @@ fn srad<nrows, ncols: usize>( // These loops should really be interchanged, but they aren't in the // Rodinia source (though they are in the HPVM source) - for i in 0..nrows { + @loop1 for i in 0..nrows { for j in 0..ncols { let tmp = image[j, i]; sum += tmp; @@ -57,7 +57,7 @@ fn srad<nrows, ncols: usize>( let c : f32[ncols, nrows]; - for j in 0..ncols { + @loop2 for j in 0..ncols { for i in 0..nrows { let Jc = image[j, i]; dN[j, i] = image[j, iN[i] as u64] - Jc; @@ -75,14 +75,15 @@ fn srad<nrows, ncols: usize>( let qsqr = num / (den * den); let den = (qsqr - q0sqr) / (q0sqr * (1 + q0sqr)); - c[j, i] = 1.0 / (1.0 + den); + let val = 1.0 / (1.0 + den); - if c[j, i] < 0 { c[j, i] = 0; } - else if c[j, i] > 1 { c[j, i] = 1; } + if val < 0 { c[j, i] = 0; } + else if val > 1 { c[j, i] = 1; } + else { c[j, i] = val; } } } - for j in 0..ncols { + @loop3 for j in 0..ncols { for i in 0..nrows { let cN = c[j, i]; let cS = c[j, iS[i] as u64]; -- GitLab