Skip to content

Releases: diku-dk/futhark

0.25.5

21 Sep 08:36
Compare
Choose a tag to compare

Added

  • futhark repl now has a :format command. Work by Dominic
    Kennedy.

Fixed

  • Textual floating-point numbers printed by executables now always
    print enough digits to not hide information. Binary output is
    unchanged.

  • Invalid CSE on constants could crash the compiler (#2021).

0.25.4

16 Sep 19:07
Compare
Choose a tag to compare

Fixed

  • Invalid simplification (#2015).

  • Rarely occurring deadlock for fused map-scan compositions in CUDA
    backend, when a bounds check failed in the map function.

  • Compiler and interpreter crash for tricky interactions of abstract
    types and sizes (#2016). Solved by banning such uses - in principle
    this could break code.

  • Incomplete alias tracking could cause removal of necessary copies,
    leading to compiler crash (#2018).

0.25.3

30 Aug 13:10
Compare
Choose a tag to compare

Added

  • pyopencl backend: compatibility with future versions of PyOpenCL.

  • New backend: hip.

Fixed

  • Exotic problems related to intra-group reductions with array
    operands. (Very rare in real code, although sometimes generated by
    AD.)

  • Interpreter issue related to sizes in modules (#1992, #1993, #2002).

  • Incorrect insertion of size arguments in in complex cases (#1998).

  • Incorrect handling of match in lambda lifting (#2000).

  • Regression in checking of consumption (#2007).

  • Error in type checking of horisontally fused scatters could crash
    the compiler (#2009).

  • Size-polymorphic value bindings with existential sizes are now
    rejected by type checker (#1993).

  • Single pass scans with complicated fused map functions were
    insufficiently memory-expanded (#2023).

  • Invalid short circuiting (#2013).

0.25.2

20 Jul 11:06
Compare
Choose a tag to compare

Added

  • Flattening/unflattening as the final operation in an entry point no
    longer forces a copy.

  • The opencl backend no longer always fails on platforms that do
    not support 64-bit integer atomics, although it will still fail if
    the program needs them.

  • Various performance improvements to the compiler itself;
    particularly the frontend. It should be moderately faster.

Fixed

  • Code generation for f16 literals in CUDA backend (#1979).

  • Branches that return arrays differing in sign of their stride
    (#1984).

0.25.1

06 Jul 14:43
Compare
Choose a tag to compare

Added

  • Arbitrary expressions of type i64 are now allowed as sizes. Work
    by Lubin Bailly.

  • New prelude function resize.

Removed

  • The prelude functions concat_to and flatten_to. They are often
    not necessary now, and otherwise resize is available.

Changed

  • The prelude functions flatten and unflatten (and their
    multidimensional variants), as well as split, now have more
    precise types.

  • Local and anonymous (lambda) functions that must return unique
    results (because they are passed to a higher order function that
    requires this) must now have an explicit return type ascription that
    declares this, using *. This is very rare (in practice
    unobserved) in real programs.

Fixed

  • futhark doc produced some invalid links.

  • flatten did not properly check for claimed negative array sizes.

  • Type checker crash on some ill-typed programs (#1926).

  • Some soundness bugs in memory short circuiting (#1927, #1930).

  • Another compiler crash in block tiling (#1933, #1940).

  • Global arrays with size parameters no longer have aliases.

  • futhark eval no longer crashes on ambiguously typed expressions (#1946).

  • A code motion pass was ignorant of consumption constraints, leading
    to compiler crash (#1947).

  • Type checker could get confused and think unknown sizes were
    available when they really weren't (#1950).

  • Some index optimisations removed certificates (#1952).

  • GPU backends can now transpose arrays whose size does not fit in a
    32-bit integer (#1953).

  • Bug in alias checking for the core language type checker (#1949).
    Actually (finally) a proper fix of #803.

  • Defunctionalisation duplicates less code (#1968).

0.24.3

23 Apr 18:08
Compare
Choose a tag to compare

Fixed

  • Certain cases of noninlined functions in multicore backend.

  • Defunctionalisation of match where the constructors carry
    functions (#1917).

  • Shape coercions involving sum types (#1918). This required
    tightening the rules a little bit, so some coercions involving
    anonymous sizes may now be rejected. Add expected sizes as needed.

  • Defunctionalisation somtimes forgot about sizes bound at top level
    (#1920).

0.24.2

14 Apr 12:47
Compare
Choose a tag to compare

Added

  • futhark literate (and FutharkScript in general) is now able to do
    a bit of type-coercion of constants.

Fixed

  • Accumulators (produced by AD) had defective code generation for
    intra-group GPU kernel versions. (#1895)

  • The header file generated by --library contained a prototype for
    an undefined function. (#1896)

  • Crashing bug in LSP caused by stray undefined (#1907).

  • Missing check for anonymous sizes in type abbreviations (#1903).

  • Defunctionalisation crashed on projection of holes.

  • Loop optimisation would sometimes remove holes.

  • A potential barrier divergence for certain GPU kernels that fail
    bounds checking.

  • A potential infinite loop when looking up aliases (#1915).

  • futhark literate: less extraneous whitespace.

0.24.1

12 Mar 10:48
Compare
Choose a tag to compare

Added

  • The manifest file now lists which tuning parameters are relevant for
    each entry point. (#1884)

  • A command tuning_params has been added to the server protocol.

Changed

  • If part of a function parameter is marked as consuming ("unique"),
    the entire parameter is now marked as consuming.

Fixed

  • A somewhat obscure simplification rule could mess up use of memory.

  • Corner case optimisation for mapping over iota (#1874).

  • AD for certain combinations of map and indexing (#1878).

  • Barrier divergence in generated code in some exotic cases (#1883).

  • Handling of higher-order holes (#1885).

0.23.1

03 Feb 07:24
Compare
Choose a tag to compare

Added

  • f16.log1p/f32.log1p/f64.log1p by nbos (#1820).

  • Better syntax errors for invalid use of !.

  • futhark literate now supports a $loadaudio builtin function for loading
    audio to Futhark programs (#1829).

  • You can now mix consumption and higher-order terms in slightly more
    cases (#1836).

  • futhark pkg now invokes Git directly rather than scraping
    GitHub/GitLab. This means package paths can now refer to any Git
    repository, as long as git clone works. In particular, you can
    use private and self-hosted repositories.

  • Significant reduction in compilation time by doing internal sanity
    checks in separate thread.

  • New command: futhark eval. Evaluates Futhark expressions
    provided as command line arguments, optionally allowing a file
    import (#1408).

  • script input now allows the use of $loaddata.

  • Datasets used in futhark test and futhark bench can now be named
    (#1859).

  • New command futhark benchcmp by William Due.

Changed

  • The C API function futhark_context_new_with_command_queue() for
    the OpenCL backend has been replaced with a configuration setting
    futhark_context_config_set_command_queue().

Fixed

  • Minor parser regression that mostly affects the REPL (#1822).

  • Parser did not recognise custom infix operators that did not have a
    builtin operator as prefix (#1824).

  • GPU backends: expansion of irregular nested allocations involving
    consumption (#1837, #1838).

  • CLI executables now handle entry points with names that are not
    valid C identifiers (#1841).

  • Various oversights in the type checking of uniqueness annotations
    for higher-order functions (#1842).

  • Invalid short-circuiting could cause compiler crashes (#1843).

  • Defunctionalisation could mess up sum types, leading to invalid code
    generation by internalisation, leading to a compiler crash (#1847).

  • The #[break] attribute now provides the right environment to
    futhark repl, allowing local variables to be inspected.

  • Simplification of concatenations (#1851).

  • Array payloads in sum types no longer need parens (#1853).

  • When a file is loaded with futhark repl, local declarations are
    now available.

  • Missing alias propagation when pattern matching incompletely known
    sum types (#1855).

  • reduce_by_index and hist were in some cases unable to handle
    input sizes that do not fit in a 32-bit integer.

  • A fusion bug related to fusing across transpositions could result in
    a compiler crash (#1858).

0.22.7

26 Dec 19:12
Compare
Choose a tag to compare

Added

  • futhark literate now supports an :audio directive for producing audio
    files from arrays of i8 (#1810).

  • futhark multicore now parallelises copies (#1799).

  • futhark multicore now uses an allocator that better handles large
    allocations (#1768).

Fixed

  • Some record field names could cause generation of invalid C API names (#1806).

  • Memory block merging was extremely and unnecessarily slow for
    programs with many entry points.

  • Simplification mistake could lead to out-of-bounds reads (#1808).

  • futhark lsp now handles some bookkeeping messages sent by Eglot.

  • Parser can now handle arbitrarily complex chaining of indexing and
    projection.

  • Detect and complain about source files without .fut extension (#1813).

  • Overly conservative checking of whether a function parameter is
    allowed by be consumed - it was disallowed if it contained any
    scalars (#1816).