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