diff --git a/juno_samples/rodinia/bfs/src/bfs.jn b/juno_samples/rodinia/bfs/src/bfs.jn index f82d9d80cf5aa2275e4dcad941bb8128cdf6ee43..d6ec25f26b997205d4dcdf116bce462fa228fc88 100644 --- a/juno_samples/rodinia/bfs/src/bfs.jn +++ b/juno_samples/rodinia/bfs/src/bfs.jn @@ -53,7 +53,7 @@ fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n] mask[i] = true; visited[i] = true; updated[i] = false; - stop_prod.stop = updated[i]; + stop_prod.stop = updated[i]; } } stop = stop_prod.stop; diff --git a/juno_samples/rodinia/bfs/src/cpu.sch b/juno_samples/rodinia/bfs/src/cpu.sch index 589b93b1109b09e9146af593c8649987d6298635..55d25095ecbc4c23292b691a0de6946e4fbb6e02 100644 --- a/juno_samples/rodinia/bfs/src/cpu.sch +++ b/juno_samples/rodinia/bfs/src/cpu.sch @@ -37,5 +37,21 @@ fixpoint { } simpl!(collect); -unforkify(init, traverse, collect); +parallel-fork(traverse, collect); +parallel-reduce(traverse, collect); + +fork-tile[32, 0, false, true](init, traverse, collect); +let (outer, inner) = fork-reshape[[1], [0]](init); +let init_body = outline(inner); +let (outer, inner) = fork-reshape[[1], [0]](traverse); +let traverse_body = outline(inner); +let (outer, inner) = fork-reshape[[1], [0]](collect); +let collect_body = outline(inner); + +inline(bfs); +delete-uncalled(*); +const-inline(*); +simpl!(*); + +unforkify(init_body, traverse_body, collect_body); gcm(*);