Repository navigation
ACT-Backend v1.12
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, inact_backend/__init__.pyand in the README's install line, and 1.12.0 in the generated crate'sCargo.tomlandCargo.lock. NOTICEnames 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
movofmini_trncopies fromd2tod1, 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_graphnumbers 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
d1andd2now matches numpy, and one reading a slice under a concatenate in each buffer no longer panics. - An instruction with an input marked by
set_inplaceis 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.hloto 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.2with TAIDL-TO v2.10, on amd64 and arm64.