calyx
calyx copied to clipboard
Studying effects of heuristics in passes
For the Calyx 2.0 paper, I think it would be cool to study the effects of heuristics on the quality of results. Couple of things off the top of my head:
- [ ] Heuristics for inlining
- [ ] Breaking up FSMs in the style of
new_fsm - [ ] How to split up control programs in mixed dynamic-static cases (#1439)
- [ ] Sharing heuristics (from @calebmkim's PLDI SRC paper)
- [x] Effect from
@dataannotations (#1456) - [ ] Effect of dynamic to static transformation (#1439)
I think having a good study and defaults for heuristics in the compiler moves us that much closer to a serious competitive baseline.
I've been thinking about
- Breaking up FSMs in the style of
new_fsm
There's one pretty easy way to do this:
We can just compile static seq { @new_fsm *control1* @new_fsm *control2*} into something like seq { static_group1; static_group2; } in static-inliner, rather than compiling into a single group. When compile-static sees this code, it could handle it, but it would "waste" a cycle between static_group1 and static_group2.
I think there's probably a better way to compile it so that we don't waste a cycle in between groups. Specifically, I don't think the compile-static pass should force all static control to be compiled into a single enable, i.e., it should be able to handle something like static seq { static_group1; static_group2; }.