All Projects → AccelerateHS → Accelerate

AccelerateHS / Accelerate

Licence: other
Embedded language for high-performance array computations

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to Accelerate

Accelerate Llvm
LLVM backend for Accelerate
Stars: ✭ 134 (-82.16%)
Mutual labels:  llvm, parallel-computing, cuda, gpu-computing
Arraymancer
A fast, ergonomic and portable tensor library in Nim with a deep learning focus for CPU, GPU and embedded devices via OpenMP, Cuda and OpenCL backends
Stars: ✭ 793 (+5.59%)
Mutual labels:  parallel-computing, cuda, gpu-computing
PyMFEM
Python wrapper for MFEM
Stars: ✭ 91 (-87.88%)
Mutual labels:  parallel-computing, gpu-computing
cuda memtest
Fork of CUDA GPU memtest 👓
Stars: ✭ 68 (-90.95%)
Mutual labels:  cuda, gpu-computing
mbsolve
An open-source solver tool for the Maxwell-Bloch equations.
Stars: ✭ 14 (-98.14%)
Mutual labels:  parallel-computing, cuda
HeCBench
software.intel.com/content/www/us/en/develop/articles/repo-evaluating-performance-productivity-oneapi.html
Stars: ✭ 85 (-88.68%)
Mutual labels:  cuda, gpu-computing
GOSH
An ultra-fast, GPU-based large graph embedding algorithm utilizing a novel coarsening algorithm requiring not more than a single GPU.
Stars: ✭ 12 (-98.4%)
Mutual labels:  cuda, gpu-computing
MatX
An efficient C++17 GPU numerical computing library with Python-like syntax
Stars: ✭ 418 (-44.34%)
Mutual labels:  cuda, gpu-computing
vuo
A realtime visual programming language for interactive media.
Stars: ✭ 103 (-86.28%)
Mutual labels:  llvm, parallel-computing
Cuda Api Wrappers
Thin C++-flavored wrappers for the CUDA Runtime API
Stars: ✭ 362 (-51.8%)
Mutual labels:  cuda, gpu-computing
Tutorials
Some basic programming tutorials
Stars: ✭ 353 (-53%)
Mutual labels:  cuda, gpu-computing
Hipsycl
Implementation of SYCL for CPUs, AMD GPUs, NVIDIA GPUs
Stars: ✭ 377 (-49.8%)
Mutual labels:  cuda, gpu-computing
OpenPH
Parallel reduction of boundary matrices for Persistent Homology with CUDA
Stars: ✭ 14 (-98.14%)
Mutual labels:  parallel-computing, gpu-computing
learn-gpgpu
Algorithms implemented in CUDA + resources about GPGPU
Stars: ✭ 37 (-95.07%)
Mutual labels:  parallel-computing, gpu-computing
rbcuda
CUDA bindings for Ruby
Stars: ✭ 57 (-92.41%)
Mutual labels:  cuda, gpu-computing
gardenia
GARDENIA: Graph Analytics Repository for Designing Efficient Next-generation Accelerators
Stars: ✭ 22 (-97.07%)
Mutual labels:  parallel-computing, gpu-computing
artic
The AlteRnaTive Impala Compiler
Stars: ✭ 16 (-97.87%)
Mutual labels:  parallel-computing, gpu-computing
Taskflow
A General-purpose Parallel and Heterogeneous Task Programming System
Stars: ✭ 6,128 (+715.98%)
Mutual labels:  parallel-computing, cuda
opensbli
A framework for the automated derivation and parallel execution of finite difference solvers on a range of computer architectures.
Stars: ✭ 56 (-92.54%)
Mutual labels:  parallel-computing, gpu-computing
Bayadera
High-performance Bayesian Data Analysis on the GPU in Clojure
Stars: ✭ 342 (-54.46%)
Mutual labels:  cuda, gpu-computing
henlo, my name is Theia

High-performance parallel arrays for Haskell

CI-Linux CI-MacOS CI-Windows Gitter
Stackage LTS Stackage Nightly Hackage

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.

For more details, see our papers:

