accelerate: An embedded language for accelerated array processing
This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.
Warnings:
- 'ghc-options: -O2' is rarely needed. Check that it is giving a real benefit and not just imposing longer compile times on your users.
- 'cc-options: -O[n]' is generally not needed. When building with optimisations Cabal automatically adds '-O2' for C code. Setting it yourself interferes with the --disable-optimization flag.
- 'ghc-prof-options: -fprof*' profiling flags are typically not appropriate for a distributed library package. These flags are useful to profile this package, but when profiling other packages that use this one these flags clutter the profile output with excessive detail. If you think other packages really want to see cost centres from this package then use '-fprof-auto-exported' which puts cost centres only on exported functions. Alternatively, if you want to use this, make it conditional based on a Cabal configuration flag (with 'manual: True' and 'default: False') and enable that flag during development.
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]
Properties
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
Package maintainers
For package maintainers and hackage trustees