Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Embedded language for high-performance array computations
Haskell Shell
Pull request Compare This branch is 251 commits ahead, 234 commits behind master.

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
accelerate-backend-kit @ b3bf305
accelerate-buildbot @ dd1c55f
accelerate-cuda @ eed426d
accelerate-examples @ 16c64d5
accelerate-fft @ f6b3e9d
accelerate-io @ 887a4c3
accelerate-multidev @ 17d23fc

An Embedded Language for Accelerated Array Computations

Data.Array.Accelerate defines an embedded language of array computations for high-performance computing in Haskell. Computations on multi-dimensional, regular arrays are expressed in the form of parameterised collective operations (such as maps, reductions, and permutations). These computations are online-compiled and executed on a range of architectures.

For more details, see our papers:

There are also slides from some fairly recent presentations:

Chapter 6 of Simon Marlow's book Parallel and Concurrent Programming in Haskell contains a tutorial introduction to Accelerate.

Trevor's PhD thesis details the design and implementation of frontend optimisations and CUDA backend.

A simple example

As a simple example, consider the computation of a dot product of two vectors of single-precision floating-point numbers:

dotp :: Acc (Vector Float) -> Acc (Vector Float) -> Acc (Scalar Float)
dotp xs ys = fold (+) 0 (zipWith (*) xs ys)

Except for the type, this code is almost the same as the corresponding Haskell code on lists of floats. The types indicate that the computation may be online-compiled for performance — for example, using it may be on-the-fly off-loaded to a GPU.


Package accelerate is available from

  • Hackage: accelerate — install with cabal install accelerate
  • GitHub: AccelerateHS/accelerate - get the source with git clone

Additional components

The following supported addons are available as separate packages on Hackage and included as submodules in the GitHub repository:

  • accelerate-cuda Backend targeting CUDA-enabled NVIDA GPUs — requires the NVIDIA CUDA SDK and hardware with compute capability 1.2 or greater (see the table on Wikipedia)
  • accelerate-examples Computational kernels and applications showcasing the use of Accelerate as well as a regression test suite (supporting function and performance testing)
  • accelerate-io Fast conversion between Accelerate arrays and other array formats (including Repa arrays)
  • accelerate-fft Fast Fourier transform implementation, with optimised implementation for the CUDA backend
  • accelerate-backend-kit Simplified internal AST to get going on writing backends
  • accelerate-buildbot Build bot for automatic performance & regression testing

Install them from Hackage with cabal install PACKAGENAME.

The following components are experimental and incomplete incomplete:

  • accelerate-llvm A framework for constructing backends targeting LLVM IR, with concrete backends for multicore CPUs and NVIDIA GPUs.

The following components are incomplete and not currently maintained. Please contact us if you are interested in working on them!


  • Glasgow Haskell Compiler (GHC), 7.8.3 or later
  • For the CUDA backend, CUDA version 5.0 or later
  • Haskell libraries as specified in the accelerate.cabal and optionally accelerate-cuda.cabal files.


  • Haddock documentation is included in the package and linked from the Hackage page.
  • Online documentation is on the GitHub wiki.
  • The idea behind the HOAS (higher-order abstract syntax) to de-Bruijn conversion used in the library is described separately.


The GitHub repository contains a submodule accelerate-examples, which provides a range of computational kernels and a few complete applications. To install these from Hackage, issue cabal install accelerate-examples. The examples include:

  • An implementation of canny edge detection
  • An interactive mandelbrot set generator
  • An N-body simulation of gravitational attraction between solid particles
  • An implementation of the PageRank algorithm
  • A simple ray-tracer
  • A particle based simulation of stable fluid flows
  • A cellular automata simulation
  • A "password recovery" tool, for dictionary lookup of MD5 hashes

Mandelbrot Raytracer

Accelerate users have also built some substantial applications of their own. Please feel free to add your own examples!

  • Henning Thielemann, patch-image: Combine a collage of overlapping images
  • apunktbau, bildpunkt: A ray-marching distance field renderer

Mailing list and contacts

The maintainers of Accelerate are Manuel M T Chakravarty and Trevor L McDonell

What's missing?

Here is a list of features that are currently missing:

  • Preliminary API (parts of the API may still change in subsequent releases)
Something went wrong with that request. Please try again.