Skip to content
Snippets Groups Projects

More optimizations

Merged rarbore2 requested to merge more_opt3 into main
3 files
+ 28
48
Compare changes
  • Side-by-side
  • Inline
Files
3
type Node = struct { edge_start: u32; num_edges: u32; };
type StopProd = struct { stop: bool; };
fn make_stop_prod() -> StopProd {
let ret : StopProd;
ret.stop = true;
return ret;
}
#[entry]
fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n] {
@@ -23,8 +30,6 @@ fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n]
let updated: bool[n];
while !stop {
stop = true;
@loop1 for i in 0..n {
if mask[i] {
mask[i] = false;
@@ -42,15 +47,16 @@ fn bfs<n, m: usize>(graph_nodes: Node[n], source: u32, edges: u32[m]) -> i32[n]
}
}
@make let stop_prod = make_stop_prod();
@loop2 for i in 0..n {
stop = stop && !updated[i];
}
@loop3 for i in 0..n {
mask[i] = mask[i] || updated[i];
visited[i] = visited[i] || updated[i];
updated[i] = false;
if updated[i] {
mask[i] = true;
visited[i] = true;
updated[i] = false;
stop_prod.stop = updated[i];
}
}
stop = stop_prod.stop;
}
return cost;
Loading