Parallele Funktionale ProgrammierungDiese Seite fasst Information zum Erstellen und Ausführen paralleler funktionaler Programme zusammen. Dies betrifft insbesondere Übung 5 im Kurs Funktionale Programmierung, SS 09. Erstellen paralleler ProgrammeDieses Thema ist auf den Folien zu paralleler funktionaler Programmierung behandelt, die auf folgendem Tutorial beruhen: "A Tutorial on Parallel and Concurrent Programming in Haskell", by S.L. Peyton Jones, S. Singh. Konkret werden 3 Arten von Parallelität vorgestellt:
MaschineAls parallele Maschinen können die Maschinen im CIP Pool (2 cores) oder siena.tcs.ifi.lmu.de im TCS Netz (16 cores), genutzt werden. Als account auf siena steht afp_guest zur Verfügung. Das mittels cesar-cipher verschlüsselte P******t ist fiafshji kzshyntsfq uwtlwfrrnsl. SetupFür die Übungen auf Blatt 5 muss mindestens ghc-6.10 verwendet werden. CIP PoolDie Maschinen im CIP Pool sind dual-core Maschinen und daher für ein (minimales) paralleles Setup geeignet. Allerdings muss ghc-6.10 zur Compilierung verwendet werden, der in /home/h/hwloidl/gnu/bin installiert ist. D.h. entweder den Compiler immer mit dem vollen Namen aufrufen, oder den Pfad folgendermaßen erweitern: export PATH=/home/h/hwloidl/gnu/bin:$PATH Um zu checken, dass man die korrekte Version benutzt, ghc --version aufrufen. Dies sollte folgendes liefern: # ghc --version The Glorious Glasgow Haskell Compilation System, version 6.10.3 TCS Multi-core RechnerIm TCS Netz ist eine 16-core Maschine verfügbar: siena. Allerdings muss ghc-6.10 zur Compilierung verwendet werden, der in /usr/local/bin installiert ist. D.h. entweder den Compiler immer mit dem vollen Namen aufrufen, oder den Pfad folgendermaßen erweitern: export PATH=/usr/local/bin:$PATH Um zu checken, dass man die korrekte Version benutzt, ghc --version aufrufen. Dies sollte folgendes liefern: # ghc --version The Glorious Glasgow Haskell Compilation System, version 6.10.1 CompilierungSiehe die Sektion Using SMP Parallelism im GHC User's Guide. Zur Compilierung eines Programms in STM.hs folgende Zeile verwenden: # ghc --make -threaded STM.hsDazu muss Main.hs eine Funktion main enthalten, die dann mittels ./STM 5 39 11 +RTS -N4 -sausgeführt wird. Die Argumente 5 39 11 müssen vom Haskell Programm verarbeitet werden. Die Laufzeitsystem-Option -N4 spezifiziert eine Ausführung auf 4 Prozessoren. Die Laufzeitsystem-Option -s druckt nach Beendigung des Programmes eine Statistik, insbesondere mit der Laufzeit, in folgendem Format: Task 0 (worker) : ... ... INIT time 0.00s ( 0.00s elapsed) MUT time 14.59s ( 3.93s elapsed) GC time 0.71s ( 0.76s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 15.30s ( 4.70s elapsed) <--------------- %GC time 4.6% (16.2% elapsed) ...Zum Vergleich der Laufzeiten der (parallelen) Versionen ist die Total time (elapsed), also die wall-clock time der Auführung, entscheidend. Diese sollte für parallele Programme deutlich geringer sein, als für die sequentielle Version. Für unser Beispiel ist die sequentielle Laufzeit: ./STM 5 39 11 +RTS -N1 -s ... Total time 16.06s ( 16.10s elapsed)d.h. wir haben einen speed-up von 16.10/4.70 = 3.43. Hans-Wolfgang Loidl Last modified: Tue Jun 16 13:55:10 2009 Stardate: [-28]1407.48 |