The accelerate package

[Tags:bsd3, library]

Data.Array.Accelerate defines an embedded array language for 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 may then be online compiled and executed on a range of architectures.

A simple example

As a simple example, consider the computation of a dot product of two vectors of 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 it may be on-the-fly off-loaded to the GPU.

Available backends

Currently, there are two backends:

  1. An interpreter that serves as a reference implementation of the intended semantics of the language, which is included in this package.

  2. A CUDA backend generating code for CUDA-capable NVIDIA GPUs:

Several experimental and/or incomplete backends also exist. If you are interested in helping finish these, please contact us.

  1. Cilk/ICC and OpenCL:

  2. Another OpenCL backend:

  3. A backend to the Repa array library:

Additional components

The following support packages are available:

  1. accelerate-cuda: A high-performance parallel backend targeting CUDA-enabled NVIDIA GPUs. Requires the NVIDIA CUDA SDK and, for full functionality, hardware with compute capability 1.2 or greater. See the table on Wikipedia for supported GPUs:

  2. accelerate-examples: Computational kernels and applications showcasing Accelerate, as well as performance and regression tests.

  3. accelerate-io: Fast conversion between Accelerate arrays and other formats, including Repa arrays.

  4. accelerate-fft: Computation of Discrete Fourier Transforms.

Install them from Hackage with cabal install PACKAGE

Examples and documentation

Haddock documentation is included in the package, and a tutorial is available on the GitHub wiki:

The accelerate-examples package demonstrates a range of computational kernels and several complete applications, including:

Mailing list and contacts
Release notes
Hackage note

The module documentation list generated by Hackage is incorrect. The only exposed modules should be:


Versions 0.4.0,,,,,,,,,,,,,,,,,,,,,
Dependencies array (>=0.3), base (==4.6.*), blaze-html (>=0.5), blaze-markup (>=0.5), bytestring (>=0.9), containers (>=0.3), directory (>=1.0), fclabels (==2.0.*), filepath (>=1.0), ghc-prim (>=0.2), hashable (>=1.1 && <1.3), hashtables (>=1.0 && <1.2), mtl (>=2.0), pretty (>=1.0), text (>=0.10), unix (>=2.4), unordered-containers (==0.2.*) [details]
License BSD3
Author Manuel M T Chakravarty, Robert Clifton-Everest, Gabriele Keller, Sean Lee, Ben Lever, Trevor L. McDonell, Ryan Newtown, Sean Seefried
Maintainer Manuel M T Chakravarty <>
Category Compilers/Interpreters, Concurrency, Data, Parallelism
Home page
Bug tracker
Source repository head: git clone git://
Uploaded Tue Nov 19 09:20:48 UTC 2013 by TrevorMcDonell
Distributions LTSHaskell:, NixOS:, Stackage:, Tumbleweed:
Downloads 10605 total (153 in the last 30 days)
1 []
Status Docs available [build log]
Successful builds reported [all 1 reports]
Hackage Matrix CI


  • Data
    • Array
      • Data.Array.Accelerate
        • Data.Array.Accelerate.AST
        • Analysis
          • Data.Array.Accelerate.Analysis.Match
          • Data.Array.Accelerate.Analysis.Shape
          • Data.Array.Accelerate.Analysis.Stencil
          • Data.Array.Accelerate.Analysis.Type
        • Array
          • Data.Array.Accelerate.Array.Data
          • Data.Array.Accelerate.Array.Representation
          • Data.Array.Accelerate.Array.Sugar
        • Data.Array.Accelerate.Debug
        • Data.Array.Accelerate.Interpreter
        • Data.Array.Accelerate.Pretty
        • Data.Array.Accelerate.Smart
        • Data.Array.Accelerate.Trafo
          • Data.Array.Accelerate.Trafo.Sharing
        • Data.Array.Accelerate.Tuple
        • Data.Array.Accelerate.Type




Enable tracing message flags. These are read from the command-line arguments, which is convenient but may cause problems interacting with the user program, so are disabled by default. The available options are:

  • -ddump-sharing: print sharing recovery information

  • -ddump-simpl-stats: dump statistics counts from the simplifier phase

  • -ddump-simpl-iterations: dump the program after each iteration of the simplifier

  • -dverbose: other, uncategorised messages


Enable HTML and Graphviz pretty printing.


Enable bounds checking


Enable bounds checking in unsafe operations


Enable internal consistency checks


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees