Was ist der Zustand von OCaml ist die Parallelisierung Fähigkeiten?
Ich bin daran interessiert, mit OCaml für ein Projekt, aber ich bin mir nicht sicher, wo seine Parallelisierung Fähigkeiten werden mehr. Gibt es eine message-passing-Fähigkeit in OCaml? Ist OCaml in der Lage, effektiv zu nutzen, mehr als 1 CPU?
Meiste, was ich gelesen habe über das Thema geschrieben wurde, 2002-2006, und ich habe nicht gesehen, nichts mehr die jüngsten.
Dank!
- Siehe auch diese Frage im Zusammenhang mit SO
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Ausgabe 2009 der Caml-weekly news ("CWN", die einen Auszug von interessanten Nachrichten aus der caml-Liste) zeigt, dass:
den offiziellen Linie der Partei auf threads und Ocaml hat sich nicht verändert. Ein bemerkenswertes Zitat:
(wie Ocaml-threads können immer noch nützlich sein, siehe eine Bemerkung, die durch die Täter selbst in einer anderen Frage auf SO)
die am häufigsten gewählte Paradigma für Parallelität, message-passing, und der Hinweis ist X. Leroy ' s OcamlMPI, die Bereitstellung von Bindungen für die Programmierung in SPMD Stil gegen die MPI-standard. Das gleiche CWN Problem, ich wies oben verweist auf Beispiele, und zahlreiche andere Projekte.
anderen message-passing-Lösung ist JoCaml, neuen, wegweisenden Stil der gleichzeitigen Kommunikation bekannt als join-Kalkül. Beachten Sie, dass es ist Binär-kompatibel mit OCaml-Compiler.
dass nicht verhindern, dass die Konfektion einer Laufzeit, deren GC ist ok mit der Parallelität, aber: eine Diskussion der OCAML4MC in das andere Problem der CWN.
Gibt es auch:
Netmulticore - multi-processing-sharing-ocaml-Werte über mapped shared memory.
CamlP3l - Caml-compiler für parallele Programme.
OCaml-Java - ein OCaml-compiler erzeugt Java-bytecode
Habe ich nicht befolgt mehr die jüngsten Diskussionen um Ocaml - & parallele Programmierung, obwohl. Ich verlasse diese CW, so das andere update, was ich noch erwähnen. Es wäre toll, wenn diese Frage konnte erreichen das gleiche Niveau an Vollständigkeit als die Analog eine für Haskell.
Derzeit, die OCaml-runtime keine Unterstützung für die Ausführung auf mehreren Kernen parallel, so dass eine einzelne OCaml-Verfahren nicht nutzen können mehrere Kerne. Dies ist unwahrscheinlich, dass die Veränderung direkt; die Richtung der OCaml Entwickler sind die meisten daran interessiert, für erhöhte Parallelität zu sein scheint, dass mehrere OCaml Laufzeiten parallel laufen, in einem einzigen Prozess; dies ermöglicht eine sehr schnelle Nachricht übergeben, aber wird nicht zulassen, dass mehrere threads laufen parallel in einem shared-memory-Konfiguration. Die wichtigsten hangup ist der garbage collector; vor einigen Jahren, das team experimentierte mit einer gleichzeitigen GC, aber es wurde inakzeptablen Verzögerungen in der Singlethread-Fall.
Gibt es ein paar Projekte, nämlich Functory und OCamlnet, die multicore-happy Parallelität durch die Verwendung mehrerer Prozesse.
Im Allgemeinen, die OCaml-community neigt dazu zu Gunsten der message-passing-Ansätze, die getan werden kann, über Prozessgrenzen hinweg (wie OCamlnet tut), über single-process shared-memory multithreading. Wenn Ihr Programm teilt sich in mehrere Prozesse (viele können!), dann ja, können Sie effizient mehrere CPUs.
BSMLlib bietet eine vereinfachte Programmierschnittstelle für Daten-parallele Programmierung in OCaml.
Seine Ausführung beträgt die BSP-message-passing-style, aber es ist deterministisch und sogar deklarativen für eine Teilmenge von OCaml.
Das wesentliche Konzept ist das 'a par Typ entspricht einem Vektor der Werte, einen pro Prozess.
http://traclifo.univ-orleans.fr/BSML/
http://fr.wikipedia.org/wiki/Bulk_Synchronous_Parallel_ML
Gaétan Hains
Universität Paris-Est