From HaskellWiki

Concurrent and Parallel Programming

Haskell offers a broad spectrum of tools for developing parallel or concurrent programs. For parallelism, Haskell libraries enable concise high-level parallel programs with results that are guaranteed to be deterministic, i.e., independent of the number of cores and the scheduling being used. Concurrency is supported with lightweight threads and high level abstractions such as software transactional memory for managing information shared across threads. Distributed programming is still mainly a research area. Some low-level tools (MPI bindings) and research prototypes are available and new approaches being developed, such as Cloud Haskell (Erlang-style actors as a Haskell library).

This page lists libraries and extensions for programming concurrent and parallel applications in Haskell.

See also the parallel Haskell portal for research papers, tutorials and on parallel and concurrent Haskell.

Parallelism

Strategies and Par

Monad-par An alternative parallel programming API to that provided by the parallel package. The Par monad allows the simple description of parallel computations, and can be used to add parallelism to pure Haskell code. The basic API is straightforward: the monad supports forking and simple communication in terms of IVars.

Data parallelism

Repa REgular PArallel arrays: high performance, regular, multi-dimensional, shape polymorphic parallel arrays. Accelerate 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). Data Parallel Haskell Implicitly parallel, high performance (nested) arrays, supporting large multicore programming.

Research efforts

Feedback-directed implicit parallelism Implicit parallelism in Haskell, and a feedback-directed mechanism to increase its granularity (FDIP paper) GpH: Glasgow Parallel Haskell A complete, GHC-based implementation of the parallel Haskell extension GpH and of evaluation strategies is available. Extensions of the runtime-system and language to improve performance and support new platforms are under development.

Concurrency

Concurrent Haskell

Concurrent Haskell GHC has supported concurrency with lightweight threads for more than a decade, and it is very fast. Threads in Haskell are preemptively scheduled and support everything you would normally expect from threads, including blocking I/O and foreign calls. Documentation

Examples

Software transactional memory

Research efforts

Actors with multi-headed receive clauses Actor-based concurrency for Haskell CHP: Communicating Haskell Processes CHP is built on the ideas of CSP (Communicating Sequential Processes), featuring encapsulated parallel processes (no shared data!) communicating over synchronous channels. This is a very composable mode that also allows choice on communications, so that a process may offer to either read on one channel or write on another, but will only take the first that is available.

Distributed programming

MPI

hMPI hMPI is an acronym for HaskellMPI. It is a Haskell binding conforming to MPI (Message Passing Interface) standard 1.1/1.2. The programmer is in full control over the communication between the nodes of a cluster.

Haskell-MPI Haskell-MPI provides a Haskell interface to MPI, built on top of the foreign function interface. It is notionally a descendant of hMPI, but is mostly a rewrite.

Distributed Haskell

GdH: Glasgow Distributed Haskell GdH supports distributed stateful interactions on multiple locations. It is a conservative extension of both Concurrent Haskell and GpH, enabling the distribution of the stateful IO threads of the former on the multiple locations of the latter. The programming model includes forking stateful threads on remote locations, explicit communication over channels, and distributed exception handling.

Eden Eden extends Haskell with a small set of syntactic constructs for explicit process specification and creation. While providing enough control to implement parallel algorithms efficiently, it frees the programmer from the tedious task of managing low-level details by introducing automatic communication (via head-strict lazy lists), synchronisation, and process handling.

Cloud Haskell Cloud Haskell is a domain-speciﬁc language for developing programs for a distributed computing environment. Implemented as a shallow embedding in Haskell, it provides a message passing communication model, inspired by Erlang, without introducing incompatibility with Haskell’s established shared-memory concurrency.

Research efforts