Releases: diku-dk/futhark
0.15.7
Added
-
Faster index calculations for very tight GPU kernels (such as the
ones corresponding to 2D tiling). -
scan
with vectorised operators (e.g.map2 (+)
) is now faster
in some cases. -
The C API has now been documented and stabilized, including
obtaining profiling information (although this is still
unstructured).
Fixed
-
Fixed some cases of missing fusion (#953).
-
Context deinitialisation is now more complete, and should not leak
memory (or at least not nearly as much, if any). This makes it
viable to repeatedly create and free Futhark contexts in the same
process (although this can still be quite slow).
0.15.6
Added
-
Binary operators now act as left-to-right sequence points with
respect to size types. -
futhark bench
now has more colourful and hopefully readable
output. -
The compiler is now about 30% faster for most nontrivial programs.
This is due to parallelising the inlining stage, and tweaking the
default configuration of the Haskell RTS. -
futhark dataset
is now about 8-10x faster.
Fixed
0.15.5
Added
reduce_by_index
withf32
-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
Added
-
futhark pkg
now shells out tocurl
for HTTP requests. -
futhark doc
now supports proper GitHub-flavored Markdown, as it
uses thecmark-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 usescurl
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
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
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
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 inmap
. These are now properly parallelised. -
Added
concat_to
andflatten_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
andmul_hi
functions for
getting the upper part of multiplications. Thanks to @porcuquine for the contribution! -
The
f32
andf64
modules now also definesinh
,cosh
,
tanh
,asinh
,acosh
, andatanh
functions. -
The
f32
andf64
modules now also definefma
andmad
functions.
Removed
- Removed
update
,split2
,intersperse
,intercalate
,pick
,
steps
, andrange
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
Added
-
The optimiser is now somewhat better at removing unnecessary
copies of array slices. -
futhark bench
andfuthark 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 forfuthark repl
for inspecting the stack. -
e :> t
notation, which means the same ase : 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 requirer
to have a
completely known type up tof
. 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 ofval 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. Usetype^
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
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
0.13.1
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
whent
is an array (e.g.empty(i32)
is no longer allowed, you
need for exampleempty([0]i32)
). -
All input files are now assumed to be in UTF-8.