Embedded language for high-performance array computations
Haskell C C++
Pull request Compare This branch is 1170 commits behind AccelerateHS:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


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 recent paper Accelerating Haskell Array Codes with Multicore GPUs. There are also some slightly outdated slides and a video of a talk that I gave at the Haskell Implementors Workshop 2009 (in Edinburgh): Haskell Arrays, Accelerated (Using GPUs).

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 Data.Array.Accelerate.CUDA.run it may be on-the-fly off-loaded to a GPU.


Package accelerate is available from

  • Hackage: accelerate — install with cabal install accelerate
  • GitHub: mchakravarty/accelerate - get the source with git clone https://github.com/mchakravarty/accelerate.git


  • Glasgow Haskell Compiler (GHC), 6.12.1 or later
  • Haskell libraries as specified in accelerate.cabal
  • For the CUDA backend, CUDA version 3.0 or later


The maintainer of this package is Manuel M T Chakravarty chak@cse.unsw.edu.au (aka TacticalGrace on #haskell and related channels).

Both user and developer questions and discussions are welcome at accelerate@projects.haskell.org. Sorry, this mailing list is temporarily unavailable.

What's missing?

Here is a list of features that are currently missing:

  • Reification of sharing in scalar expressions (sharing is being recovered for array computations)
  • The CUDA backend does not support arrays of type Char and Bool at the moment.
  • The CUDA backend does not implement stencil computations yet.
  • Preliminary API (the current functionality is limited)


Haddock documentation is included in the package and linked from the Hackage page. Furthermore, the source package contains a few simple examples in the accelerate-examples/ directory.

The idea behind the HOAS (higher-order abstract syntax) to de-Bruijn conversion used in the library is described separately.