From 7c66673ddcd5a166d88f00758a0c42ff64b0c25e Mon Sep 17 00:00:00 2001 From: Russel Arbore <russel.jma@gmail.com> Date: Thu, 27 Feb 2025 09:58:20 -0600 Subject: [PATCH] BFS needs const inlining --- juno_samples/rodinia/backprop/src/cpu.sch | 1 - juno_samples/rodinia/bfs/build.rs | 2 ++ juno_samples/rodinia/bfs/src/bfs.jn | 8 +++---- juno_samples/rodinia/bfs/src/cpu.sch | 26 +++++++++++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 juno_samples/rodinia/bfs/src/cpu.sch diff --git a/juno_samples/rodinia/backprop/src/cpu.sch b/juno_samples/rodinia/backprop/src/cpu.sch index b6e69a27..fa3dccf1 100644 --- a/juno_samples/rodinia/backprop/src/cpu.sch +++ b/juno_samples/rodinia/backprop/src/cpu.sch @@ -22,4 +22,3 @@ fixpoint { } gcm(*); - diff --git a/juno_samples/rodinia/bfs/build.rs b/juno_samples/rodinia/bfs/build.rs index c19bae5d..bb8f9ff5 100644 --- a/juno_samples/rodinia/bfs/build.rs +++ b/juno_samples/rodinia/bfs/build.rs @@ -13,6 +13,8 @@ fn main() { JunoCompiler::new() .file_in_src("bfs.jn") .unwrap() + .schedule_in_src("cpu.sch") + .unwrap() .build() .unwrap(); } diff --git a/juno_samples/rodinia/bfs/src/bfs.jn b/juno_samples/rodinia/bfs/src/bfs.jn index cf2ea086..2e61f1a0 100644 --- a/juno_samples/rodinia/bfs/src/bfs.jn +++ b/juno_samples/rodinia/bfs/src/bfs.jn @@ -13,8 +13,8 @@ fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n] let visited: bool[n]; visited[source as u64] = true; - let cost: i32[n]; - for i in 0..n { + @cost let cost: i32[n]; + @cost_init for i in 0..n { cost[i] = -1; } cost[source as u64] = 0; @@ -25,7 +25,7 @@ fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n] while !stop { stop = true; - for i in 0..n { + @loop1 for i in 0..n { if mask[i] { mask[i] = false; @@ -42,7 +42,7 @@ fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n] } } - for i in 0..n { + @loop2 for i in 0..n { if updated[i] { mask[i] = true; visited[i] = true; diff --git a/juno_samples/rodinia/bfs/src/cpu.sch b/juno_samples/rodinia/bfs/src/cpu.sch new file mode 100644 index 00000000..1a94ea55 --- /dev/null +++ b/juno_samples/rodinia/bfs/src/cpu.sch @@ -0,0 +1,26 @@ +macro simpl!(X) { + ccp(X); + simplify-cfg(X); + lift-dc-math(X); + gvn(X); + phi-elim(X); + dce(X); + infer-schedules(X); +} + +phi-elim(bfs); +no-memset(bfs@cost); +outline(bfs@cost_init); +let loop1 = outline(bfs@loop1); +let loop2 = outline(bfs@loop2); + +simpl!(*); +predication(*); + +fixpoint { + forkify(*); + fork-guard-elim(*); + fork-coalesce(*); +} + +gcm(*); -- GitLab