The accelerate package
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: http://hackage.haskell.org/package/accelerate-cuda
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: https://github.com/AccelerateHS/accelerate-backend-kit
2. Another OpenCL backend: https://github.com/HIPERFIT/accelerate-opencl
3. A backend to the Repa array library: https://github.com/blambo/accelerate-repa
4. An infrastructure for generating LLVM code, with backends targeting multicore CPUs and NVIDIA GPUs: https://github.com/AccelerateHS/accelerate-llvm/
- 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: http://en.wikipedia.org/wiki/CUDA#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: https://github.com/AccelerateHS/accelerate/wiki
The accelerate-examples package demonstrates a range of computational kernels and several complete applications, including:
An implementation of the Canny edge detection algorithm
An interactive Mandelbrot set generator
A particle-based simulation of stable fluid flows
An n-body simulation of gravitational attraction between solid particles
A cellular automata simulation
A "password recovery" tool, for dictionary lookup of MD5 hashes
A simple interactive ray tracer
- Mailing list and contacts
Mailing list: firstname.lastname@example.org (discussion of both use and development welcome).
Sign up for the mailing list here: http://groups.google.com/group/accelerate-haskell
Bug reports and issue tracking: https://github.com/AccelerateHS/accelerate/issues
- Release notes
0.15.0.0: Bug fixes and performance improvements.
0.14.0.0: New iteration constructs. Additional Prelude-like functions. Improved code generation and fusion optimisation. Concurrent kernel execution. Bug fixes.
0.13.0.0: New array fusion optimisation. New foreign function interface for array and scalar expressions. Additional Prelude-like functions. New example programs. Bug fixes and performance improvements.
0.12.0.0: Full sharing recovery in scalar expressions and array computations. Two new example applications in package accelerate-examples: Real-time Canny edge detection and fluid flow simulator (both including a graphical frontend). Bug fixes.
0.11.0.0: New Prelude-like functions zip*, unzip*, fill, enumFrom*, tail, init, drop, take, slit, gather*, scatter*, and shapeSize. New simplified AST (in package accelerate-backend-kit) for backend writers who want to avoid the complexities of the type-safe AST.
0.10.0.0: Complete sharing recovery for scalar expressions (but currently disabled by default). Also bug fixes in array sharing recovery and a few new convenience functions.
0.9.0.0: Streaming, precompilation, Repa-style indices, stencils, more scans, rank-polymorphic fold, generate, block I/O & many bug fixes.
0.8.1.0: Bug fixes and some performance tweaks.
0.8.0.0: replicate, slice and foldSeg supported in the CUDA backend; frontend and interpreter support for stencil. Bug fixes.
0.7.1.0: The CUDA backend and a number of scalar functions.
- Hackage note
The module documentation list generated by Hackage is incorrect. The only exposed modules should be:
- No changelog available
|Versions||0.4.0, 0.5.0.0, 0.6.0.0, 0.7.1.0, 0.8.0.0, 0.8.1.0, 0.9.0.0, 0.9.0.1, 0.10.0.0, 0.12.0.0, 0.12.1.0, 0.12.2.0, 0.13.0.0, 0.13.0.1, 0.13.0.2, 0.13.0.3, 0.13.0.4, 0.13.0.5, 0.14.0.0, 0.15.0.0|
|Dependencies||array (>=0.3), base (==4.7.*), containers (>=0.3), fclabels (>=2.0), ghc-prim (>=0.2), hashable (>=1.1), hashtables (>=1.0), pretty (>=1.0), template-haskell (==2.9.*), unordered-containers (>=0.2)|
|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 <email@example.com>|
|Category||Compilers/Interpreters, Concurrency, Data, Parallelism|
|Source repository||this: git clone git://github.com/AccelerateHS/accelerate.git -b release/0.15(tag 0.15.0.0)|
|Uploaded||Mon Sep 15 01:03:08 UTC 2014 by TrevorMcDonell|
|Updated||Mon Sep 15 17:38:56 UTC 2014 by TrevorMcDonell to revision 2|
|Downloads||5118 total (205 in last 30 days)|
|Status||Docs uploaded by user|
Build status unknown [no reports yet]
|debug||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||Disabled|
|more-pp||Enable HTML and Graphviz pretty printing.||Disabled|
|bounds-checks||Enable bounds checking||Enabled|
|unsafe-checks||Enable bounds checking in unsafe operations||Disabled|
|internal-checks||Enable internal consistency checks||Disabled|
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
- accelerate-0.15.0.0.tar.gz [browse] (Cabal source package)
- Package description (included in the package)
For package maintainers and hackage trustees