From 3b1aa5d426c2c43032abef5a0505fc935da2eadc Mon Sep 17 00:00:00 2001
From: Russel Arbore <russel.jma@gmail.com>
Date: Sun, 2 Mar 2025 21:19:31 -0600
Subject: [PATCH] parallelize main loop in bfs

---
 juno_samples/rodinia/bfs/src/cpu.sch | 13 +++++++++++--
 juno_samples/rodinia/bfs/src/lib.rs  |  1 +
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/juno_samples/rodinia/bfs/src/cpu.sch b/juno_samples/rodinia/bfs/src/cpu.sch
index ae67fdd9..f94c473f 100644
--- a/juno_samples/rodinia/bfs/src/cpu.sch
+++ b/juno_samples/rodinia/bfs/src/cpu.sch
@@ -10,13 +10,15 @@ macro simpl!(X) {
 
 phi-elim(bfs);
 no-memset(bfs@cost);
-outline(bfs@cost_init);
+let init = outline(bfs@cost_init);
 let loop1 = outline(bfs@loop1);
 let loop2 = outline(bfs@loop2);
+parallel-reduce(loop1);
 
 simpl!(*);
 predication(*);
 const-inline(*);
+loop-bound-canon(*);
 simpl!(*);
 fixpoint {
   forkify(*);
@@ -26,5 +28,12 @@ simpl!(*);
 predication(*);
 simpl!(*);
 
-unforkify(*);
+fork-tile[32, 0, false, false](loop1);
+let split = fork-split(loop1);
+let out = outline(split.bfs_1.fj1);
+unforkify(out);
+inline(bfs@loop1);
+delete-uncalled(*);
+
+unforkify(init);
 gcm(*);
diff --git a/juno_samples/rodinia/bfs/src/lib.rs b/juno_samples/rodinia/bfs/src/lib.rs
index 218e9bb0..f6403540 100644
--- a/juno_samples/rodinia/bfs/src/lib.rs
+++ b/juno_samples/rodinia/bfs/src/lib.rs
@@ -19,6 +19,7 @@ pub struct BFSInputs {
 fn run_bfs(nodes: &[Node], source: u32, edges: &[u32]) -> Vec<i32> {
     let n = nodes.len() as u64;
     let m = edges.len() as u64;
+    println!("Running with {} nodes and {} edges.", n, m);
 
     let nodes = HerculesImmBox::from(nodes);
     let edges = HerculesImmBox::from(edges);
-- 
GitLab