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
9
A
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
- 1. Dividir y conquistar - Array plural
- 2. Paralelismo en el algoritmo de dividir y conquistar
- 3. dividir y conquistar y recursión
- 4. Programación dinámica y Dividir y conquistar
- 5. ¿Algún idioma funcional admite dividir y conquistar de forma nativa?
- 6. ¿Cómo puedo paralelizar un algoritmo en una máquina con múltiples procesadores?
- 7. ¿Qué cantidad de ejecución de código debo paralelizar?
- 8. Algoritmo para dividir un rectángulo en retangles más pequeños?
- 9. Cómo paralelizar groupBy
- 10. Cómo paralelizar correctamente un bucles for anidados
- 11. Necesito un algoritmo para dividir una serie de números
- 12. Dividir y vencer la multiplicación de matrices
- 13. enésimo número más pequeño entre dos bases de datos de tamaño n que usan dividir y conquistar
- 14. Cómo paralelizar la lectura y escritura de archivos
- 15. Algoritmo para dividir números muy grandes
- 16. ¿Problemas y con qué técnica de algoritmo se pueden resolver?
- 17. Cómo dividir un BitArray
- 18. ¿Paralelizar procesos PHP con un script Bash?
- 19. ¿Cómo puede un EJB paralelizar un proceso largo, intensivo de CPU?
- 20. Integración Numérica - ¿Cómo se puede paralelizar?
- 21. Cómo sumar y dividir en MySql
- 22. Cómo dividir un NSDecimalnumber entre decimal y entero y reverso
- 23. paralelizar anidado de bucle en IPython
- 24. Escupir y sorber un vector en Clojure
- 25. En clojure, ¿por qué dividir una cadena de un archivo vacío devuelve 1 elemento?
- 26. = y == en Clojure
- 27. ¿Cómo dividir cadena en un diccionario
- 28. Cómo dividir un trazado correctamente en PHP
- 29. ¿Cómo puedo dividir un archivo en python?
- 30. dividir un diccionario en python en claves y valores
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ó. –
http://codereview.stackexchange.com/questions/15160/calculating-a-factorial-with-parallel-sub-computations-using-pmap-pvalues-and-p – noahlz