Einführung Haskell-Grundlagen Parallele Programmierung Schluss Programmiersprachen im Multicore-Zeitalter Haskell Colin Benner 6. 2. 2012 Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Einführung Warum Parallelverarbeitung? Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Einführung Warum Parallelverarbeitung? Warum Haskell? Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Haskell-Grundlagen Syntax f i l t e r : : ( a −> Bool ) −> [ a ] −> [ a ] filter p [] = [] f i l t e r p ( x : xs ) | p x = x : f i l t e r p xs | otherwise = f i l t e r p xs Keine Nebeneffekte lazy evaluation Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Parallele Programmierung mit Haskell Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Glasgow parallel Haskell Funktionen p a r : : a −> b −> b p s e q : : a −> b −> b Beispiel f i b : : I n t −> I n t fib 0 = 0 fib 1 = 1 fib n = a + b where a = f i b ( n−1) b = f i b ( n−2) Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Glasgow parallel Haskell Funktionen p a r : : a −> b −> b p s e q : : a −> b −> b Beispiel f i b : : I n t −> I n t fib 0 = 0 fib 1 = 1 f i b n = a `par` a + b where a = f i b ( n−1) b = f i b ( n−2) Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Glasgow parallel Haskell Funktionen p a r : : a −> b −> b p s e q : : a −> b −> b Beispiel f i b : : I n t −> I n t fib 0 = 0 fib 1 = 1 f i b n = a `par` ( b `pseq` a + b ) where a = f i b ( n−1) b = f i b ( n−2) Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Concurrent Haskell Explizites Thread-Management Kommunikation mit 1 2 3 MVars Kanälen Software Transactional Memory Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Data Parallel Haskell Berechne Produkt von dünn besetzter Matrix und Vektor type V e c t o r = [ F l o a t ] type S p a r s e V e c t o r = [ ( I n t , F l o a t ) type S p a r s e M a t r i x = [ S p a r s e V e c t o r ] ] s p a r s e V e c M u l : : S p a r s e V e c t o r −> V e c t o r −> F l o a t s p a r s e V e c M u l s v v = sum [ x ∗ v ! ! i | ( i , x ) <− s v ] spa rseM a t M u l : : S p a r s e M a t r i x −> V e c t o r −> V e c t o r spa rseM a t M u l sm v = [ s p a r s e V e c M u l r v | r <− sm ] Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Glasgow parallel Haskell Concurrent Haskell Data Parallel Haskell Data Parallel Haskell Berechne Produkt von dünn besetzter Matrix und Vektor type V e c t o r = [ : F l o a t : ] type S p a r s e V e c t o r = [ : ( I n t , F l o a t ) : ] type S p a r s e M a t r i x = [ : S p a r s e V e c t o r : ] s p a r s e V e c M u l : : S p a r s e V e c t o r −> V e c t o r −> F l o a t s p a r s e V e c M u l s v v = sumP [ : x ∗ v ! : i | ( i , x ) <− s v : ] spa rseM a t M u l : : S p a r s e M a t r i x −> V e c t o r −> V e c t o r spa rseM a t M u l sm v = [ : s p a r s e V e c M u l r v | r <− sm : ] Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Erweiterungen Eden: www.mathematik.uni-marburg.de/˜eden/ Glasgow Distributed Haskell: www.macs.hw.ac.uk/˜dsg/gdh/ Parallel Haskell: csg.csail.mit.edu/projects/languages/ph.shtml Eager Haskell: csg.csail.mit.edu/pubs/haskell.html Colin Benner Programmiersprachen im Multicore-Zeitalter Einführung Haskell-Grundlagen Parallele Programmierung Schluss Literatur Haskell Homepage: haskell.org GHC: haskell.org/ghc/ Real World Haskell: book.realworldhaskell.org (Kapitel 24) Concurrent and Parallel Programming: haskell.org/haskellwiki/Applications and libraries/ Concurrency and parallelism A Tutorial on Parallel and Concurrent Programming in Haskell: research.microsoft.com/en-us/um/people/simonpj/ papers/parallel/AFP08-notes.pdf Data Parallel Haskell: haskell.org/haskellwiki/GHC/Data Parallel Haskell Vortrag über Data Parallel Haskell: youtube.com/watch?v=NWSZ4c9yqW8 Colin Benner Programmiersprachen im Multicore-Zeitalter