Po pierwsze powiedz, że mam problem, obliczając 1 miliard cyfr Pi, obliczając silnię z dużej liczby lub wykonując mergesort na dużej liście. Chciałbym podzielić problem na mniejsze zadania i wykonywać każde zadanie jednocześnie i łączyć wyniki. Przede wszystkim jaka jest nazwa tego typu współbieżności i jak by to zrobić w Clojure?Jak paraleliować algorytm podziału i podboju w Clojure
9
A
Odpowiedz
4
W bieżącym Clojure 1.4 można to osiągnąć, używając może pmap
, pcalls
lub pvalues
. Funkcja pmap
jest równoległą wersją map
, natomiast pcalls
i pvalues
nie ma analogicznych nie-równoległych wersji (chociaż, przypuszczam, że list
jest "nierównoległą wersją" z pvalues
).
Jednak z powodu problemów, które opisujesz, brzmi to tak, jakbyś chciał użyć równoległej wersji reduce
. Jest stary z Clojure 1.2 ( see here), którego nigdy nie używałem, więc nie jestem w stanie mówić o jego użyteczności.
W zestawie Clojure 1.5 pojawi się nowa biblioteka "reduktorów", którą Rich Hickey ogłasza na blogu o numerze here. Tutaj, fold
wydaje się być równoległą wersją reduce
.
Nie patrzyłem na nie w głąb, ale może to jest praca dla "Clojure Reducers", które wykorzystują równoległość wideł pod maską. –
http://codereview.stackexchange.com/questions/15160/calculating-a-factorial-with-parallel-sub-computations-using-pmap-pvalues-and-p – noahlz