accelerate: An embedded language for accelerated array processing

[ bsd3, compilers-interpreters, concurrency, data, library, parallelism ] [ Propose Tags ]
Versions 0.4.0,,,,,,,,,,,,,,,,,,,,,,,
Change log
Dependencies array (>=0.3 && <0.6), base (>=4.7 && <4.10), blaze‑html (>=0.5), blaze‑markup (>=0.5), bytestring (>=0.9), containers (>=0.3 && <0.6), directory (>=1.0), fclabels (==2.0.*), filepath (>=1.0), ghc‑prim, hashable (>=1.1 && <1.3), hashtables (>=1.0 && <1.3), mtl (>=2.0), pretty (>=1.0 && <1.2), template‑haskell, text (>=0.10), unix (>=2.4), unordered‑containers (==0.2.*) [details]
License BSD-3-Clause
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 <>
Revised Revision 1 made by TrevorMcDonell at Mon Jun 6 04:36:59 UTC 2016
Category Compilers/Interpreters, Concurrency, Data, Parallelism
Home page
Bug tracker
Source repo this: git clone git:// -b release/0.15(tag
Uploaded by TrevorMcDonell at Fri May 1 07:20:57 UTC 2015
Distributions LTSHaskell:, NixOS:, openSUSE:
Downloads 15013 total (107 in the last 30 days)
Rating 2.25 (votes: 2) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2015-05-01 [all 1 reports]
Hackage Matrix CI

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 particularly interested in any of these, especially with helping to finish them, please contact us.

  1. Cilk/ICC and OpenCL:

  2. Another OpenCL backend:

  3. A backend to the Repa array library:

  4. An infrastructure for generating LLVM code, with backends targeting multicore CPUs and NVIDIA GPUs:

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.1 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 vector and repa.

  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
Hackage note

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


  • 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
        • Data.Array.Accelerate.Debug
        • Data.Array.Accelerate.Error
        • Data.Array.Accelerate.Interpreter
        • Data.Array.Accelerate.Pretty
        • Data.Array.Accelerate.Smart
        • Data.Array.Accelerate.Trafo
        • 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


Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

For package maintainers and hackage trustees