Skip to content

0.27.1

Latest

Choose a tag to compare

@github-actions github-actions released this 19 Aug 12:31
· 17 commits to master since this release

Added

  • Rewrote partition to be a single kernel.

  • The type checker has been rewritten, with contributions from Jacob Aleksandar
    Siegumfeldt, Laust Kjæp Dengsøe, and Robert Schenck.

  • Flattening has been rewritten, with the majority of the work by Amirreza
    Hashemi. The main consequence is that nonuniform nested parallelism is now
    supported, although it is not yet necessarily efficient in all cases. More
    details: https://futhark-lang.org/blog/2026-07-31-full-flattening.html

  • Futhark now supports recursive functions, with various restrictions.

  • The incremental_flattening attributes are now just named flattening,
    although the old name continues to work.

  • A simplification rule for branches that return common results (#2526).

Changed

  • Local functions are no longer let-generalised (i.e., made polymorphic).
    Explicitly polymorphic local functions are still supported.

Fixed

  • Filter now uses the predicate once per element instead of twice.

  • Fixed bug in simiplification engine, various SOACs needed to specify
    the depth of lambdas, scans, and reduces.

  • In-place updates with a slice that covers the entire array, but reorders its
    elements (such as a reversal), were simplified into a copy, discarding the
    reordering. Among other things this produced wrong gradients for reverse
    (#2522).

  • A case where complex sizes referring to explicit parameters were mishandled by
    monomorphisation (#2230).

  • An issue where #[scratch] would apply to subexpressions in undesirable ways,
    changing the type of the expression at the IR level.

  • Simplified fusibility check by removing redundant accumulator overlap check
    and fixed fusibility check by giving the correct number of elements.

  • A compiler crash due to missing double buffering inside sequential code
    migrated to GPU. (#2513)

  • Atomics now use device-wide memory scope when compiling for OpenCL C 2.0, or
    OpenCL C 3.0 with the required atomic features. OpenCL C 2.0 is selected
    automatically for Rusticl on Asahi; elsewhere it must be selected explicitly.
    This fixes incorrect results from cross-workgroup operations
    (#734).

  • An exotic case in reverse-mode differentiation of accumulators, which in
    practice would only occur in cases of unrolled scatters.