2012-08-31 25 views
9

Antes que nada decir que tengo un problema, calcular 1 mil millones de dígitos de Pi, calcular el factorial de un número grande o realizar mergesort en una lista grande. Me gustaría dividir el problema en tareas más pequeñas y ejecutar cada una de las tareas al mismo tiempo y combinar los resultados. Antes que nada, ¿cuál es el nombre de este tipo de concurrencia y cómo lo harías en Clojure?Cómo paralelizar un algoritmo de dividir y conquistar en Clojure

+1

No los he visto con profundidad, pero tal vez este es un trabajo para "Reductores Clojure" que usan paralelismo de unión de horquilla debajo del capó. –

+1

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

Respuesta

4

En la versión actual de Clojure 1.4, puede lograr esto usando quizás pmap, pcalls o pvalues. La función pmap es una versión paralela de map, mientras que pcalls y pvalues realmente no tienen versiones análogas no paralelas (aunque, supongo que list es una "versión no paralela" de pvalues).

Sin embargo, para los problemas que describe, parece que desea utilizar una versión paralela de reduce. Hay uno antiguo de Clojure 1.2 ( see here), que nunca he usado, por lo que no puedo hablar sobre su utilidad.

Próximamente Clojure 1.5 será esta nueva biblioteca de "reductores", que Rich Hickey bloguea acerca de here. Aquí, fold parece ser una versión paralela de reduce.

Cuestiones relacionadas