Was bringen funktionale Programmiersprachen bei der Parallelisierung?
-
parallelisierung ist ja schön und gut. aber was bringt das wirklich in realen programmen?
ich habe allerdings in größeren programmen keine wirklichen performancegewinne verspüren können, da die flaschenhälse meistens woanders liegen:
- zu viel hauptspeicher wird verbraucht (-> swappen)
- parallele zugriffe auf platten sind kontraproduktiv
- mikro-parallelisierung ist eher kontraproduktiv, da zu viel overhead entstehtab wann lohnt sich denn parallelisierung wirklich? wann sollte man parallelisieren und wann sollte man es lieber nicht machen?
denn wie gesagt, parallelisierung ist schwierig, aufwändig und macht den code schwer lesbarer...
-
Bei großen Daten Mengen bringt es schon einiges. Viele Bildverarbeitungsoperationen lassen sich sehr einfach parallelisieren ohne irgendwelche Locks usw. Mit OpenMP schreibst du z.B. einfach #pragma omp parallel for vor die for-Schleife und alles andere passiert automatische. Und der Code ist immer noch genauso einfach zu lesen.
-
mathik schrieb:
ab wann lohnt sich denn parallelisierung wirklich? wann sollte man parallelisieren und wann sollte man es lieber nicht machen?
Wenn du große Datenmengen numbercrunshen willst, dann lohnt es sich fast immer.
Zum Beispiel sind SVD oder PCA auf einem großen Datensatz schon sehr sexy wenn man sie parallelisieren kann. Ähnliches gilt bei fast der gesamten Linearen Algebra. Nicht umsonst gibt es zum Beispiel CUBLAS um die Standardrechnungen massiv parallel auf der Grafikkarte durchzuführen.
Auch lässt sich der Overhead massiv drücken wenn man um Beispiel Threadpools verwendet anstatt jedes mal Threads zu erschaffen oder zu zerstören. Dann lohnen sich zum Beispiel schon Map&Reduce für Parallelisierung.
-
otze schrieb:
Ähnliches gilt bei fast der gesamten Linearen Algebra.
Gibts dafür praktische Anwendungsbeispiele?
-
-
knivil schrieb:
Ein "parallel for" usw. bekommst du auch mit Frameworks in anderen Sprachen "gratis".
Damit sind die Moeglichkeiten der meisten Sprachen aber auch schon erschoepft.
Was hat Haskell mehr?
-
???????????????? schrieb:
Was hat Haskell mehr?
Schöne Beispiele wären etwa Pattern Matching oder Typklassen.
-
audacia schrieb:
???????????????? schrieb:
Was hat Haskell mehr?
Schöne Beispiele wären etwa Pattern Matching oder Typklassen.
Was hat das mit Parallelisierung zu tun?
-
Nichts. Ich habe offenbar vergessen, den Kontext einzubeziehen und erst ab "Damit sind die Moeglichkeiten der meisten Sprachen aber auch schon erschoepft" mitgelesen. Schande über mich.
-
???????????????? schrieb:
knivil schrieb:
Ein "parallel for" usw. bekommst du auch mit Frameworks in anderen Sprachen "gratis".
Damit sind die Moeglichkeiten der meisten Sprachen aber auch schon erschoepft.
Was hat Haskell mehr?
Eine grässlich unleserliche Syntax. Die wird man auch kaum verstehen können wenn man sie parallel liest.
-
http://donsbot.wordpress.com/2009/09/03/parallel-programming-in-haskell-a-reading-list/
http://www.haskell.org/haskellwiki/Applications_and_libraries/Concurrency_and_parallelism
-
linearn00b schrieb:
otze schrieb:
Ähnliches gilt bei fast der gesamten Linearen Algebra.
Gibts dafür praktische Anwendungsbeispiele?
Ja, ohne lineare Algebra bist du in der gesamten Statistik aufgeschmissen:
http://en.wikipedia.org/wiki/Multivariate_statisticsschau mal, was für Programme da als Beispiele genannt werden...