Wie paralelliere ich einen Divide and Conquer-Algorithmus in Clojure

9

Als erstes sage ich, dass ich ein Problem habe, indem ich 1 Milliarde Ziffern von Pi berechne, den Faktor einer großen Zahl berechne oder Mergesort über eine große Liste führe. Ich möchte das Problem in kleinere Aufgaben aufteilen und jede der Aufgaben gleichzeitig ausführen und die Ergebnisse kombinieren. Vor allem, wie ist der Name dieser Art von Nebenläufigkeit und wie würden Sie es in Clojure tun?

    
11Kilobytes 31.08.2012, 15:58
quelle

1 Antwort

4

In der aktuellen Clojure 1.4 könntest du dies erreichen, indem du vielleicht pmap , pcalls , oder pvalues Die Funktion pmap ist eine parallele Version von map , während pcalls und pvalues nicht wirklich analoge nichtparallele Versionen haben (obwohl ich denke, list ist eine "nicht parallele Version" von pvalues ).

Für die Probleme, die Sie beschreiben, klingt es jedoch so, als würden Sie eine parallele Version von reduce verwenden wollen. Es gibt eine alte Version von Clojure 1.2 ( siehe hier ), die ich noch nie benutzt habe, deshalb kann ich nicht über seinen Nutzen sprechen.

Mit Clojure 1.5 kommt diese neue "Reducers" -Bibliothek, die Rich Hickey über hier . Hier scheint fold eine parallele Version von reduce zu sein.

    
Omri Bernstein 31.08.2012, 16:25
quelle