Was bringen funktionale Programmiersprachen bei der Parallelisierung?
-
rüdiger schrieb:
Shade Of Mine schrieb:
Soetwas wie automatische Parallelisierung gibt es nicht.
Klar gibt es das. Im Grunde ist ein Vectoriser ja schon automatische Parallelisierung. Aber einige Fortrancompiler können Autoparallelisierung mit Threads. Würde mich wundern, wenn es für funktionale Sprachen (zumindest Haskell) nicht zumindest irgend ein Forschungsprojekt gibt, dass so etwas auch macht.
Das kann nur im Spezialfall funktionieren. Automatische Parallelisierung für alles, was wohl gemeint war, wäre so wie die Programmiersprache der man sagen muss "ich will Programm XYZ" und die macht es.
-
ölfö schrieb:
Das kann nur im Spezialfall funktionieren. Automatische Parallelisierung für alles, was wohl gemeint war, wäre so wie die Programmiersprache der man sagen muss "ich will Programm XYZ" und die macht es.
Der Pure-Part einer programmiersprache sollte parallelisierbar sein. Und da mittels Monaden jeder Zustand markiert ist, kann der Compiler auch raus kriegen, welche Codeteile durch Locks geschützt werden müssen...den Rest macht dann die Laufzeitanalyse - ohne gehts natürlich nicht.
-
otze schrieb:
ölfö schrieb:
Das kann nur im Spezialfall funktionieren. Automatische Parallelisierung für alles, was wohl gemeint war, wäre so wie die Programmiersprache der man sagen muss "ich will Programm XYZ" und die macht es.
Der Pure-Part einer programmiersprache sollte parallelisierbar sein. Und da mittels Monaden jeder Zustand markiert ist, kann der Compiler auch raus kriegen, welche Codeteile durch Locks geschützt werden müssen...den Rest macht dann die Laufzeitanalyse - ohne gehts natürlich nicht.
otze schrieb:
Parser sind im Allgemeinen nicht parallelisierbar. Da können auch funktionale Sprachen nichts ändern.
Passt wohl nicht zusammen.
-
malsomalso schrieb:
otze schrieb:
Parser sind im Allgemeinen nicht parallelisierbar. Da können auch funktionale Sprachen nichts ändern.
Passt wohl nicht zusammen.
Klar. Das erste war eine spezielle Aussage für State-machines, die über Zustandsübergänge(=Seiteneffekte) definiert sind. Es ist schwer dort einen "Pure-Part" zu finden. Das zweite war eine allgemeine Aussage über Programme. Die spezielle Aussage überschreibt die allgemeine Aussage im richtigen Kontext.
Und nun?
-
otze schrieb:
ölfö schrieb:
Das kann nur im Spezialfall funktionieren. Automatische Parallelisierung für alles, was wohl gemeint war, wäre so wie die Programmiersprache der man sagen muss "ich will Programm XYZ" und die macht es.
Der Pure-Part einer programmiersprache sollte parallelisierbar sein. Und da mittels Monaden jeder Zustand markiert ist, kann der Compiler auch raus kriegen, welche Codeteile durch Locks geschützt werden müssen...den Rest macht dann die Laufzeitanalyse - ohne gehts natürlich nicht.
Das hat nichts mit dem zu tun was ich als automatische Parallelisierung bezeichnen würde. Du schreibst den Pure-Part ja schon so, dass er eben pure und parallelisierbar ist und es wird nicht einfach jeder Algorithmus automatisch pure und parallelisierbar.
-
ölfö schrieb:
Das hat nichts mit dem zu tun was ich als automatische Parallelisierung bezeichnen würde. Du schreibst den Pure-Part ja schon so, dass er eben pure und parallelisierbar ist und es wird nicht einfach jeder Algorithmus automatisch pure und parallelisierbar.
Nein, aber darum geht es nicht. Die Programmiersprache forciert Pure-Funktionen. Und ich halte es für einen massiven Vorteil, wenn man Parallelisierung dann Gratis dazu bekommt. Ist immerhin besser als wenn man sie nicht hätte, richtig? richtig!
-
otze schrieb:
ölfö schrieb:
Das hat nichts mit dem zu tun was ich als automatische Parallelisierung bezeichnen würde. Du schreibst den Pure-Part ja schon so, dass er eben pure und parallelisierbar ist und es wird nicht einfach jeder Algorithmus automatisch pure und parallelisierbar.
Nein, aber darum geht es nicht. Die Programmiersprache forciert Pure-Funktionen. Und ich halte es für einen massiven Vorteil, wenn man Parallelisierung dann Gratis dazu bekommt. Ist immerhin besser als wenn man sie nicht hätte, richtig? richtig!
Doch, genau darum gehts. Du bekommst die Parallelisierung nicht gratis, wenn du nicht weißt wie du den Algorithmus überhaupt parallelisierbar machst. Der Programmierer muss überlegen, wie er einen Algo parallel hin bekommt und das ist meistens die schwierigere Aufgabe. Ein "parallel for" usw. bekommst du auch mit Frameworks in anderen Sprachen "gratis".
-
ölfö schrieb:
Du bekommst die Parallelisierung nicht gratis, wenn du nicht weißt wie du den Algorithmus überhaupt parallelisierbar machst.
The free lunch is over. Was erwartest du denn. Es besteht ein Unterschied zwischen 'helfen/unterstuetzen' und 'Arbeit komplett abnehmen'.
Der Programmierer muss überlegen, wie er einen Algo parallel hin bekommt und das ist meistens die schwierigere Aufgabe.
Tja, der eine muss sich um Synchronisation kuemmern, der andere nicht. Wer hat ein leichteres Leben?
Ausserdem: Wenn du ein Loch in die Wand bohren moechtest, dann holst du dir eine Bohrmaschine. Aber nur weil die Bohrmaschine jetzt auf deinem Tisch liegt, ist noch lange nicht das Loch in der Wand. Du kannst aber auch einen Schraubenzieher nehmen und dich damit versuchen. Was ist wohl einfacher? Fuer denjenigen, der keine Ahnung hat, wie eine Bohrmaschine zu nutzen ist, wird wohl der Schraubenzieher die erste Wahl sein. Alle anderen benutzen die Bohrmaschine.
Ein "parallel for" usw. bekommst du auch mit Frameworks in anderen Sprachen "gratis".
Damit sind die Moeglichkeiten der meisten Sprachen aber auch schon erschoepft.
-
Wer seine erste Bohrmaschine neu hat, glaubt, damit die Welt aus den Angeln bohren zu können.
-
Oder: Nimm eine Bohrmaschine und das Haus bau sich automatisch.
-
Siehe auch das Wort festbohren. Man nimmt dazu einfach eine Bohrmaschine und bohrt etwas fest.
Zum Beispiel "Wie den Router Siemens SE515 dsl festbohren?"
http://www.dslteam.de/forum/showthread.php?t=101274Oder "Deichselhalterung für Wäschespinne festbohren?"
http://www.camping-channel.com/read.php3?num=1&id=12448&loc=0&thread=12448
-
knivil schrieb:
Aber du kannst gerne Parallel-Quicksort in C implementieren und vom Entwicklngsaufwand, Codeumfang, Bugs und Performance mit Implementationen in anderen Sprachen vergleichen.
Der C++ Quicksort wird sogar ohne parallelisierung noch schneller sein als parallelisierter Haskell Code auf 2 Core. :p
-
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?