A Tutorial on Parallel and Concurrent Programming in Haskell

This practical tutorial introduces the features available in Haskell for writing parallel and concurrent programs. We first describe how to write semi-explicit parallel programs by using annotations to express opportunities for parallelism and to help control the granularity of parallelism for effective execution on modern operating systems and processors. We then describe the mechanisms provided by Haskell for writing explicitly parallel programs with a focus on the use of software transactional memory to help share information between threads. Finally, we show how nested data parallelism can be used to write deterministically parallel programs which allows programmers to use rich data types in data parallel programs which are automatically transformed into flat data parallel versions for efficient execution on multi-core processors.

[1]  Simon Peyton Jones,et al.  Partial Vectorisation of Haskell Programs , 2008 .

[2]  Wolfgang Karl,et al.  Euro-Par 2000 Parallel Processing , 2000, Lecture Notes in Computer Science.

[3]  Melissa E. O'Neill The Genuine Sieve of Eratosthenes , 2009, Journal of Functional Programming.

[4]  Rizos Sakellariou,et al.  Euro-Par 2001 Parallel Processing , 2001, Lecture Notes in Computer Science.

[5]  Manuel M. T. Chakravarty,et al.  Nepal - Nested Data Parallelism in Haskell , 2001, Euro-Par.

[6]  Siddhartha Chatterjee,et al.  Irregular computations in Fortran - expression and implementation strategies , 1999, Sci. Program..

[7]  Hans-Wolfgang Loidl,et al.  Parallel and Distributed Haskells , 2002, Journal of Functional Programming.

[8]  Simon L. Peyton Jones,et al.  Associated type synonyms , 2005, ICFP '05.

[9]  Manuel M. T. Chakravarty,et al.  Costing Nested Array Codes , 2002, Parallel Process. Lett..

[10]  Guy E. Blelloch,et al.  Programming parallel algorithms , 1996, CACM.

[11]  Simon L. Peyton Jones,et al.  Data parallel Haskell: a status report , 2007, DAMP '07.

[12]  Stephen Gilmore,et al.  Combining Measurement and Stochastic Modelling to Enhance Scheduling Decisions for a Parallel Mean Value Analysis Algorithm , 2006, International Conference on Computational Science.

[13]  Robert H. Halstead,et al.  Lazy task creation: a technique for increasing the granularity of parallel programs , 1990, LISP and Functional Programming.

[14]  Piet Hut,et al.  A hierarchical O(N log N) force-calculation algorithm , 1986, Nature.

[15]  Simon L. Peyton Jones,et al.  Type checking with open type functions , 2008, ICFP.

[16]  Gabriele Keller Transformation-based implementation of nested data parallelis for distributed memory machines , 1999 .

[17]  Guy E. Blelloch,et al.  Compiling Collection-Oriented Languages onto Massively Parallel Computers , 1990, J. Parallel Distributed Comput..

[18]  John H. Reppy,et al.  Manticore: a heterogeneous parallel language , 2007, DAMP '07.

[19]  Guy E. Blelloch,et al.  NESL: A Nested Data-Parallel Language , 1992 .

[20]  Manuel M. T. Chakravarty,et al.  More types for nested data parallel programming , 2000, ICFP '00.

[21]  Roman Leshchinskiy,et al.  Higher order nested data parallelism: semantics and implementation , 2006 .

[22]  Manuel M. T. Chakravarty,et al.  Higher Order Flattening , 2006, International Conference on Computational Science.