Programmiersprachen im Multicore-Zeitalter

Werbung
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
Herunterladen