accelerate: An embedded language for accelerated array processing
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.LLVM.PTX
it may be on-the-fly off-loaded to the GPU.
See the Data.Array.Accelerate module for further information.
- Additional components
The following supported add-ons are available as separate packages. Install
them from Hackage with cabal install <package>
accelerate-llvm-native
: Backend supporting parallel execution on multicore CPUs.accelerate-llvm-ptx
: Backend supporting parallel execution on CUDA-capable NVIDIA GPUs. Requires a GPU with compute capability 2.0 or greater. See the following table for supported GPUs: http://en.wikipedia.org/wiki/CUDA#Supported_GPUsaccelerate-examples
: Computational kernels and applications demonstrating the use of Accelerate.accelerate-io*
: Fast conversions between Accelerate arrays and other array and data formats.accelerate-fft
: Discrete Fourier transforms, with FFI bindings to optimised implementations.accelerate-blas
: Numeric linear algebra, with FFI bindings to optimised implementations.accelerate-bignum
: Fixed-width large integer arithmetic.containers-accelerate
: Container types for use with Accelerate.hashable-accelerate
: Class for types which can be converted to a hash value.colour-accelerate
: Colour representations in Accelerate (RGB, sRGB, HSV, and HSL).gloss-accelerate
: Generate gloss pictures from Accelerate.gloss-raster-accelerate
: Parallel rendering of raster images and animations.lens-accelerate
: Lens operators for Accelerate types.linear-accelerate
: Linear vector spaces in Accelerate.mwc-random-accelerate
: Generate Accelerate arrays filled with high quality pseudorandom numbers.
- Examples and documentation
Haddock documentation is included in the package
The accelerate-examples
package demonstrates a range of computational
kernels and several complete applications, including:
An implementation of the Canny edge detection algorithm
Interactive Mandelbrot and Julia set generators
A particle-based simulation of stable fluid flows
An n-body simulation of gravitational attraction between solid particles
An implementation of the PageRank algorithm
A simple interactive ray tracer
A cellular automata simulation
A "password recovery" tool, for dictionary lookup of MD5 hashes
lulesh-accelerate
is an implementation of the Livermore Unstructured
Lagrangian Explicit Shock Hydrodynamics (LULESH) mini-app. LULESH represents a
typical hydrodynamics code such as ALE3D, but is highly simplified and
hard-coded to solve the Sedov blast problem on an unstructured hexahedron
mesh.
- Mailing list and contacts
Gitter chat: https://gitter.im/AccelerateHS/Lobby
Mailing list: accelerate-haskell@googlegroups.com (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
[Skip to Readme]
Modules
[Index] [Quick Jump]
- Data
- Array
- Data.Array.Accelerate
- Data.Array.Accelerate.AST
- Data.Array.Accelerate.AST.Environment
- Data.Array.Accelerate.AST.Idx
- Data.Array.Accelerate.AST.LeftHandSide
- Data.Array.Accelerate.AST.Var
- Analysis
- Data.Array.Accelerate.Analysis.Hash
- Data.Array.Accelerate.Analysis.Match
- Array
- Data.Array.Accelerate.Array.Data
- Data.Array.Accelerate.Array.Remote
- Data.Array.Accelerate.Array.Remote.Class
- Data.Array.Accelerate.Array.Remote.LRU
- Data.Array.Accelerate.Array.Remote.Table
- Data.Array.Accelerate.Array.Unique
- Data.Array.Accelerate.Async
- Data
- Data.Array.Accelerate.Debug
- Data.Array.Accelerate.Error
- Data.Array.Accelerate.Interpreter
- Data.Array.Accelerate.Lifetime
- Data.Array.Accelerate.Pretty
- Representation
- Data.Array.Accelerate.Representation.Array
- Data.Array.Accelerate.Representation.Elt
- Data.Array.Accelerate.Representation.Shape
- Data.Array.Accelerate.Representation.Slice
- Data.Array.Accelerate.Representation.Stencil
- Data.Array.Accelerate.Representation.Tag
- Data.Array.Accelerate.Representation.Type
- Data.Array.Accelerate.Representation.Vec
- Data.Array.Accelerate.Smart
- Sugar
- Data.Array.Accelerate.Sugar.Array
- Data.Array.Accelerate.Sugar.Elt
- Data.Array.Accelerate.Sugar.Foreign
- Data.Array.Accelerate.Sugar.Shape
- Data.Array.Accelerate.Sugar.Vec
- Test
- Data.Array.Accelerate.Test.NoFib
- Data.Array.Accelerate.Test.Similar
- Data.Array.Accelerate.Trafo
- Data.Array.Accelerate.Trafo.Config
- Data.Array.Accelerate.Trafo.Delayed
- Data.Array.Accelerate.Trafo.Fusion
- Data.Array.Accelerate.Trafo.Sharing
- Data.Array.Accelerate.Trafo.Substitution
- Data.Array.Accelerate.Type
- Data.Array.Accelerate.Unsafe
- Data.Array.Accelerate.AST
- Data.Array.Accelerate
- Data.BitSet
- Primitive
- Data.Primitive.Vec
- Array
Flags
Automatic Flags
Name | Description | Default |
---|---|---|
debug | Enable debug tracing messages. The following options are read from the
environment variable ./program +ACC ... -ACC Note that a backend may not implement (or be applicable to) all options. The following flags control phases of the compiler. The are enabled with
The following options control debug message output, and are enabled with
| Disabled |
ekg | Enable hooks for monitoring the running application using EKG. Implies
Alternatively, if you wish to configure the EKG monitoring server you can initialise it like so: import Data.Array.Accelerate.Debug import System.Metrics import System.Remote.Monitoring main :: IO () main = do store <- initAccMetrics registerGcMetrics store -- optional server <- forkServerWith store "localhost" 8000 ... Note that, as with any program utilising EKG, in order to collect Haskell GC statistics, you must either run the program with: +RTS -T -RTS or compile it with: -with-rtsopts=-T | Disabled |
bounds-checks | Enable bounds checking | Enabled |
unsafe-checks | Enable bounds checking in unsafe operations | Disabled |
internal-checks | Enable internal consistency checks | Disabled |
nofib | Build the nofib test suite (required for backend testing) | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- accelerate-1.3.0.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 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, 0.15.1.0, 1.0.0.0, 1.1.0.0, 1.1.1.0, 1.2.0.0, 1.2.0.1, 1.3.0.0 |
---|---|
Change log | CHANGELOG.md |
Dependencies | ansi-terminal (>=0.6.2), async (>=2.0), base (>=4.12 && <4.15), base-orphans (>=0.3), bytestring (>=0.10.2), containers (>=0.3), cryptonite (>=0.21), deepseq (>=1.3), directory (>=1.0), ekg (>=0.1), ekg-core (>=0.1), exceptions (>=0.6), filepath (>=1.0), ghc-prim, half (>=0.3), hashable (>=1.1), hashtables (>=1.2.3), hedgehog (>=0.5), lens (>=4.0), mtl (>=2.0), prettyprinter (>=1.2), prettyprinter-ansi-terminal (>=1.0), primitive (>=0.6.4), tasty (>=0.11), tasty-expected-failure (>=0.11), tasty-hedgehog (>=0.1), tasty-hunit (>=0.9), template-haskell, terminal-size (>=0.3), text (>=1.2), transformers (>=0.3), unique, unix, unordered-containers (>=0.2), vector (>=0.10), Win32 [details] |
Tested with | ghc >=8.6 |
License | BSD-3-Clause |
Author | The Accelerate Team |
Maintainer | Trevor L. McDonell <trevor.mcdonell@gmail.com> |
Category | Accelerate, Compilers/Interpreters, Concurrency, Data, Parallelism |
Home page | https://github.com/AccelerateHS/accelerate/ |
Bug tracker | https://github.com/AccelerateHS/accelerate/issues |
Source repo | head: git clone git://github.com/AccelerateHS/accelerate.git this: git clone git://github.com/AccelerateHS/accelerate.git(tag v1.3.0.0) |
Uploaded | by TrevorMcDonell at 2020-08-28T14:21:17Z |
Distributions | |
Reverse Dependencies | 44 direct, 10 indirect [details] |
Downloads | 32453 total (55 in the last 30 days) |
Rating | 2.5 (votes: 6) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |