2012-08-31 9 views
9

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

+1

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ą. –

+1

http://codereview.stackexchange.com/questions/15160/calculating-a-factorial-with-parallel-sub-computations-using-pmap-pvalues-and-p – noahlz

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.