Releases: diku-dk/futhark
0.10.2
Added
-
reduce_by_index
is now a good bit faster on operators whose
arguments are two 32-bit values. -
The type checker warns on size annotations for function parameters
and return types that will not be visible from the outside,
because they refer to names nested inside tuples or records. For
example, the functionlet f (n: i32, m: i32): [n][m]i32 = ...
will cause such a warning. It should instead be written
let f (n: i32) (m: i32): [n][m]i32 = ...
-
A new library function
futhark_context_config_select_device_interactively()
has been
added.
Fixed
0.10.1
Added
-
Using definitions from the
intrinsic
module outside the prelude
now results in a warning. -
reduce_by_index
with vectorised operators (e.g.map2 (+)
) is
orders of magnitude faster than before. -
Executables generated with the
pyopencl
backend now support the
options--default-tile-size
,--default-group-size
,
--default-num-groups
,--default-threshold
, and--size
. -
Executables generated with
c
andopencl
now print a help text
if run with invalid options. Thepy
andpyopencl
backends
already did this. -
Generated executables now support a
--tuning
flag for passing
many tuned sizes in a file. -
Executables generated with the
cuda
backend now take an
--nvrtc-option
option. -
Executables generated with the
opencl
backend now take a
--build-option
option.
Removed
- The old
futhark-*
executables have been removed.
Changed
-
If an array is passed for a function parameter of a polymorphic
type, all arrays passed for parameters of that type must have the
same shape. For example, given a functionlet pair 't (x: t) (y: t) = (x, y)
The application
pair [1] [2,3]
will now fail at run-time. -
futhark test
now numbers un-named data sets from 1 rather than
0. This only affects the text output and the generated JSON
files, and fits the tuple element ordering in Futhark. -
String literals are now of type
[]u8
and contain UTF-8 encoded
bytes.
Fixed
-
An significant problematic interaction between empty arrays and
inner size declarations has been closed (#714). This follows a
range of lesser empty-array fixes from 0.9.1. -
futhark datacmp
now prints to stdout, not stderr. -
Fixed a major potential out-of-bounds access when sequentialising
reduce_by_index
(in most cases the bug was hidden by subsequent
C compiler optimisations). -
The result of an anonymous function is now also forbidden from
aliasing a global variable, just as with named functions. -
Parallel scans now work correctly when using a CPU OpenCL
implementation. -
reduce_by_index
was broken on newer NVIDIA GPUs when using fancy
operators. This has been fixed.
0.9.1
Added
-
futhark cuda
: a new CUDA backend by Jakob Stokholm Bertelsen. -
New command for comparing data files:
futhark datacmp
. -
An
:mtype
command forfuthark repl
that shows the type of a
module expression. -
futhark run
takes a-w
option for disabling warnings.
Changed
-
Major command reorganisation: all Futhark programs have been
combined into a single all-powerfulfuthark
program. Instead of
e.g.futhark-foo
, usefuthark foo
. Wrappers will be kept
around under the old names for a little while.futharki
has
been split into two commands:futhark repl
andfuthark run
.
Also,py
has becomepython
andcs
has becomecsharp
, but
pyopencl
andcsopencl
have remained as they were. -
The result of a function is now forbidden from aliasing a global
variable. Surprisingly little code is affected by this. -
A global definition may not be ascribed a unique type. This never
had any effect in the first place, but now the compiler will
explicitly complain. -
Source spans are now printed in a slightly different format, with
ending the line number omitted when it is the same as the start
line number.
Fixed
-
futharki
now reports source locations oftrace
expressions
properly. -
The type checker now properly complains if you try to define a
type abbreviation that has unused size parameters.
0.8.1
Added
-
Now warns when
/futlib/...
files are redundantly imported. -
futharki
now prints warnings for files that are ":load"ed. -
The compiler now warns when entry points are declared with types
that will become unnamed and opaque, and thus impossible to
provide from the outside. -
Type variables invented by the type checker will now have a
unicode subscript to distinguish them from type parameters
originating in the source code. -
futhark-test
andfuthark-bench
now support generating random
test data. -
The library backends now generate proper names for arrays of
opaque values. -
The parser now permits empty programs.
-
Most transpositions are now a good bit faster, especially on
NVIDIA GPUs.
Removed
- The
<-
symbol can no longer be used for in-place updates and
record updates (deprecated in 0.7.3).
Changed
- Entry points that accept a single tuple-typed parameter are no
longer silently rewritten to accept multiple parameters.
Fixed
-
The
:type
command infutharki
can now handle polymorphic
expressions (#669). -
Fixed serious bug related to chaining record updates.
-
Fixed type inference of record fields (#677).
-
futharki
no longer goes in an infinite loop if afor
loop
contains a negative upper bound. -
Overloaded number types can no longer carry aliases (#682).
0.7.4
0.7.3
Added
-
Significant performance changes: there is now a constant extra
compilation overhead (less than 200ms on most machines). However,
the rest of the compiler is 30-40% faster (or more in some cases). -
A warning when ambiguously typed expressions are assigned a
default (i32
orf64
). -
In-place updates and record updates are now written with
=
instead of<-
. The latter is deprecated and will be removed in
the next major version (#650).
Fixed
-
Polymorphic value bindings now work properly with module type
ascription. -
The type checker no longer requires types used inside local
functions to be unambiguous at the point where the local function
is defined. They must still be unambiguous by the time the
top-level function ends. This is similar to what other ML
languages do. -
futhark-bench
now writes "μs" instead of "us". -
Type inference for infix operators now works properly.
0.7.2
Added
-
futhark-pkg
now supports GitLab. -
futhark-test
s--notty
option now has a--no-terminal
alias.
--notty
is deprecated, but still works. -
futhark-test
now supports multiple entry points per test block. -
Functional record updates:
r with f <- x
.
Fixed
-
Fix the
-C
option forfuthark-test
. -
Fixed incorrect type of
reduce_by_index
. -
Segmented
reduce_by_index
now uses much less memory.
0.7.1
Added
-
C# backend by Mikkel Storgaard Knudsen (
futhark-cs
/futhark-csopencl
). -
futhark-test
andfuthark-bench
now take a--runner
option. -
futharki
now uses a new interpreter that directly interprets the
source language, rather than operating on the desugared core
language. In practice, this means that the interactive mode is
better, but that interpretation is also much slower. -
A
trace
function that is semanticallyid
, but makesfutharki
print out the value. -
A
break
function that is semanticallyid
, but makesfutharki
stop and provide the opportunity to inspect variables in scope. -
A new SOAC,
reduce_by_index
, for expressing generalised
reductions (sometimes called histograms). Designed and
implemented by Sune Hellfritzsch.
Removed
-
Most of futlib has been removed. Use external packages instead:
-
futlib/colour
=> https://github.com/athas/matte -
futlib/complex
=> https://github.com/diku-dk/complex -
futlib/date
=> https://github.com/diku-dk/date -
futlib/fft
=> https://github.com/diku-dk/fft -
futlib/linalg
=> https://github.com/diku-dk/fft -
futlib/merge_sort
,futlib/radix_sort
=> https://github.com/diku-dk/sorts -
futlib/random
=> https://github.com/diku-dk/cpprandom -
futlib/segmented
=> https://github.com/diku-dk/segmented -
futlib/sobol
=> https://github.com/diku-dk/sobol -
futlib/vector
=> https://github.com/athas/vector
No replacement:
futlib/mss
,futlib/lss
. -
-
zip6
/zip7
/zip8
and theirunzip
variants have been removed.
If you build gigantic tuples, you're on your own. -
The
>>>
operator has been removed. Use an unsigned integer type
if you want zero-extended right shifts.
Changed
- The
largest
/smallest
values for numeric modules have been
renamedhighest
/lowest
.
Fixed
- Many small things.
0.6.3
Added
-
Added a package manager:
futhark-pkg
. See also the
documentation. -
Added
log2
andlog10
functions tof32
andf64
. -
Module type refinement (
with
) now permits refining parametric
types. -
Better error message when invalid values are passed to generated
Python entry points. -
futhark-doc
now ignores files whose doc comment is the word
"ignore". -
copy
now works on values of any type, not just arrays. -
Better type inference for array indexing.
Fixed
0.6.2
Added
-
Bounds checking errors now show the erroneous index and the size
of the indexed array. Some other size-related errors also show
more information, but it will be a while before they are all
converted (and say something useful - it's not entirely
straightforward). -
Opaque types now have significantly more readable names,
especially if you add manual size annotations to the entry point
definitions. -
Backticked infix operators can now be used in operator sections.
Fixed
-
f64.e
is no longer pi. -
Generated C library code will no longer
abort()
on application
errors (#584). -
Fix file imports on Windows.
-
futhark-c
andfuthark-opencl
now generates thread-safe code (#586). -
Significantly better behaviour in OOM situations.
-
Fixed an unsound interaction between in-place updates and
parametric polymorphism (#589).