diff --git a/README.md b/README.md
index 961832c2c..11a3716e7 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,33 @@
-
+
# High-performance parallel arrays for Haskell
[![CI](https://github.com/tmcdonell/accelerate/actions/workflows/ci.yml/badge.svg)](https://github.com/tmcdonell/accelerate/actions/workflows/ci.yml)
-[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/AccelerateHS/Lobby)
[![Hackage](https://img.shields.io/hackage/v/accelerate.svg)](https://hackage.haskell.org/package/accelerate)
-[![Stackage LTS](https://stackage.org/package/accelerate/badge/lts)](https://stackage.org/lts/package/accelerate)
-[![Stackage Nightly](https://stackage.org/package/accelerate/badge/nightly)](https://stackage.org/nightly/package/accelerate)
`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:
+For more details, we have a few academic papers:
- * [Accelerating Haskell Array Codes with Multicore GPUs][CKLM+11]
- * [Optimising Purely Functional GPU Programs][MCKL13] ([slides][MCKL13-slides])
- * [Embedding Foreign Code][CMCK14]
- * [Type-safe Runtime Code Generation: Accelerate to LLVM][MCGN15] ([slides][MCGN15-slides]) ([video][MCGN15-video])
- * [Streaming Irregular Arrays][CMCK17] ([video][CMCK17-video])
+ * [Accelerating Haskell Array Codes with Multicore GPUs](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-cuda-damp2011.pdf)
+ * [Optimising Purely Functional GPU Programs](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-optim-icfp2013.pdf) ([slides](https://speakerdeck.com/tmcdonell/optimising-purely-functional-gpu-programs))
+ * [Embedding Foreign Code](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-ffi-padl2014.pdf)
+ * [Type-safe Runtime Code Generation: Accelerate to LLVM](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-llvm-haskell2015.pdf) ([slides](https://speakerdeck.com/tmcdonell/type-safe-runtime-code-generation-accelerate-to-llvm)), ([video](https://www.youtube.com/watch?v=snXhXA5noVc))
+ * [Streaming Irregular Arrays](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-seq2-haskell2017.pdf) ([video](https://www.youtube.com/watch?v=QIWSqp7AaNo))
+ * [Embedded Pattern Matching](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-pattern.pdf) ([slides](https://speakerdeck.com/tmcdonell/annotating-deeply-embedded-languages), [video](https://youtu.be/Y1s28Sm5s8E))
-There are also slides from some fairly recent presentations:
+and presentations:
- * [Embedded Languages for High-Performance Computing in Haskell][Embedded]
- * [GPGPU Programming in Haskell with Accelerate][YLJ13-slides] ([video][YLJ13-video]) ([workshop][YLJ13-workshop])
+ * [FHPNC 2019 Keynote: Functional High-Performance Computing](https://speakerdeck.com/tmcdonell/functional-high-performance-computing)
+ * [Embedded Languages for High-Performance Computing in Haskell](https://speakerdeck.com/mchakravarty/embedded-languages-for-high-performance-computing-in-haskell)
+ * [GPGPU Programming in Haskell with Accelerate](https://speakerdeck.com/tmcdonell/gpgpu-programming-in-haskell-with-accelerate) ([video](http://youtu.be/ARqE4yT2Z0o)) ([workshop](https://speakerdeck.com/tmcdonell/gpgpu-programming-in-haskell-with-accelerate-workshop))
-Chapter 6 of Simon Marlow's book [Parallel and Concurrent Programming in Haskell][Mar13] contains a tutorial introduction to Accelerate.
+Chapter 6 of Simon Marlow's book [Parallel and Concurrent Programming in Haskell](http://chimera.labs.oreilly.com/books/1230000000929) contains a tutorial introduction to Accelerate.
-[Trevor's PhD thesis][Trevor-thesis] details the design and implementation of frontend optimisations and CUDA backend.
+[Trevor's PhD thesis](https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/TrevorMcDonell_PhD_Thesis.pdf) details the design and implementation of frontend optimisations and CUDA backend.
**Table of Contents**
@@ -60,19 +59,19 @@ Availability
Package _Accelerate_ is available from:
- * Hackage: [accelerate][Hackage] - install with `cabal install accelerate`
- * GitHub: [AccelerateHS/accelerate][GitHub] - get the source with `git clone https://github.com/AccelerateHS/accelerate.git`
+ * Hackage: [accelerate](http://hackage.haskell.org/package/accelerate) - install with `cabal install accelerate`
+ * GitHub: [tmcdonell/accelerate](https://github.com/tmcdonell/accelerate) - get the source with `git clone https://github.com/tmcdonell/accelerate.git`
To install the Haskell toolchain try [GHCup](https://www.haskell.org/ghcup/).
Additional components
---------------------
-The following supported add-ons are available as separate packages:
+The following add-ons are available as separate packages:
- * [accelerate-llvm-native][accelerate-llvm-native]: Backend targeting multicore CPUs
- * [accelerate-llvm-ptx][accelerate-llvm-ptx]: Backend targeting CUDA-enabled NVIDIA GPUs. Requires a GPU with compute capability 2.0 or greater (see the [table on Wikipedia][wiki-cc])
- * [accelerate-examples][accelerate-examples]: Computational kernels and applications showcasing the use of Accelerate as well as a regression test suite (supporting function and performance testing)
+ * [accelerate-llvm-native](https://github.com/tmcdonell/accelerate-llvm): Backend targeting multicore CPUs
+ * [accelerate-llvm-ptx](https://github.com/tmcdonell/accelerate-llvm): Backend targeting CUDA-enabled NVIDIA GPUs. Requires a GPU with compute capability 2.0 or greater (see the [table on Wikipedia](https://en.wikipedia.org/wiki/CUDA#Supported_GPUs))
+ * [accelerate-examples](https://github.com/tmcdonell/accelerate-examples): Computational kernels and applications showcasing the use of Accelerate as well as a regression test suite (supporting function and performance testing)
* Conversion between various formats:
* [accelerate-io](https://hackage.haskell.org/package/accelerate-io): For copying data directly between raw pointers
* [accelerate-io-array](https://hackage.haskell.org/package/accelerate-io-array): Immutable arrays
@@ -83,18 +82,18 @@ The following supported add-ons are available as separate packages:
* [accelerate-io-repa](https://hackage.haskell.org/package/accelerate-io-repa): Another Haskell library for high-performance parallel arrays
* [accelerate-io-serialise](https://hackage.haskell.org/package/accelerate-io-serialise): Binary serialisation of arrays using [serialise](https://hackage.haskell.org/package/serialise)
* [accelerate-io-vector](https://hackage.haskell.org/package/accelerate-io-vector): Efficient boxed and unboxed one-dimensional arrays
- * [accelerate-fft][accelerate-fft]: Fast Fourier transform implementation, with FFI bindings to optimised implementations
- * [accelerate-blas][accelerate-blas]: BLAS and LAPACK operations, with FFI bindings to optimised implementations
- * [accelerate-bignum][accelerate-bignum]: Fixed-width large integer arithmetic
- * [colour-accelerate][colour-accelerate]: Colour representations in Accelerate (RGB, sRGB, HSV, and HSL)
+ * [accelerate-fft](https://github.com/tmcdonell/accelerate-fft): Fast Fourier transform implementation, with FFI bindings to optimised implementations
+ * [accelerate-blas](https://github.com/tmcdonell/accelerate-blas): BLAS and LAPACK operations, with FFI bindings to optimised implementations
+ * [accelerate-bignum](https://github.com/tmcdonell/accelerate-bignum): Fixed-width large integer arithmetic
+ * [colour-accelerate](https://github.com/tmcdonell/colour-accelerate): Colour representations in Accelerate (RGB, sRGB, HSV, and HSL)
* [containers-accelerate](http://hackage.haskell.org/package/containers-accelerate): Hashing-based container types
- * [gloss-accelerate][gloss-accelerate]: Generate [gloss][gloss] pictures from Accelerate
- * [gloss-raster-accelerate][gloss-raster-accelerate]: Parallel rendering of raster images and animations
+ * [gloss-accelerate](https://github.com/tmcdonell/gloss-accelerate): Generate [gloss](https://hackage.haskell.org/package/gloss) pictures from Accelerate
+ * [gloss-raster-accelerate](https://github.com/tmcdonell/gloss-raster-accelerate): Parallel rendering of raster images and animations
* [hashable-accelerate](http://hackage.haskell.org/package/hashable-accelerate): A class for types which can be converted into a hash value
- * [lens-accelerate][lens-accelerate]: [Lens][lens] operators for Accelerate types
- * [linear-accelerate][linear-accelerate]: [Linear][linear] vector spaces in Accelerate
- * [mwc-random-accelerate][mwc-random-accelerate]: Generate Accelerate arrays filled with high quality pseudorandom numbers
- * [numeric-prelude-accelerate][numeric-prelude-accelerate]: Lifting the [numeric-prelude][numeric-prelude] to Accelerate
+ * [lens-accelerate](https://github.com/tmcdonell/lens-accelerate): [Lens](https://hackage.haskell.org/package/lens) operators for Accelerate types
+ * [linear-accelerate](https://github.com/tmcdonell/linear-accelerate): [Linear](https://hackage.haskell.org/package/linear) vector spaces in Accelerate
+ * [mwc-random-accelerate](https://github.com/tmcdonell/mwc-random-accelerate): Generate Accelerate arrays filled with high quality pseudorandom numbers
+ * [numeric-prelude-accelerate](https://github.com/tmcdonell/numeric-prelude-accelerate): Lifting the [numeric-prelude](https://hackage.haskell.org/package/numeric-prelude) to Accelerate
* [wigner-ville-accelerate](https://github.com/Haskell-mouse/wigner-ville-accelerate): Wigner-Ville time-frequency distribution.
Install them from Hackage with `cabal install PACKAGENAME`.
@@ -103,9 +102,9 @@ Install them from Hackage with `cabal install PACKAGENAME`.
Documentation
-------------
- * Haddock documentation is included and linked with the individual package releases on [Hackage][Hackage].
+ * Haddock documentation is included and linked with the individual package releases on [Hackage](https://hackage.haskell.org/package/accelerate)
- * The idea behind the HOAS (higher-order abstract syntax) to de-Bruijn conversion used in the library is [described separately][HOAS-conv].
+ * The idea behind the HOAS (higher-order abstract syntax) to de-Bruijn conversion used in the library is [described separately](https://github.com/mchakravarty/hoas-conv)
Examples
--------
@@ -114,11 +113,11 @@ Examples
The [accelerate-examples][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][wiki-canny]
- * An interactive [mandelbrot set][wiki-mandelbrot] generator
- * An [N-body simulation][wiki-nbody] of gravitational attraction between solid particles
- * An implementation of the [PageRank][wiki-pagerank] algorithm
- * A simple [ray-tracer][wiki-raytracing]
+ * An implementation of [canny edge detection](https://en.wikipedia.org/wiki/Canny_edge_detector)
+ * An interactive [mandelbrot set](https://en.wikipedia.org/wiki/Mandelbrot_set) generator
+ * An [N-body simulation](https://en.wikipedia.org/wiki/N-body) of gravitational attraction between solid particles
+ * An implementation of the [PageRank](https://en.wikipedia.org/wiki/Pagerank) algorithm
+ * A simple [ray-tracer](https://en.wikipedia.org/wiki/Ray_tracing)
* A particle based simulation of stable fluid flows
* A cellular automata simulation
* A "password recovery" tool, for dictionary lookup of MD5 hashes
@@ -135,7 +134,7 @@ The [accelerate-examples][accelerate-examples] package provides a range of compu
### LULESH
-[LULESH-accelerate][lulesh-accelerate] is in implementation of the Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics (LULESH) mini-app. [LULESH][LULESH] represents a typical hydrodynamics code such as [ALE3D][ALE3D], but is a highly simplified application, hard-coded to solve the Sedov blast problem on an unstructured hexahedron mesh.
+[LULESH-accelerate](https://github.com/tmcdonell/lulesh-accelerate) is in implementation of the Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics (LULESH) mini-app. [LULESH](https://codesign.llnl.gov/lulesh.php) represents a typical hydrodynamics code such as [ALE3D](https://wci.llnl.gov/simulation/computer-codes/ale3d), but is a highly simplified application, hard-coded to solve the Sedov blast problem on an unstructured hexahedron mesh.
![LULESH mesh](https://i.imgur.com/bIkODKd.jpg)
@@ -147,7 +146,7 @@ Please feel free to add your own examples!
* Jonathan Fraser, [GPUVAC](https://github.com/GeneralFusion/gpuvac): An explicit advection magnetohydrodynamics simulation
* David van Balen, [Sudokus](https://github.com/dpvanbalen/Sudokus): A sudoku solver
- * Trevor L. McDonell, [lol-accelerate][lol-accelerate]: A backend to the Λ ○ λ ([Lol][lol]) library for ring-based lattice cryptography
+ * Trevor L. McDonell, [lol-accelerate](https://github.com/tmcdonell/lol-accelerate): A backend to the Λ ○ λ ([Lol](https://hackage.haskell.org/package/lol)) library for ring-based lattice cryptography
* Henning Thielemann, [patch-image](http://hackage.haskell.org/package/patch-image): Combine a collage of overlapping images
* apunktbau, [bildpunkt](https://github.com/abau/bildpunkt): A ray-marching distance field renderer
* klarh, [hasdy](https://github.com/klarh/hasdy): Molecular dynamics in Haskell using Accelerate
@@ -159,7 +158,7 @@ Who are we?
The Accelerate team (past and present) consists of:
- * Manuel M T Chakravarty ([@mchakravarty])
+ * Manuel M T Chakravarty ([@mchakravarty])
* Gabriele Keller ([@gckeller])
* Trevor L. McDonell ([@tmcdonell])
* Robert Clifton-Everest ([@robeverest])
@@ -169,51 +168,19 @@ The Accelerate team (past and present) consists of:
* Ben Lever ([@blever])
* Sean Seefried ([@sseefried])
* Ivo Gabe de Wolff ([@ivogabe])
+ * David van Balen ([@dpvanbalen])
+ * Tom Smeding ([@tomsmeding])
+ * Robbert van der Helm ([@robbert-vdh])
-The maintainer and principal developer of Accelerate is Trevor L.
-McDonell .
+The architect and leader of the Accelerate project is Trevor L. McDonell . Please feel free to reach out to me!
Mailing list and contacts
-------------------------
- * Mailing list: [`accelerate-haskell@googlegroups.com`](mailto:accelerate-haskell@googlegroups.com) (discussions on both use and development are welcome)
- * Sign up for the mailing list at the [Accelerate Google Groups page][Google-Group]
- * Bug reports and issues tracking: [GitHub project page][Issues]
- * Chat with us on [gitter](https://gitter.im/AccelerateHS/Lobby)
-
-
-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][CKLM+11].
- 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][MCKL13].
- 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][CMCK14].
- 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][MCGN15].
- 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][CMCK17].
- 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!
+ * [Bug reports and issues tracking](https://github.com/tmcdonell/accelerate/issues)
+ * [Questions and discussion](https://github.com/tmcdonell/accelerate/discussions)
+ * [`accelerate-haskell@googlegroups.com`](mailto:accelerate-haskell@googlegroups.com) mailing list ([sign-up](http://groups.google.com/group/accelerate-haskell))
What's missing?
@@ -222,11 +189,11 @@ 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!
+ * Many more features... [contact us](mailto:trevor.mcdonell@gmail.com)!
+ [@tmcdonell]: https://github.com/tmcdonell
[@mchakravarty]: https://github.com/mchakravarty
[@gckeller]: https://github.com/gckeller
- [@tmcdonell]: https://github.com/tmcdonell
[@robeverest]: https://github.com/robeverest
[@fmma]: https://github.com/fmma
[@rrnewton]: https://github.com/rrnewton
@@ -234,66 +201,13 @@ Here is a list of features that are currently missing:
[@blever]: https://github.com/blever
[@sseefried]: https://github.com/sseefried
[@ivogabe]: https://github.com/ivogabe
+ [@dpvanbalen]: https://github.com/dpvanbalen
+ [@tomsmeding]: https://github.com/tomsmeding
- [CKLM+11]: https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-cuda-damp2011.pdf
- [MCKL13]: https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-optim-icfp2013.pdf
- [MCKL13-slides]: https://speakerdeck.com/tmcdonell/optimising-purely-functional-gpu-programs
- [CMCK14]: https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-ffi-padl2014.pdf
- [MCGN15]: https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-llvm-haskell2015.pdf
- [MCGN15-slides]: https://speakerdeck.com/tmcdonell/type-safe-runtime-code-generation-accelerate-to-llvm
- [MCGN15-video]: https://www.youtube.com/watch?v=snXhXA5noVc
- [HIW'09]: https://wiki.haskell.org/HaskellImplementorsWorkshop
- [CMCK17]: https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/acc-seq2-haskell2017.pdf
- [CMCK17-video]: https://www.youtube.com/watch?v=QIWSqp7AaNo
- [Mar13]: http://chimera.labs.oreilly.com/books/1230000000929
- [Embedded]: https://speakerdeck.com/mchakravarty/embedded-languages-for-high-performance-computing-in-haskell
- [Hackage]: http://hackage.haskell.org/package/accelerate
- [accelerate-cuda]: https://github.com/AccelerateHS/accelerate-cuda
- [accelerate-examples]: https://github.com/AccelerateHS/accelerate-examples
- [accelerate-io]: https://github.com/AccelerateHS/accelerate-io
- [accelerate-fft]: https://github.com/AccelerateHS/accelerate-fft
- [accelerate-blas]: https://github.com/tmcdonell/accelerate-blas
+ [accelerate-cuda]: https://github.com/tmcdonell/accelerate-cuda
[accelerate-backend-kit]: https://github.com/AccelerateHS/accelerate-backend-kit
[accelerate-buildbot]: https://github.com/AccelerateHS/accelerate-buildbot
[accelerate-repa]: https://github.com/blambo/accelerate-repa
[accelerate-opencl]: https://github.com/hiPERFIT/accelerate-opencl
- [accelerate-cabal]: https://github.com/AccelerateHS/accelerate/accelerate.cabal
- [accelerate-cuda-cabal]: https://github.com/AccelerateHS/accelerate-cuda/accelerate-cuda.cabal
- [accelerate-llvm]: https://github.com/AccelerateHS/accelerate-llvm
- [accelerate-llvm-native]: https://github.com/AccelerateHS/accelerate-llvm
- [accelerate-llvm-ptx]: https://github.com/AccelerateHS/accelerate-llvm
- [accelerate-bignum]: https://github.com/tmcdonell/accelerate-bignum
- [GitHub]: https://github.com/AccelerateHS/accelerate
- [Wiki]: https://github.com/AccelerateHS/accelerate/wiki
- [Issues]: https://github.com/AccelerateHS/accelerate/issues
- [Google-Group]: http://groups.google.com/group/accelerate-haskell
- [HOAS-conv]: https://github.com/mchakravarty/hoas-conv
-
- [repa]: http://hackage.haskell.org/package/repa
- [wiki-cc]: https://en.wikipedia.org/wiki/CUDA#Supported_GPUs
- [YLJ13-video]: http://youtu.be/ARqE4yT2Z0o
- [YLJ13-slides]: https://speakerdeck.com/tmcdonell/gpgpu-programming-in-haskell-with-accelerate
- [YLJ13-workshop]: https://speakerdeck.com/tmcdonell/gpgpu-programming-in-haskell-with-accelerate-workshop
- [wiki-canny]: https://en.wikipedia.org/wiki/Canny_edge_detector
- [wiki-mandelbrot]: https://en.wikipedia.org/wiki/Mandelbrot_set
- [wiki-nbody]: https://en.wikipedia.org/wiki/N-body
- [wiki-raytracing]: https://en.wikipedia.org/wiki/Ray_tracing
- [wiki-pagerank]: https://en.wikipedia.org/wiki/Pagerank
- [Trevor-thesis]: https://github.com/tmcdonell/tmcdonell.github.io/raw/master/papers/TrevorMcDonell_PhD_Thesis.pdf
- [colour-accelerate]: https://github.com/tmcdonell/colour-accelerate
- [gloss]: https://hackage.haskell.org/package/gloss
- [gloss-accelerate]: https://github.com/tmcdonell/gloss-accelerate
- [gloss-raster-accelerate]: https://github.com/tmcdonell/gloss-raster-accelerate
- [lens]: https://hackage.haskell.org/package/lens
- [lens-accelerate]: https://github.com/tmcdonell/lens-accelerate
- [linear]: https://hackage.haskell.org/package/linear
- [linear-accelerate]: https://github.com/tmcdonell/linear-accelerate
- [mwc-random-accelerate]: https://github.com/tmcdonell/mwc-random-accelerate
- [numeric-prelude]: https://hackage.haskell.org/package/numeric-prelude
- [numeric-prelude-accelerate]: https://github.com/tmcdonell/numeric-prelude-accelerate
- [LULESH]: https://codesign.llnl.gov/lulesh.php
- [ALE3D]: https://wci.llnl.gov/simulation/computer-codes/ale3d
- [lulesh-accelerate]: https://github.com/tmcdonell/lulesh-accelerate
- [lol]: https://hackage.haskell.org/package/lol
- [lol-accelerate]: https://github.com/tmcdonell/lol-accelerate
+ [HOAS-conv]: https://web.archive.org/web/20180805092417/http://www.cse.unsw.edu.au/~chak/haskell/term-conv/