There are also slides from some fairly recent presentations:

Chapter 6 of Simon Marlow's book Parallel and Concurrent Programming in Haskell contains a tutorial introduction to Accelerate.

Trevor's PhD thesis details the design and implementation of frontend optimisations and CUDA backend.

Table of Contents

A simple example

As a simple example, consider the computation of a dot product of two vectors of single-precision 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.run it may be on-the-fly off-loaded to a GPU.

Availability

Package accelerate is available from

  • Hackage: accelerate - install with cabal install accelerate
  • GitHub: AccelerateHS/accelerate - get the source with git clone https://github.com/AccelerateHS/accelerate.git. The easiest way to compile the source distributions is via the Haskell stack tool.

Additional components

The following supported add-ons are available as separate packages:

Install them from Hackage with cabal install PACKAGENAME.

Documentation

  • Haddock documentation is included and linked with the individual package releases on Hackage.
  • Haddock documentation for in-development components can be found here.
  • The idea behind the HOAS (higher-order abstract syntax) to de-Bruijn conversion used in the library is described separately.

Examples

accelerate-examples

The accelerate-examples package provides a range of computational kernels and a few complete applications. To install these from Hackage, issue cabal install accelerate-examples. The examples include:

  • An implementation of canny edge detection
  • An interactive mandelbrot set generator
  • An N-body simulation of gravitational attraction between solid particles
  • An implementation of the PageRank algorithm
  • A simple ray-tracer
  • A particle based simulation of stable fluid flows
  • A cellular automata simulation
  • A "password recovery" tool, for dictionary lookup of MD5 hashes

Mandelbrot Raytracer

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.

LULESH mesh

Additional examples

Accelerate users have also built some substantial applications of their own. Please feel free to add your own examples!

  • Jonathan Fraser, GPUVAC: An explicit advection magnetohydrodynamics simulation
  • David van Balen, Sudokus: A sudoku solver
  • Trevor L. McDonell, lol-accelerate: A backend to the Λ ○ λ (Lol) library for ring-based lattice cryptography
  • Henning Thielemann, patch-image: Combine a collage of overlapping images
  • apunktbau, bildpunkt: A ray-marching distance field renderer
  • klarh, hasdy: Molecular dynamics in Haskell using Accelerate
  • Alexandros Gremm used Accelerate as part of the 2014 CSCS summer school (code)

Who are we?

The Accelerate team (past and present) consists of:

The maintainer and principal developer of Accelerate is Trevor L. McDonell [email protected].

Mailing list and contacts

Citing Accelerate

If you use Accelerate for academic research, you are encouraged (though not required) to cite the following papers:

  • Manuel M. T. Chakravarty, Gabriele Keller, Sean Lee, Trevor L. McDonell, and Vinod Grover. Accelerating Haskell Array Codes with Multicore GPUs. In DAMP '11: Declarative Aspects of Multicore Programming, ACM, 2011.

  • Trevor L. McDonell, Manuel M. T. Chakravarty, Gabriele Keller, and Ben Lippmeier. Optimising Purely Functional GPU Programs. In ICFP '13: The 18th ACM SIGPLAN International Conference on Functional Programming, ACM, 2013.

  • Robert Clifton-Everest, Trevor L. McDonell, Manuel M. T. Chakravarty, and Gabriele Keller. Embedding Foreign Code. In PADL '14: The 16th International Symposium on Practical Aspects of Declarative Languages, Springer-Verlag, LNCS, 2014.

  • Trevor L. McDonell, Manuel M. T. Chakravarty, Vinod Grover, and Ryan R. Newton. Type-safe Runtime Code Generation: Accelerate to LLVM. In Haskell '15: The 8th ACM SIGPLAN Symposium on Haskell, ACM, 2015.

  • Robert Clifton-Everest, Trevor L. McDonell, Manuel M. T. Chakravarty, and Gabriele Keller. Streaming Irregular Arrays. In Haskell '17: The 10th ACM SIGPLAN Symposium on Haskell, ACM, 2017.

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)
  • Many more features... contact us!
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].