diff --git a/hercules_opt/src/fork_transforms.rs b/hercules_opt/src/fork_transforms.rs index 80ff7b8f52d9ae585968a5d6bf080b11a316621d..b5d3bb28cd3f4996a6d50508651a04e51e9f01a0 100644 --- a/hercules_opt/src/fork_transforms.rs +++ b/hercules_opt/src/fork_transforms.rs @@ -322,8 +322,6 @@ pub fn fork_bufferize_fission_helper<'a, 'b>( where 'a: 'b, { - // Returns the two forks that it generates. - if bufferized_edges.is_empty() { return None; } @@ -384,7 +382,6 @@ where .replace_all_uses_where(old_node, map[&old_node], |node| *node == outside_user)?; } - let new_join = map[&join]; let new_fork = map[&fork]; // FIXME: Do this as part of copy subgraph? @@ -422,12 +419,14 @@ where )); let empty_buffer = edit.add_zero_constant(empty_buffer); let empty_buffer = edit.add_node(Node::Constant { id: empty_buffer }); + edit = edit.add_schedule(empty_buffer, Schedule::NoResetConstant)?; let reduce = Node::Reduce { control: join, init: empty_buffer, reduct: write, }; let reduce = edit.add_node(reduce); + edit = edit.add_schedule(reduce, Schedule::ParallelReduce)?; // Fix write node edit = edit.replace_all_uses_where(NodeID::new(0), reduce, |usee| *usee == write)?; @@ -449,12 +448,11 @@ where Ok(edit) }); - if edit_result == false { - todo!(); - return None; + if edit_result { + Some((fork, new_fork_id)) + } else { + None } - - Some((fork, new_fork_id)) } /** Split a 1D fork into a separate fork for each reduction. */ diff --git a/juno_samples/fork_join_tests/src/fork_join_tests.jn b/juno_samples/fork_join_tests/src/fork_join_tests.jn index a765726f84070769153117bbaa644626b87a44a8..886ab13b238402e10ad1480b853bf1a237dd41b4 100644 --- a/juno_samples/fork_join_tests/src/fork_join_tests.jn +++ b/juno_samples/fork_join_tests/src/fork_join_tests.jn @@ -97,8 +97,8 @@ fn test7(input: i32) -> i32 { #[entry] fn test8(input : i32) -> i32[8] { - let arr : i32[8]; - let out : i32[8]; + @const1 let arr : i32[8]; + @const2 let out : i32[8]; for i = 0 to 8 { arr[i] = i as i32; @@ -116,4 +116,4 @@ fn test8(input : i32) -> i32[8] { out[i] = d; } return out; -} \ No newline at end of file +} diff --git a/juno_samples/fork_join_tests/src/gpu.sch b/juno_samples/fork_join_tests/src/gpu.sch index bd1fd1d8465ba27778556987429757b0c47705ec..159fac94ee83c1dc7aa886545959e6cec2ed5c7a 100644 --- a/juno_samples/fork_join_tests/src/gpu.sch +++ b/juno_samples/fork_join_tests/src/gpu.sch @@ -5,18 +5,21 @@ no-memset(test3@const1); no-memset(test3@const2); no-memset(test3@const3); no-memset(test6@const); +no-memset(test8@const1); +no-memset(test8@const2); gvn(*); phi-elim(*); dce(*); -let auto = auto-outline(test1, test2, test3, test4, test5, test7); +let auto = auto-outline(test1, test2, test3, test4, test5, test7, test8); gpu(auto.test1); gpu(auto.test2); gpu(auto.test3); gpu(auto.test4); gpu(auto.test5); gpu(auto.test7); +gpu(auto.test8); ip-sroa(*); sroa(*); @@ -50,6 +53,14 @@ dce(auto.test7); simplify-cfg(auto.test7); dce(auto.test7); +let fission = fork-fission-bufferize[test8@loop, test8@bufferize1](auto.test8); +xdot[true](*); +dce(auto.test8); +ccp(auto.test8); +dce(auto.test8); +simplify-cfg(auto.test8); +dce(auto.test8); + ip-sroa(*); sroa(*); dce(*); diff --git a/juno_scheduler/src/pm.rs b/juno_scheduler/src/pm.rs index 58ff399f7acb7e2093a226de7ecb551a88d835c2..20825c549825d7abac60abb82fa508dd9f3ae803 100644 --- a/juno_scheduler/src/pm.rs +++ b/juno_scheduler/src/pm.rs @@ -2191,9 +2191,6 @@ fn run_pass( result = Value::Record { fields: new_fork_joins, }; - - println!("result: {:?}", result); - } Pass::ForkDimMerge => { assert!(args.is_empty());