Planning for Fall 2023 #1667
Replies: 2 comments 11 replies
-
Thanks for the awesome overview!! This would be super fun to push forward. On the builder/generation theme (2): One adjacent way to focus on this (and perhaps turn it into research) would be to aim for compositionality—that is, to address the problem of not simply writing one generator at a time but exposing interfaces so generators can use each other. This could end up somewhere along the lines of #419. On the theme of FPGA stuff: for more on "can we port our AXI interface into Calyx instead of Verilog," please see #1105. There is a meaty project here in defining abstract accelerator interfaces and separating out the tools to implement them, outlined in #1084. For the full end-to-end "easily run stuff on FPGAs" vision, there are also a few important ancillary things for making this work:
|
Beta Was this translation helpful? Give feedback.
-
Hi folks, one cool thing we can do is to write a compiler from triton's MLIR to calyx. Triton is fast becoming the standard for GPU/NPU computing especially with adoption of it in PyTorch 2.0. It'll be fun to write a compiler. I am interested to pick this up :). Hoping to get support and advice! |
Beta Was this translation helpful? Give feedback.
-
(Previous vision write up for continuity: #1334)
Goals for Fall '23
With the summer wrapped up, we've completed the implementation of
static
abstractions and have started seeing Calyx being used out in the wild:calyx-py
.With all of this, I think we're reaching a critical point and should figure out what things to prioritize to make Calyx an awesome toolchain for broader use. I've written one possible project plan with concrete goals and hoped to align it to the interests of various people working on the project but I'd be interested in hearing other ideas too!
Concrete Goals
calyx-py
: A library for Calyx constructionstatic
abstractions: Have your composition and speed it up tooTheme 1: Strengthening the CIRCT Flow
A lot of the serendipitous usage of Calyx has come from people experimenting with the Calyx flow in the CIRCT compiler.
With AMC being a critical project for Calyx, I think it is well beyond the time for us to seriously start working with the CIRCT infrastructure.
CIRCT is giant and amorphous and so we need to find a concrete goal: let's try to ditch the TVM-to-Calyx flow and start working on getting PyTorch designs working with Calyx using just the Calyx flow.
At a high-level, we need to flesh out the flowing compilation path:
pytorch
->*affine
->loopschedule
->calyx
.Building up this capability gives us a serious advantage over basically every existing toolchain: we can compile giant designs and evaluate the impact of our optimizations.
It also provides us with a very concrete set of benchmarks to use in future papers and when selling Calyx to users.
Theme 2: Productive Calyx Generation using
calyx-py
Not everyone wants to or needs to build whole compiler frontends. In fact, sometimes, it's extremely helpful to build generators for narrow classes of architectures. As Anshuman's recent work demonstrated, we already have the capability to generate complex designs using
calyx-py
.I think fleshing out
calyx-py
in a meaningful way can give us a dramatically new and productive way of building hardware. It is the perfect substrate to experiment with techniques like Exocompilation.Again, we need to be extremely concrete about what guides us in this process so let's pick some concrete things we already need to do:
calyx-py
.Overall, I'm super excited about this theme. If we're clever, we can even use existing Python to C frontends and connect it to the CIRCT-based HLS flow and really supercharge it. I'm also quite certain that, if done well, there is a paper in here.
Theme 3: Push-button FPGA Use
A push-button FPGA flow for Calyx can be another killer app for us: researchers spends months building the expertise to even use synthesis tools (something we already do in a push button manner) and most papers don't even mention FPGA runs.
I think a push-button FPGA flow is more than possible, but it requires concerted effort on our part.
Our AXI generator is powerful but has a lot of hard-coded assumptions in it that need to be fixed before we make it work with arbitrary designs.
Concretely: my suggestion here is that we try to use the kernels generated from themes (1) and (2) and run them on FPGAs in a push button manner.
To do this, we need to take a couple of steps:
The Vision
If successful, at the end of the semester, we'll have a shiny push button flow from CIRCT to generate PyTorch kernels,
calyx-py
to generate state-of-the-art architectures, and have all of it running on an FPGA.Calyx occupies an interesting place in the ecosystem currently: it is the most developed open-source flow that actually has the potential to be used to build the next generation of accelerator generators.
We can take some very concrete steps to make that happen.
Beta Was this translation helpful? Give feedback.
All reactions