futhark

A data-parallel functional programming language

ISC License

Stars
2.3K
Committers
67

Bot releases are visible (Hide)

futhark - 0.22.4

Published by github-actions[bot] almost 2 years ago

Added

  • Memory short circuiting, a major new optimisation by Philip
    Munksgaard that avoids copies by constructing values in-place.

Fixed

  • assert was sometimes optimised away by CSE.

  • futhark literate now handles type abbreviations in entry points
    (#1750).

  • Handling of non-inlined functions in GPU code. Still very restricted.

  • Uniqueness checking bug (#1751).

  • Simplification bug (#1753).

  • A bug related to optimisation of scalar code migrated to GPU.

  • Memory optimisation bug for top-level constants (#1755).

  • Handling of holes in defunctionalisation (again).

  • A few cases where optimisation (safely but perhaps confusingly)
    removed bounds checks (#1758).

  • Futhark now works on Windows again (#1734). This support remains
    very flaky and not well tested.

  • Type inference of field projection (#1762).

futhark - 0.22.3

Published by github-actions[bot] almost 2 years ago

Fixed

  • Non-server executables neglected to synchronise before printing results (#1731).

  • Fixed handling of holes in defunctionalisation (#1738).

  • Ascription of higher-order modules (#1741).

  • Fixed compiler crash when attempting to tile irregular parallelism (#1739).

  • Incorrect regularity checking in loop interchange (#1744).

  • Pattern match exhaustiveness of bools (#1748).

  • Improper consumption checking of nonlocal bindings (#1749).

futhark - 0.22.2

Published by github-actions[bot] about 2 years ago

Added

  • futhark repl is now delightfully more colourful.

  • futhark repl no longer prints scalar types with type suffixes (#1724).

  • futhark pyopencl executables now accept --build-option.

  • New functions: f16.nextafter, f32.nextafter, f64.nextafter,
    matching the ones in the C math library.

  • futhark literate now prints directives in the output exactly as
    they appear in the source.

Fixed

  • Diagnostics will no longer contain control codes when output is a
    file.

  • CLI executables now fail when printing an opaque instead of
    producing garbage. This improves handling of some incorrect uses of
    auto output (#1251).

futhark - 0.22.1

Published by github-actions[bot] about 2 years ago

Removed

  • Removed prelude functions reduce_stream, map_stream,
    reduce_stream_per, and reduce_map_per.

Fixed

  • Various fixes to scalar migration (#1721).
futhark - 0.21.15

Published by github-actions[bot] about 2 years ago

Fixed

  • Corrupted OOM error messages.

  • Excessive internal fragmentation for some programs (#1715).

futhark - 0.21.14

Published by github-actions[bot] about 2 years ago

Fixed

  • replicate was broken for sizes that didn't fit in i32.

  • Transposition of empty arrays in interpreter (#1700).

  • Exotic simplification error (#1309).

  • Rare race condition could lead to leaking of error message memory in
    multicore and ispc backends (#1709).

  • Overzealous aliasing for built-in overloaded types (#1711).

futhark - 0.21.13

Published by github-actions[bot] over 2 years ago

Added

  • New fusion engine by Amar Topalovic and Walter Restelli-Nielsen.
    Fuses more, which is good for some programs and bad for others.
    Most programs see no change. This is mainly a robust foundation for
    further improvements.

  • New experimental backend: ispc. By Louis Marott Normann,
    Kristoffer August Kortbæk, William Pema Norbu Holmes Malling, and
    Oliver Bak Kjersgaard Petersen.

  • New prelude functions: hist, spread. These function as
    non-consuming variants of reduce_by_index and scatter.

  • Using == to compare arrays is now deprecated.

  • New command: futhark tokens. You probably don't care about this one.

  • In the C API, opaque types that correspond to tuples or records can
    now have their elements inspected and be created from elements
    (#1568).

  • New server protocol commands: types, fields, entry_points.

  • Tuples and records can now be passed from FutharkScript to Futhark
    entry points (#1684).

Fixed

  • Sometimes missing cases in match expressions were not detected.

  • A defective simplification rule could in very rare cases lead to
    infinite recursion in the compiler (#1685).

  • Some broken links in futhark doc output (#1686).

  • Incorrect checking of whether a function parameter is consumable
    based on its type (#1687).

  • Missing aliases for functions that return multiple aliased values
    (#1690).

  • new/values functions for GPU backends are now properly
    asynchronous (#1664). This may uncover bugs in application code.

futhark - 0.21.12

Published by github-actions[bot] over 2 years ago

Added

  • Somewhat simplified the handling of "uniqueness types" (which is a
    term we are moving away from). You should never see * in
    non-function types, and they are better thought of as effect
    indicators.

  • futhark literate: prints tracing output (and other logging
    messages that may occur) when run with -v (#1678).

  • Entry points can now be any valid Futhark identifier.

Fixed

  • futhark test -C was broken.

  • futhark_context_free() for the GPU backends neglected to free some
    memory used for internal bookkeeping, which could lead to memory
    leaks for processes that repeatedly create and destroy contexts
    (#1676).

  • FutharkScript now allows ' in names.

  • futhark lsp now handles warnings in programs that also have errors.

futhark - 0.21.11

Published by github-actions[bot] over 2 years ago

Added

  • The CUDA backend now supports compute capability 8.6 and 8.7.

  • Philip Børgesen has implemented a new optimisation for GPU backends
    that migrates scalar work to the GPU, in order to reduce
    synchronisation. This results in major speedup for some programs.

  • String literals are now allowed in input blocks.

  • Experimental and undocumented support for automatic differentiation,
    available on the secret menu.

  • Assertions and attributes are now ignored when used as size
    expressions. E.g. iota (assert p n) 0 now has size n.

  • futhark test only runs the interpreter if passed -i.

  • futhark literate now shows progress bars when run with -v.

Fixed

  • futhark lsp is now better at handling multiple files (#1647).

  • Incorrect handling of local quantification when determining type
    equivalence in during module type ascription (#1648).

  • Incorrect checking of liftedness when instantiating polymorphic
    functions during module type ascription.

  • Tightened some restrictions on the use of existential sizes that
    could otherwise lead to compiler crashes (#1650). This restriction
    is perhaps a bit too might and it may be possible to loosen it in
    the future.

  • Another defunctorisation bug (#1653). Somehow we find these every
    time Martin Elsman writes a nontrivial Futhark program.

  • futhark bench: convergence phase now does at least --runs runs.

  • Errors and warnings no longer awkwardly mixed together in console output.

  • Slightly better type errors for ambiguous sizes (#1661).

  • Better type errors for module ascription involving nested modules
    (#1660).

  • futhark doc: some formatting bugs.

  • futhark doc didn't notice all local module types (#1666).

  • Missing consumption check in optimisation could lead to ICE (#1669).

futhark - 0.21.10

Published by github-actions[bot] over 2 years ago

Added

  • New math functions: f16.erf, f32.erf, f64.erf.

  • New math functions: f16.erfc, f32.erfc, f64.erfc.

  • New math functions: f16.cbrt, f32.cbrt, f64.cbrt.

Fixed

  • Variables being indexed now have correct source spans in AST.

  • futhark lsps hover information now contains proper range information.

  • futhark query and futhark lsp incorrectly thought size
    parameters had type i32.

  • futhark doc put documentation for prelude modules in the wrong
    location (which also led to messed-up style sheets).

futhark - 0.21.9

Published by github-actions[bot] over 2 years ago

Added

  • Sun Haoran has implemented unnamed typed holes, with syntax ???.

  • Sun Haoran has implemented the beginnings of a language server:
    futhark lsp. A VSCode language extension is available on the
    marketplace, but the language server should work with any editor.

  • Crucial new command: futhark thanks.

  • The GPU backends now support a caching mechanism for JIT-compiled
    code, significantly improving startup times. Use the
    futhark_context_config_set_cache_file() in the C API, the
    --cache-file option on executables, or the --cache-extension
    option on futhark test and futhark bench. These also work for
    the non-GPU backends, but currently have no effect. (#1614)

  • Aleksander Junge has improved futhark bench such that it
    intelligently chooses how many runs to perform (#1335).

Fixed

  • Incomplete simplification would cause some instances of nested
    parallelism to require irregular allocations (#1610).

  • Missing alias checking for a simplification rule related to in-place
    updates (#1615, #1628).

  • Incorrect code generation for certain copies of transposed arrays
    (#1627).

  • Fusion would mistakenly try to treat some loops with irregular sizes
    (#1631).

  • Memory annotation bug for non-inlined functions (#1634).

futhark - 0.21.8

Published by github-actions[bot] over 2 years ago

Added

  • Slightly better parse errors (again).

  • futhark literate now supports a file: option in :img and
    :video directives (#1491).

Fixed

  • Improved hoisting of size computations. This could cause some
    regular nested parallel programs to run into compiler limitations,
    as if they were irregular.

  • Rare code generation bug for histograms (#1609).

futhark - 0.21.7

Published by github-actions[bot] over 2 years ago

Added

  • futhark check-syntax: check syntactic validity of a program
    file, without type-checking.

  • Parsing multi-file programs is now parallelised, making it
    slightly faster.

  • Reloading a large program in futhark repl is now faster, as long
    as not too many of its files have been modified (#1597).

Fixed

  • Mistake in occurs check could cause infinite loop in type checker
    for programs with type errors (#1599).
futhark - 0.21.6

Published by github-actions[bot] over 2 years ago

Added

  • futhark bench now explicitly notes when a tuning file is not
    present.

  • futhark bench, futhark test and friends are now better at
    handling fatally terminating programs (e.g. segmentation faults).

  • Generated C code is now a lot smaller for large programs, as error
    recovery has been more centralised (#1584).

Fixed

  • Some bugs in checking for local memory capacity for particularly
    exotic generated code.

  • Insufficient hoisting of allocation sizes led to problems with
    memory expansion in rare cases (#1579).

  • Conversion of floating-point NaNs and infinities to integers now
    well defined (produces zero) (#1586).

  • Better handling of OOM for certain short-lived CPU-side allocations (#1585).

futhark - 0.21.5

Published by github-actions[bot] over 2 years ago

Added

  • API functions now return more precise error codes in some cases.

  • Out-of-memory errors contain more information.

Fixed

  • Yet another in-place lowering issue (#1569).

  • Removed unnecessary bounds checks in register tiling, giving about
    1.8x speedup on e.g. matrix multiplication on newer NVIDIA GPUs.

  • A parser bug erroneously demanded whitespace in some type
    expressions (#1573).

  • Some memory was not being freed correctly when shutting down OpenCL
    and CUDA contexts, which could lead to memory leaks in processes
    that created and freed many contexts.

  • An incorrect copy-removal in some exotic cases (#1572).

  • 'restore'-functions might perform undefined pointer arithmetic when
    passed garbage.

futhark - 0.21.4

Published by github-actions[bot] almost 3 years ago

Fixed

  • A size inference bug in type checking of loops (#1565).

  • Exotic flattening bug (#1563).

  • Segmented reduce_by_index with fairly small histogram size would
    use vastly more memory than needed.

futhark - 0.21.3

Published by github-actions[bot] almost 3 years ago

Added

  • Parse errors now list possible expected tokens.

  • Lexer errors now mention the file.

Fixed

  • Overloaded number literals cannot be sum types (#1557).

  • Defective GPU code generation for vectorised non-commutative
    operatators (#1559).

  • Excessive memory usage for some programs (#1325).

futhark - 0.21.2

Published by github-actions[bot] almost 3 years ago

Added

  • New functions: reduce_by_index_2d, reduce_by_index_3d.

  • Manifests now contain compiler version information.

Fixed

  • Allocation insertion pass bug (#1546).

  • An exotic bug involving TLS and dynamically loading code generated
    by the multicore backend.

  • Unconstrained ambiguous types now default to () (#1552). This
    should essentially never have any observable impact, except that
    more programs will type check.

  • Double buffering compiler crash (#1553).

futhark - 0.21.1

Published by github-actions[bot] almost 3 years ago

Added

  • Top-level value definitions can (and should) now be declared with
    with def, although let still works.

  • New tool: futhark defs, for printing locations of top-level
    definitions.

Changed

  • def is now a reserved word.

Fixed

  • Contrived intra-group code versions with no actual parallelism would
    be given a group size of zero (#1524).
futhark - 0.20.8

Published by github-actions[bot] almost 3 years ago

Added

  • futhark repl now allows Ctrl-c to interrupt execution.

Fixed

  • Alias tracking of sum types.

  • Proper checking that a function declared to return a unique-typed
    value actually does so.

  • Faulty uniqueness checking and inference for lambdas (#1535).

  • Monomorphisation would duplicate functions under rare circumstances
    (#1537).

  • Interpreter didn't check that the arguments passed to unflatten
    made sense (#1539).

  • futhark literate now supports a $loaddata builtin function for
    passing datasets to Futhark programs.