Skip to content
Snippets Groups Projects

Rodinia

Merged Aaron Councilman requested to merge juno-rodinia into main
2 unresolved threads

Rodinia is working (with only a very bad hack in backprop, but we need multi-returns to fix that). Definitely needs a lot of work to optimize, but everything is running now on CPU and GPU.

This includes a few other changes:

  1. By default SROA will no longer break products that contain arrays (though it has an option to do that). This is useful because breaking structs with arrays can be very expensive (it can produce extra copies of arrays and gcm seems to struggle with it). This is needed for rodinia because in cfd basically 5 arrays are passed in as a single struct (so in Rust a single long array) because this is the style of the original benchmarks (side note: in HPVM they're passed as 5 separate arrays which is a pain and in Rodinia as a single array with annoying magic numbers to get the indexing, our struct of array form is so much nicer to write than that).
  2. Fixes to cpu and gpu intrinsic names
  3. Because SROA is no longer (by default) breaking products that contain arrays we need the front-end and outlining to generate better return types (in particular avoid singleton and empty products where possible).
  4. Fixes around HerculesMutBox to allow borrowing it for a shorter time then its whole lifetime so that we can read data back using them after execution of the Hercules program (I think this is really just used because of the hack we need to get backprop to work)
  5. Some improvements to Juno syntax related to structs and for-loops (both now support more rust-style syntax in addition to the original style)
  • Note: for the rust like loops it now supports code like for i in 0..=n which will generate the guarded do-while form but now the condition will be <= rather than <, ideally loop bound canonicalization will support this, but I can adjust Juno to just add 1 to the bound and use < if needed

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
38 38 *
39 39 * - Write: the write node writes primitive fields in product values - these get
40 40 * replaced by a direct def of the field value
41 *
42 * The allow_sroa_arrays variable controls whether products that contain arrays
43 * will be broken into pieces. This option is useful to have since breaking
44 * these products up can be expensive if it requires destructing and
45 * reconstructing the product at any point.
46 *
47 * TODO: Handle partial selections (i.e. immutable nodes). This will involve
48 * actually tracking each source and use of a product and verifying that all of
49 * the nodes involved are mutable.
  • Does this TODO go away w/ multi-returns?

  • I think it's less important with multi-returns since once we have that you should generally not have to create products of arrays unless you intentionally want them and so fine-grained control of sroa is probably less important, but this todo is really because sroa will just attempt to replace as many products as it can and doesn't take into account immutable nodes.

  • Please register or sign in to reply
  • LGTM. That's a lot of code for Rodinia :skull:. I'm a bit concerned about lengthening CI times, but I suppose that will shrink once we write good GPU schedules for cava, edge, and rodinia.

  • rarbore2 approved this merge request

    approved this merge request

  • mentioned in commit 9e99a426

  • Please register or sign in to reply
    Loading