2010-08-11 8 views
6

In einer 2005 Forschungsarbeit sagte, esIst Concurrent Haskell immer noch auf einen einzelnen Betriebssystem-Thread beschränkt?

Concurrent Haskell zur Zeit nur für einen Uni-Prozessor implementiert ist. Die Laufzeitplanung plant leichten Haskell-Thread in einem einzelnen Betriebssystem-Thread. Haskell-Fäden werden nur an gut definierten "sicheren Punkten" aufgehängt; Sie können nicht willkürlich vorweggenommen werden.

Hat sich dies geändert oder ist Concurrent Haskell immer noch auf einen einzelnen OS-Thread beschränkt?

+0

möglich Duplikat von [Was ist der Status der Multicore-Programmierung in Haskell?] (Http://stackoverflow.com/questions/3063652/whats-the-status-of-multicore-programming-in-haskell) –

Antwort

6

GHC can use multi-cores for Concurrent and Parallel Haskell since 2004. Gleichzeitige, parallele, verschachtelte Daten Parallele Haskell verwenden alle dieselbe Laufzeitumgebung mit mehreren Threads.

+0

Dieser Link ist ein wenig unklar in der Frage von STM. Haben Sie etwas, das zeigt, dass Concurrent Haskells STM-Funktionalität mit seiner Multi-Core-Unterstützung kompatibel ist? –

+0

Ich glaube nicht, dass es irgendetwas gibt, das es inkompatibel machen würde. Ich habe sicherlich STM auf mehreren Kernen verwendet. –

+0

Die ursprüngliche Implementierung von STM war nicht kompatibel mit Multicore. Aber seit du deinen Kommentar gepostet hast, habe ich an anderer Stelle gelesen, dass es geändert wurde, um einen zu verwenden, der funktionieren würde. –

18

[edit: die Frage erwähnt nur Concurrent Haskell, aber das Papier verwiesen wird, glaube ich, "Composable Memory Transactions", die Zeitung, in der Haskell STM erstmals beschrieben wurde. Bitte korrigieren Sie mich, wenn ich hier falsch liege.]

STM funktioniert jetzt gut auf mehreren Kernen. Die parallele Implementierung wurde zuerst in GHC 6.6 ausgeliefert und verwendet eine feinkörnige zweiphasige Sperrstrategie. das heißt, um eine Transaktion zu beglaubigen, versucht die Implementierung zuerst, jede an der Transaktion beteiligte Variable zu sperren, dann schreibt sie die Änderungen fest und gibt schließlich alle Variablen frei. Das Erfassen einer Sperre blockiert nicht: Wenn die Sperre bereits gehalten wird, wird die Transaktion abgebrochen und erneut versucht (dies vermeidet den üblichen Deadlock für die Aufhebung der Sperrreihenfolge, der angewendet würde, wenn die Sperrenerfassung blockiert würde). Diese STM-Implementierung ist sicherlich nicht die schnellste - die Literatur beschreibt viele alternative Techniken, die zu einer besseren Leistung führen würden, aber die Implementierung von GHC ist relativ unkompliziert und beinhaltet keine globalen Sperren (Transaktionen, die mit unterschiedlichen Variablengruppen arbeiten, können fortfahren) parallel ohne Störung).

5

GHC Haskell läuft gut auf Multicores

GHC Haskell-Programme seit 2004 mehrere Haskell Threads über mehrere OS Threads laufen, die sich über mehrere Kerne verteilt werden.

Auch können Sie die latest status of multicore Haskell von dieser Frage SO bekommen.