Skip to content
Snippets Groups Projects
Commit 9ea73aab authored by rarbore2's avatar rarbore2
Browse files

Merge branch 'ablation' into 'main'

Ablation schedules

See merge request !226
parents 123b595e 209b1c4d
No related branches found
No related tags found
1 merge request!226Ablation schedules
Pipeline #202100 passed
......@@ -313,6 +313,11 @@ pub fn unforkify(
edit = edit.delete_node(*reduce)?;
}
edit.sub_edit(fork, proj_exit_id);
edit.sub_edit(fork, proj_back_id);
edit.sub_edit(fork, neq_id);
edit.sub_edit(fork, add_id);
edit = edit.delete_node(fork)?;
edit = edit.delete_node(join)?;
for tid in tids {
......
......@@ -14,6 +14,7 @@ path = "src/lib.rs"
[features]
cuda = ["juno_build/cuda", "hercules_rt/cuda"]
seq = []
dont_fuse_gamut = []
[build-dependencies]
juno_build = { path = "../../juno_build" }
......
......@@ -105,17 +105,20 @@ fixpoint {
fork-coalesce(fuse4);
}
simpl!(fuse4);
fork-unroll(fuse4@channel_loop);
simpl!(fuse4);
fixpoint {
fork-fusion(fuse4@channel_loop);
if !feature("dont_fuse_gamut") {
fork-unroll(fuse4@channel_loop);
simpl!(fuse4);
fixpoint {
fork-fusion(fuse4@channel_loop);
}
simpl!(fuse4);
array-slf(fuse4);
simpl!(fuse4);
}
simpl!(fuse4);
array-slf(fuse4);
simpl!(fuse4);
if !feature("seq") {
let par = fuse4@image_loop \ fuse4@channel_loop;
let par = fuse4@image_loop \ fuse4@channel_loop \ fuse4@cp_loop;
fork-tile[4, 1, false, false](par);
fork-tile[8, 0, false, false](par);
fork-interchange[1, 2](par);
......
......@@ -109,18 +109,25 @@ fixpoint {
fork-coalesce(fuse4);
}
simpl!(fuse4);
fork-unroll(fuse4@channel_loop);
simpl!(fuse4);
fixpoint {
fork-fusion(fuse4@channel_loop);
if !feature("dont_fuse_gamut") {
fork-unroll(fuse4@channel_loop);
simpl!(fuse4);
fixpoint {
fork-fusion(fuse4@channel_loop);
}
simpl!(fuse4);
}
simpl!(fuse4);
array-slf(fuse4);
simpl!(fuse4);
fork-tile[2, 0, false, true](fuse4@channel_loop);
let out = fork-split(fuse4@channel_loop);
fork-unroll(out.cava_3.fj1);
unforkify(fuse4@channel_loop);
unforkify(fuse4@channel_loop | fuse4@cp_loop);
fork-tile[4, 1, false, true](fuse4);
fork-tile[8, 0, false, true](fuse4);
fork-interchange[1, 2](fuse4);
let split = fork-split(fuse4);
fork-coalesce(split.cava_3.fj0 \ split.cava_3.fj2);
fork-coalesce(split.cava_3.fj2);
no-memset(fuse5@res1);
no-memset(fuse5@res2);
......@@ -133,13 +140,6 @@ simpl!(fuse5);
array-slf(fuse5);
simpl!(fuse5);
fork-tile[4, 1, false, true](fuse4);
fork-tile[8, 0, false, true](fuse4);
fork-interchange[1, 2](fuse4);
let split = fork-split(fuse4);
fork-coalesce(split.cava_3.fj0 \ split.cava_3.fj2);
fork-coalesce(split.cava_3.fj2);
delete-uncalled(*);
simpl!(*);
......
......@@ -8,6 +8,7 @@ edition = "2021"
opencv = ["dep:opencv"]
cuda = ["juno_build/cuda", "hercules_rt/cuda"]
seq = []
warp_tile = []
[[bin]]
name = "juno_edge_detection"
......
......@@ -17,6 +17,7 @@ juno_build::juno!("edge_detection");
fn edge_detection_bench(c: &mut Criterion) {
let mut group = c.benchmark_group("edge detection bench");
group.sample_size(10);
group.measurement_time(std::time::Duration::from_secs(25));
let input = "examples/formula1_scaled.mp4";
......
......@@ -95,22 +95,54 @@ fixpoint {
fork-guard-elim(max_gradient);
fork-coalesce(max_gradient);
}
simpl!(max_gradient);
fork-dim-merge(max_gradient);
simpl!(max_gradient);
fork-tile[32, 0, false, true](max_gradient);
let out = fork-split(max_gradient);
clean-monoid-reduces(max_gradient);
simpl!(max_gradient);
let fission = fork-fission[out._4_max_gradient.fj0](max_gradient);
simpl!(max_gradient);
fork-tile[32, 0, false, true](fission._4_max_gradient.fj_bottom);
let out = fork-split(fission._4_max_gradient.fj_bottom);
clean-monoid-reduces(max_gradient);
simpl!(max_gradient);
let top = outline(fission._4_max_gradient.fj_top);
let bottom = outline(out._4_max_gradient.fj0);
gpu(top, bottom);
if !feature("seq") {
if !feature("warp_tile") {
simpl!(max_gradient);
fork-dim-merge(max_gradient);
simpl!(max_gradient);
fork-tile[32, 0, false, true](max_gradient);
let out1 = fork-split(max_gradient);
clean-monoid-reduces(max_gradient);
simpl!(max_gradient);
let fission = fork-fission[out1._4_max_gradient.fj0](max_gradient);
simpl!(max_gradient);
fork-tile[32, 0, false, true](fission._4_max_gradient.fj_bottom);
let out2 = fork-split(fission._4_max_gradient.fj_bottom);
clean-monoid-reduces(max_gradient);
simpl!(max_gradient);
unforkify(out1._4_max_gradient.fj1);
unforkify(out2._4_max_gradient.fj1);
simpl!(max_gradient);
let top = outline(fission._4_max_gradient.fj_top);
let bottom = outline(out2._4_max_gradient.fj0);
gpu(top, bottom);
} else {
simpl!(max_gradient);
fork-dim-merge(max_gradient);
simpl!(max_gradient);
fork-tile[32, 0, false, true](max_gradient);
let out = fork-split(max_gradient);
clean-monoid-reduces(max_gradient);
simpl!(max_gradient);
let fission = fork-fission[out._4_max_gradient.fj0](max_gradient);
simpl!(max_gradient);
fork-tile[32, 0, false, true](fission._4_max_gradient.fj_bottom);
let out = fork-split(fission._4_max_gradient.fj_bottom);
clean-monoid-reduces(max_gradient);
simpl!(max_gradient);
let top = outline(fission._4_max_gradient.fj_top);
let bottom = outline(out._4_max_gradient.fj0);
gpu(top, bottom);
}
} else {
simpl!(max_gradient);
fork-split(max_gradient);
unforkify(max_gradient);
gpu(max_gradient);
}
ip-sroa(*);
sroa(*);
simpl!(*);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment