Skip to content

ACT-Backend v1.12

Choose a tag to compare

@DEVANSH-DVJ DEVANSH-DVJ released this 02 Nov 16:11
· 26 commits to master since this release
f5ebce6

Changes since v1.11, extraction and in-place instructions:

  • Stopped the slow extractor at an e-class and buffer on its path (#229)
  • Skipped the empty text of an in-place slice or concatenate (#231)
  • Kept the fast extractor's selection in e-node order (#233)
  • Keyed the fast extractor's path and node map by e-class and buffer (#236)
  • Keyed the slow extractor's value numbering by buffer (#238)
  • Selected in-place instructions, copying a shared overwritten input (#240)
  • Matched the output's HBM offset across merged e-classes (#242)

This release:

  • The version is 1.12 in pyproject.toml, in act_backend/__init__.py and in the README's install line, and 1.12.0 in the generated crate's Cargo.toml and Cargo.lock.
  • NOTICE names the copyright of the ACT contributors and the software developed at the University of Illinois Urbana-Champaign.
  • The slow extractor now stops at an e-class already on its path in the same buffer, so a candidate that stores a value to HBM and loads it back, or copies it to another buffer and back, is no longer given to the allocator; a value in two buffers on one path, such as one the mov of mini_trn copies from d2 to d1, is extracted as before.
  • The emitter writes no line for an instruction whose text is empty, such as an in-place slice or concatenate, so an assembly that holds one has no bare api. line and the oracle loads it, and a kernel that is one slice of its input now compiles to the in-place slice of its loaded input.
  • The fast extractor now keeps the e-nodes it selects in e-node order, so select2pii_graph numbers a candidate's nodes in one order and every compile of a kernel writes the same fast candidate byte for byte.
  • The fast extractor now holds each e-class on its path and in its node map with its buffer, so it finds a candidate for a kernel that copies a value to a second buffer, as both examples' attention kernels do, gives a slice or concatenate read in two buffers a node in each, and no longer panics on a slice or concatenate with children in two buffers.
  • The slow extractor's value numbering now keys each e-node by the buffer it is extracted in, so a slice or concatenate read in two buffers keeps a node in each: a kernel reading one concatenate from d1 and d2 now matches numpy, and one reading a slice under a concatenate in each buffer no longer panics.
  • An instruction with an input marked by set_inplace is no longer refused at generation: the fast extractor offers its e-node after an e-class's plain ones, it gets its own copy of a shared overwritten operand in the candidates of both extractors, and a candidate where that operand is pinned in HBM or views storage with another reader is dropped with a reason that the no-assembly line carries.
  • The two examples mark their softmax in place and compile attention.hlo to the same calls and output as in v1.11, now from the fast extractor's candidate.
  • A kernel's output now keeps its HBM address when a rewrite merges its e-class.
  • Its 474 tests run against the installed wheel in devanshdvj/act-env:py3.14-jax0.11.2 with TAIDL-TO v2.10, on amd64 and arm64.