An Embedded Language for Accelerated Array Computations

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

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.run it may be on-the-fly off-loaded to a GPU.

LULESH

LULESH-accelerate is in implementation of the Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics (LULESH) mini-app. LULESH represents a typical hydrodynamics code such as ALE3D, but is a highly simplified application, hard-coded to solve the Sedov blast problem on an unstructured hexahedron mesh.

Accelerate is primarily developed by academics, so citations matter a lot to us.
As an added benefit, you increase Accelerate’s exposure and potential user (and
developer!) base, which is a benefit to all users of Accelerate. Thanks in advance!

What’s missing?

Here is a list of features that are currently missing:

Preliminary API (parts of the API may still change in subsequent releases)

Changes

Change Log

Changed

Internal debugging/RTS options handling has been changed. Compiling this package now implies that backends are also compiled in debug mode (no need to set the -fdebug cabal flag for those packages as well).

Complex numbers are stored in the C-style array-of-struct representation.

Improve numeric handling of complex numbers.

Coercions (bitcast) now occur between the underlying representation types

Front-end performance improvements

Added

Support for half-precision floating-point numbers.

Support for struct-of-array-of-struct representations. Currently this is limited to fields of 2,3,4,8, or 16-elements wide.

Changed

Added

Changed

Changed type of scanl', scanr' to return an Acc tuple, rather than a
tuple of Acc arrays.

Specialised folds sum, product, minimum, maximum, and, or,
any, all now reduce along the innermost dimension only, rather than
reducing all elements. You can recover the old behaviour by first
flatten-ing the input array.

Add new stencil boundary condition function, to apply the given function
to out-of-bounds indices.