Developer Blog
This is where we post announcements or guides that do not fit anywhere else. Blog posts are not necessarily updated when the language and compiler changes, so not all information may be up to date. If you find something that doesn't work, please notify us, and we'll fix it (if it's small) or put a notice in the blog post.The Futhark Formatter
Now your Futhark code can look good even if it is not good. Read more...
Why Is the Futhark Compiler so Bad at Inlining?
Picking your battles. Read more...
Faster OpenCL Float Atomics
Friendly folks on the Internet published some code we can use. Read more...
When is it OK to modify the numerical behaviour of loops?
A dilemma caused by a recent program interacting with an old optimisation. Read more...
Comparing the performance of OpenCL, CUDA, and HIP
A performance comparison of Futhark's three GPU backends, including the reasons for the differences. Read more...
Large array literals
How do you deal with programs that are not only poorly written by normal standards, but are in fact not written by humans at all? Read more...
AUTOMAP: How to do NumPy-style broadcasting in Futhark (but better)
A blog post about AUTOMAP. Read more...
How we test(ed) the Futhark compiler
A description of how the testing tools for the Futhark compiler have improved over time. Read more...
Avoiding RNG bugs through uniqueness types
A programmer complained about a source of bugs, and this is how I think it could be fixed. Read more...
Evolution of Futhark's Array Representation
How the compiler represents the most important data structure in the language. Read more...
Quantifying Student Projects
The university produces a source of free labour, and this is what we get out of it. Read more...
End of a compiler optimisation
This used to make programs faster (maybe?), but apparently not anymore Read more...
Bridging Futhark and SML
Connecting Futhark to the industrial Standard ML language will surely bring us into the mainstream. Read more...
Futhark 0.25.3 released
This one has a new GPU backend. Read more...
Futhark 0.25.1 released
Now with even more dependent types. Read more...
How should Futhark be written?
When we add enough features, suddenly we have choices to make. Read more...
Static and dynamic challenges of size types
We're growing the Futhark type system yet again, and this is why it's difficult. Read more...
Why are sizes signed?
Who knows, maybe there is a cool algebra where negative array sizes make sense. Read more...
On Nontermination and Optimisation in Futhark
How fast can you make an infinite loop go anyway? Read more...
Solving a parallel programming problem with a list homomorphism
Or the clickbait title: Outperforming C, Rust, etc with Futhark, list homomorphisms, an expensive GPU, and ignoring the rules. Read more...
How we make the Futhark compiler crash
One of the best choices we made in the development of the compiler. Read more...
Reflections on Advent of Code 2022 in Futhark
Someone else did it last year, so we had to do it again. Read more...
Generating audio with literate Futhark
This post shows how to generate music using literate Futhark. Read more...
A case study in parallelisation: Advent of Code 2022, day 9
This problem does not look very parallel at first glance, but actually allows a quite elegant implementation. Read more...
In-place mapping and the pleasure of beautiful code nobody will ever see
We implemented a fancy new optimisation but perhaps forgot the original simple motivation. Read more...
Array short-circuiting
In-place updates without overhead. Read more...
Futhark on The Array Cast
Mingling with the real array languages. Read more...
End of a language feature
Going Cronus on Futhark. Read more...
Futhark 0.21.13 released
New backend, new fusion, lots of bugs fixed. Read more...
How Futhark talks to its friends
Subtle design points in the Futhark C API. Read more...
Uniqueness Types and In-Place Updates
An apologia for one of Futhark's more exotic features. Read more...
Futhark 0.21.9: now with language server and adaptive benchmarking
It's good be an academic. Read more...
The final problem
Finally we also have to worry about stale caches. Read more...
Futhark is a low level language
Is this title clickbait? Read inside to find out! Read more...
Cost models are contracts
Make sure to read the fine print. Read more...
The past and present of Futhark
Where we came from, where we are bumbling towards. Read more...
Explicit quantification of existential sizes
The type system is growing again. Read more...
The Futhark Error Index
See if your favourite is here! Read more...
Futhark 0.20.1 released, with reflections on stability
A very tiny amount of your code is broken! Read more...
Futhark in the browser
It works, but you probably don't want to use it just yet. Read more...
On prefix operators
They're (mostly) gone now. Read more...
Supporting half-precision floats is really annoying
I just added support for half-precision floats to Futhark, and it was much more annoying than expected. Read more...
How Futhark represents values at runtime
Futhark doesn't do it how most other functional languages do it. Read more...
There is no escape from Futhark
Why Futhark is more like old Pascal than old C. Read more...
Anatomy of a type checker bug
The type checker had a soundness bug and here is how I solved it. Read more...
Futhark 0.19.1 released
Feels like students did all the work for this one. Read more...
Futhark server mode and Literate Futhark
This post introduces yet another half-baked scripting language designed in less than two weeks. Read more...
Design decisions I do not regret
Not everything in Futhark is bad or dubious, and here's some examples. Read more...
A comparison of Futhark and Dex
Dex is another interesting functional array language, and this post looks at how it compares to Futhark. Read more...
Will Futhark work on Apple Silicon?
People write these posts for all kinds of languages these days, so I guess we should too. Read more...
Futhark 0.18.2 released
Lots of bugfixes, but not the ones we expected. Read more...
Futhark 0.18.1 released, breaking all your code
All of your code is broken. Read more...
Retrospective on an implementation of the Poseidon hash function in Futhark
A programmer from the Filecoin project wanted to use Futhark, which in the end made the compiler much better. Read more...
Futhark 0.17.2 released
Inching towards doubling the number of bits in a size. Read more...
An unavoidable performance regression
Our generated code got a bit slower for some programs. Read more...
How Futhark implements bounds checking on the GPU
GPUs present challenges for something as common as bounds checking. Here is how we do it. Read more...
Futhark 0.16.1 released
Incremental flattening is finally on by default! Read more...
Is Futhark getting faster or slower?
A historical investigation of the performance of the Futhark compiler over time. Read more...
Attributes in Futhark
A design rationale for Futhark's attributes, a mechanism for attaching freeform metadata to expressions. Read more...
Higher-order parallel programming
An explanation of the higher-order parallel programming model used by Futhark, and why we think it is superior to simpler first-order models. Read more...
Statically linking the Futhark compiler
My experiences with placing statically linked binaries in the Futhark binary releases. Read more...
Futhark 0.15.1 released - now with size types!
Size types are here. Read more...
How we keep the lights on
An exciting tour of the various free services we leech on, as well as the dubious server setups that keep the Futhark project running. Read more...
Futhark 0.14.1 released
First release of the decade. Read more...
Design Flaws in Futhark
Futhark is imperfect, and some of its imperfections are harder to fix than others. Read more...
Futhark 0.13.1 released
Very little changed, but many bugs fixed Read more...
Beating C with Futhark running on GPU
With Futhark, you don't have to be smart to make your code run fast, you just need to be able to afford an expensive GPU. Read more...
Beginning a collection of Futhark examples
All the cool languages are writing collections of examples, so I guess we do the same and see if cargo shows up. Read more...
Futhark 0.12.1 released
Sum types! Read more...
Towards Size Types in Futhark
As is the fate of every language to come out of a university department, it is time to make the Futhark type system more complicated. Read more...
Running Futhark on the NVIDIA Jetson Nano
How to run Futhark code, and the Futhark compiler, on NVIDIAs small SoC. Read more...
Futhark 0.11.1 released
A release with few user-visible features, but significantly improved performance and memory consumption for some programs. Read more...
What is the minimal basis for Futhark?
An investigation into how much we can reduce the compiler intrinsics while still maintaining asymptotic guarantees. Read more...
Futhark 0.10.1 released
Another one of these managed to escape. Read more...
Incremental flattening for nested data parallelism on the GPU
The presentation given at PPoPP 2019 turned into a blog post. Read more...
Futhark 0.9.1 released - now with CUDA backend
The main addition in this release is a new student-developed compiler backend Read more...
Giving programmers what they want, or what they ask for
How exactly should the Futhark compiler behave when programmers use tiny arrays for convenience? Read more...
Futhark 0.8.1 released, with reflections on Advent of Code
It's a Christmas miracle! Read more...
Why Futhark (sometimes) goes wrong
The Futhark compiler will sometimes refuse to compile a program, possibly with an incomprehensible apology about some compiler limitation. In this post, I will try to explain what exactly that means, why it's not easy to fix, and how we might fix it eventually. Read more...
Futhark 0.7.1 released, now with C# backend and efficient histograms on GPU
We sure did break compatibility this time. Read more...
The Futhark Debugger
We implemented some tooling to make it easier to debug faulty Futhark programs. Read more...
Futhark 0.6.3 released
We didn't even break compatibility this time. Read more...
The Present Futhark Package Manager
We wrote a package manager for Futhark. Read more...
The Future Futhark Package Manager
It's time to write a package manager for Futhark. Read more...
Futhark 0.6.1 released
Hot off the presses, get it while the cache is still warm! Read more...
Python gotta go faster
A higher-performance way to call Futhark from Python. Read more...
Designing a Programming Language for the Desert
The design of Futhark and its assorted tools is driven by constraints based on its narrow niche. This blog post explains some of them. Read more...
Futhark 0.5.1 released
We made another one! Read more...
Futhark 0.4.0 released
We released another version of Futhark, with very large improvements to the source language (higher-order functions and type inference). Read more...
Futhark with Fangs!
The first web framework (sort of) for Futhark. Also an attempt at bringing us into compliance with Wirth's Law. Read more...
Futhark 0.3.0 released
We released another version of Futhark. This one doesn't have that many externally visible changes, but still contains some solid improvements. Read more...
How Futhark manages GPU memory
We recently changed our memory allocation strategy for code generated by the Futhark compiler. The impact was fairly dramatic. Read more...
Reflections on a PhD accidentally spent on language design
I spent over three years on researching compiler optimisations, and accidentally also designed a programming language along the way. Here are some thoughts on how that came about. Read more...
A strategy for documenting Futhark
A discussion of our plans for how to structure Futhark's current and future documentation. Read more...
Futhark 0.2.0 released
We released another version of Futhark. This post elaborates on some of the changes. Read more...
Dot Notation for Records
Futhark has switched from using an SML-style notation for accessing the fields of records, to more conventional dot notation. This post discusses why, and the challenges we encountered. Read more...
Block Comments are a Bad Idea
Futhark does not support block comments, and this post elaborates why. Read more...
Futhark 0.1.0 released
Announcement for the first ever release of the Futhark compiler. Read more...
Calling Futhark from C and Haskell
We recently taught the Futhark native code generator how to generate reusable library code. This post shows how to call the generated code directly from C, or through Haskell's FFI. Any language that has a C FFI can use the same technique. Read more...
Streaming Combinators and Extracting Flat Parallelism
The presentation given at PLDI 2017 turned into a blog post. Basic introduction to Futhark, including novel parallel combinators used for efficient sequentialisation, as well as Futhark's approach to handling nested parallelism. Read more...
Language Design Checklist for Futhark
Filling out the Language Design Checklist form for Futhark. Read more...
Syntactic Support for Roman Numerals
The motivation behind Futhark's newest syntactical addition. Read more...
Videos from FOSDEM and Lambda Days now available
Videos from recent talks on Futhark have been published. Read more...
The Futhark Record System
The design of the record system in Futhark, with some notes on the design space and why we chose what we did. Read more...
The Futhark Module System
We recently added a higher-order module system to Futhark - this posts describes how it works, and why we chose the design we did. Read more...
Futhark at LambdaDays 2017
There will be a presentation on Futhark at the Lambda Days 2017 conference. Read more...
Futhark is going to FOSDEM'17
A Futhark presentation will be given at the HPC track at FOSDEM in 2017 Read more...
Two Syntax Design Problems in Futhark and Their Resolution
A tale of two times we had to put some serious thought into details of the Futhark syntax. Read more...
A Port of Falling Turnip to Futhark
Falling Turnip is a falling-sand style physics playground implemented using Haskell and the Repa library. I ported this program to Futhark and gave it a Pygame-based frontend. Read more...
Designing a Functional Language for GPU Execution
Why Futhark has so few features. Read more...
Futhark as target language for an APL compiler
We have been experimenting with using Futhark as an optimisation and code generation backend for a research APL compiler. Read more...
Creating Interactive Futhark GUIs
Using PyGame, NumPy, and PyOpenCL to interact with Futhark programs in simple graphical user interfaces. Read more...
Using Futhark with PyOpenCL
Compiling a Futhark program into an ordinary reusable Python module with calls to PyOpenCL. Read more...