Skip to content

Releases: diku-dk/futhark

0.15.5

23 Apr 16:16
Compare
Choose a tag to compare

Added

  • reduce_by_index with f32-addition is now approximately 2x
    faster in the CUDA backend.

Fixed

  • Fixed kernel extractor bug in if-interchange (#921).

  • Fixed some cases of malformed kernel code generation (#922).

  • Fixed rare memory corruption bug involving branches returning
    arrays (#923).

  • Fixed spurious warning about entry points involving opaque return
    types, where the type annotations are put on a higher-order return
    type.

  • Fixed incorrect size type checking for sum types in negative
    position with unknown constructors (#927).

  • Fixed loop interchange for permuted sequential loops with more
    than one outer parallel loop (#928).

  • Fixed a type checking bug for branches returning incomplete sum
    types (#931).

0.15.4

15 Apr 15:13
Compare
Choose a tag to compare

Added

  • futhark pkg now shells out to curl for HTTP requests.

  • futhark doc now supports proper GitHub-flavored Markdown, as it
    uses the cmark-gfm library internally.

  • Top-level constants are now executed only once per program
    instance. This matters when Futhark is used to generate library
    code.

  • futhark autotune is better at handling degrees of parallelism
    that assume multiple magnitudes during a single run.

  • futhark pkg now uses curl to retrieve packages.

  • Type errors are now printed in red for better legibility (thanks
    to @mxxo!).

Fixed

  • Fixed incorrect handling of opaques in entry point return types.

  • futhark pkg now works properly with GitLab (#899).

0.15.3

01 Apr 12:09
Compare
Choose a tag to compare

Added

  • scan now supports operators whose operands are arrays. They are
    significantly slower than primitive-typed scans, so avoid them if
    at all possible.

  • Precomputed constants are now handled much more efficiently.

  • Certain large programs that rely heavily on inlining now compile
    orders of magnitude faster.

Fixed

  • Some fixes to complicated module expressions.

  • futhark pkg should no longer crash uncontrollably on network
    errors (#894).

  • Fixed local open in interpreter (#887).

  • Fix error regarding entry points that called other entry points
    which contained local functions (#895).

  • Fix loading OpenCL kernels from a binary.

0.15.2

21 Mar 14:29
Compare
Choose a tag to compare

Fixed

  • Fix a REPL regression that made it unable to handle overloaded
    types (such as numeric literals, oops).

  • The uniqueness of a record is now the minimum of the uniqueness of
    any of its elements (#870).

  • Bug in causality checking has been fixed (#872).

  • Invariant memory allocations in scan/reduce operators are now supported.

  • futhark run now performs more type checking on entry point input (#876).

  • Compiled Futhark programs now check for EOF after the last input
    argument has been read (#877).

  • Fixed a bug in loop type checking that prevented the result from
    ever aliasing the initial parameter values (#879).

0.15.1

16 Mar 09:19
Compare
Choose a tag to compare

Added

  • Futhark now type-checks size annotations using a size-dependent
    type system.

  • The parallel code generators can now handle bounds checking and
    other safety checks.

  • Integer division by zero is now properly safety-checked and
    produces an error message.

  • Integer exponentiation with negative exponent is now properly
    safety-checked and produces an error message.

  • Serious effort has been put into improving type errors.

  • reduce_by_index may be somewhat faster for complex operators on
    histograms that barely fit in local memory.

  • Improved handling of in-place updates of multidimensional arrays
    nested in map. These are now properly parallelised.

  • Added concat_to and flatten_to functions to prelude.

  • Added indices function to the prelude.

  • futhark check and all compilers now take a -w option for
    disabling warnings.

  • futhark bench now accepts --pass-compiler-option.

  • The integer modules now have mad_hi and mul_hi functions for
    getting the upper part of multiplications. Thanks to @porcuquine for the contribution!

  • The f32 and f64 modules now also define sinh, cosh,
    tanh, asinh, acosh, and atanh functions.

  • The f32 and f64 modules now also define fma and mad
    functions.

Removed

  • Removed update, split2, intersperse, intercalate, pick,
    steps, and range from the prelude.

Changed

  • "futlib" is now called "prelude", and it is now an error to
    import it explicitly.

Fixed

  • Corrected address calculations in csharp backend.

  • The C backends are now more careful about generating overflowing
    integer operations (since this is undefined behaviour in C, but
    defined in Futhark).

  • futhark dataset no longer crashes uncontrollably when used
    incorrectly (#849).

0.14.1

24 Jan 13:28
Compare
Choose a tag to compare

Added

  • The optimiser is now somewhat better at removing unnecessary
    copies of array slices.

  • futhark bench and futhark test now take a --concurrency
    option for limiting how many threads are used for housekeeping
    tasks. Set this to a low value if you run out of memory.

  • random test blocks are now allowed to contain integer literals
    with type suffixes.

  • :frame <n> command for futhark repl for inspecting the stack.

  • e :> t notation, which means the same as e : t for now, but
    will have looser constraints in the future.

  • Size-lifted type abbreviations can be declared with type~ and
    size-lifted type parameters with '~. These currently have no
    significant difference from fully lifted types.

Changed

  • Tuples are now 0-indexed (#821, which also includes a conversion
    script).

  • Invalid ranges like 1..<0 now produce a run-time error instead
    of an empty array.

  • Record updates (r with f = e) now require r to have a
    completely known type up to f. This is a restriction that will
    hopefully be lifted in the future.

  • The backtrace format has changed to be innermost-first, like
    pretty much all other languages.

  • Value specs must now explicitly quantify all sizes of function
    parameters. Instead of

    val sum: []t -> t
    

    you must write

    val sum [n]: [n]t -> t
    
  • futhark test now once again numbers un-named data sets from 0
    rather than from 1. This fits a new general principle of always
    numbering from 0 in Futhark.

  • Type abbreviations declared with type may no longer contain
    functions or anonymous sizes in their definition. Use type^ for
    these cases. Just a warning for now, but will be an error in the
    future.

Fixed

  • Work around (probable) AMD OpenCL compiler bug for
    reduce_by_index operations with complex operators that require
    locking.

  • Properly handle another ICE on parse errors in test stanzas (#819).

  • futhark_context_new_with_command_queue() now actually works. Oops.

  • Different scopes are now properly addressed during type inference
    (#838). Realistically, there will still be some missing cases.

0.13.2

16 Dec 10:36
Compare
Choose a tag to compare

Added

  • New subcommand, futhark query, for looking up information about
    the name at some position in a file. Intended for editor
    integration.

  • (Finally) automatic support for compute model 7.5 in the CUDA backend.

  • Somewhat better performance for very large target arrays for
    reduce_by_index..

Fixed

  • Fixed a slice-iota simplification bug (#813).

  • Fixed defunctionalisation crash involving intrinsics (#814).

0.13.1

27 Nov 09:32
Compare
Choose a tag to compare

Added

  • Stack traces are now multiline for better legibility.

Changed

  • The empty(t) notation now specifies the type of the entire
    value
    (not just the element type), and requires dimension sizes
    when t is an array (e.g. empty(i32) is no longer allowed, you
    need for example empty([0]i32)).

  • All input files are now assumed to be in UTF-8.

Fixed

  • Fixed exponential-time behaviour for certain kernels with large
    arithmetic expressions (#805).

  • futhark test and friends no longer crash when reporting some
    errors (#808).

  • Fix uniqueness of loop results (#810).

0.12.3

09 Nov 18:37
Compare
Choose a tag to compare

Added

  • Character literals can now be any integer type.

  • The integer modules now have popc and clz functions.

  • Tweaked inlining so that larger programs may now compile faster
    (observed about 20%).

  • Pattern-matching on large sum typed-values taken from arrays may
    be a bit faster.

Fixed

  • Various small fixes to type errors.

  • All internal functions used in generated C code are now properly
    declared static.

  • Fixed bugs when handling dimensions and aliases in type ascriptions.

0.12.2

18 Oct 17:48
Compare
Choose a tag to compare

Added

  • New tool: futhark autotune, for tuning the threshold parameters
    used by incremental flattening. Based on work by Svend Lund
    Breddam, Simon Rotendahl, and Carl Mathias Graae Larsen.

  • New tool: futhark dataget, for extracting test input data. Most
    will probably never use this.

  • Programs compiled with the cuda backend now take options
    --default-group-size, --default-num-groups, and
    --default-tile-size.

  • Segmented reduce_by_index are now substantially fasted for small
    histograms.

  • New functions: f32.lerp and f64.lerp, for linear interpolation.

Fixed

  • Fixes to aliasing of record updates.

  • Fixed unnecessary array duplicates after coalescing optimisations.

  • reduce_by_index nested in maps will no longer sometimes
    require huge amounts of memory.

  • Source location now correct for unknown infix operators.

  • Function parameters are no longer in scope of themselves (#798).

  • Fixed a nasty out-of-bounds error in handling of irregular allocations.

  • The floor/ceil functions in f32/f64 now handle infinities
    correctly (and are also faster).

  • Using % on floats now computes fmod instead of crashing the compiler.