Releases: diku-dk/futhark
0.25.5
0.25.4
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
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
scatter
s 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
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
0.25.1
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
andflatten_to
. They are often
not necessary now, and otherwiseresize
is available.
Changed
-
The prelude functions
flatten
andunflatten
(and their
multidimensional variants), as well assplit
, 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).
-
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
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
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
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
0.23.1
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 asgit 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
andfuthark 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
andhist
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
Added
-
futhark literate
now supports an:audio
directive for producing audio
files from arrays ofi8
(#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).