Back to News
Development

Futhark by Example

May 16, 2026Source

The Futhark Programming Language

High-performance purely functional data-parallel array programming

Overview

Examples

Docs

Publications

Gotta Go Fast!

Get Involved

Blog

Fork me on GitHub

Futhark by Example

The following is a hands-on introduction to Futhark through a collection of commented programs, listed in roughly increasing order of complexity. You can load the programs into the interpreter to experiment with them. For a conventional introduction to the language, Parallel Programming in Futhark may be a better choice.

For more examples, you can check our implemented benchmarks. We also maintain a list of projects using Futhark.

Some of the example programs use directives for plotting or rendering graphics.

Basic language features

Basic usage with the factorial function

Primitive values

Converting a value to a different type

Mathematical functions

Functions

Arrays

Minimum and maximum

Type ascriptions

Basic parallelism

Tuples and records

Size coercions

Ranges

Backtick operators

Scans and reductions

Parametric polymorphism

Polymorphic minimum and maximum

Gather and scatter

Exclusive scans

Exclusive prefix sum

Pipe operators

Complex ranges

Sum types and pattern matching

Loops

Flattening and unflattening arrays

In-place updates

Programming techniques

Benchmarking

Counting elements that satisfy property

Index of smallest element (argmin)

Reducing the result of a filter

Scattering the result of a filter

Size parameters

Matrix multiplication

Pairwise L₁ distances

Outer product

Comparing arrays for equality

Searching

Option type

Computing histograms

Moving average

Means

Swapping two elements of an array

Integer logarithm

Radix sort

Radix sort by key

Merge sort

Removing duplicates

Abstract data types

Complex numbers

Testing for associativity

Reducing or scanning without a neutral element

Holes

Kahan summation

Random numbers

Gaussian blur (with Python integration)

Three-dimensional vectors

Faking nominal types

Triangular matrices

Binary search

AD with dual numbers

Variance

Matching parentheses

Evaluating polynomials

Line fitting

Decoding MNIST data files

Automatic differentiation

Forward-mode automatic differentiation

Reverse-mode automatic differentiation

Newton’s Method

Literate Futhark

Basic use of literate Futhark

Generating videos with literate Futhark

Reading and writing files in literate Futhark

Plotting

Literate Futhark allows direct use of gnuplot. These examples show simple and common cases.

Plotting a histogram

Examples from Dex

The following examples are ported from Dex, a dependently typed functional array language that uses a somewhat different approach to describing loop processing. We've tried to keep the original naming scheme and programming style.

Prelude

Mandelbrot set

Multi-step ray tracer

Monte Carlo estimates of pi

Brownian motion

Sierpinski triangle

External examples

OCaml-GPU wordcount example by calling Futhark.

Projects using Futhark

The majority of written Futhark code is probably still Futhark’s own test and benchmark suites. However, there are some programs that have been written in Futhark because it was a good tool for the job, and not just to test the compiler. A possibly incomplete list:

Diving Beet is a falling sand game, which is a kind of simple particle simulator toy. Its main purpose is to produce pretty effects. There is a blog post with details and a video.

Futball is a game about avoiding getting hit by balls. The rendering engine is a ray tracer written in Futhark.

Futcam is an application that applies stacks of interactively configurable filters to a webcam stream. Futhark is used to implement the filters.

Futracer is a fairly slow brute-force ray tracer written in Futhark.

Futswirl is a fractal generator based on iterated function systems.

Neptune is an implementation of the Poseidon hash function tuned for Filecoin, where the GPU parts have been implemented in Futhark.

Palathark is a Futhark implementation of the lattice Boltzmann method.

Ray Tracing in One Weekend in Futhark and R

Comments (0)

Login or Register to apply