Sembra il clojure will have a fork-join implementation che sembra un wrapper funzionale rispetto al framework fork di java.clojure pmap/preduce vs fork-join
Mi chiedo quale potrebbe essere la differenza tra questi e pmap/predurre?
Sembra il clojure will have a fork-join implementation che sembra un wrapper funzionale rispetto al framework fork di java.clojure pmap/preduce vs fork-join
Mi chiedo quale potrebbe essere la differenza tra questi e pmap/predurre?
Il fork-join è più generale di quello basato su sequenza pmap
/preduce
e dovrebbe consentire un controllo più dettagliato del parallelismo. Le API esatte per fare ciò sono ancora nell'aria.
Dall'esame di quel codice, la loro funzionalità sarà per lo più la stessa: l'unica differenza è che pmap
utilizza Futures in esecuzione sul threadfile Agent come primitiva sottostante, mentre pvmap
utilizza fork-join.
Non sono in grado di dirlo con certezza, ma mi aspetterei che qualunque sia il rendimento migliore nel caso generale diventerebbe l'implementazione standard per pmap
, a meno che non vi siano compromessi abbastanza significativi da rendere entrambi utili.
Sembra anche (per ora almeno) il framework fork-join supporta solo i vettori, quindi non è semi-pigro come pmap
.
Una differenza, per quanto ho capito, è che pmap
verrà eseguito solo in qualsiasi grado di "chunkiness" è dato. La funzione è mappata su ciascun membro della sequenza data a pmap
. Se la granularità è troppo piccola, i potenziali benefici del parallelismo vengono inghiottiti dal sovraccarico di creazione e gestione di troppi Future
s.
Il fork-join consente il furto del lavoro in modo che la quantità di corsa su ciascuna filettatura possa essere adattabile.
Né pmap né pvmap ci salveranno dal dover utilizzare la dimensione del blocco corretto. Per i miei progetti, in genere, si tratta di suddividere i dati in blocchi e di utilizzare la mappa su ogni blocco, quindi di utilizzare pmap per mappare i blocchi in parallelo. quindi ridurre e appiattire.
Queste diapositive contengono alcuni grafici che mostrano il confronto tra i due approcci: http://data-sorcery.org/2010/10/23/clojureconj/
questo sta per essere un argomento di un discorso alla conferenza Clojure-conj: http://clojure-conj.org/speakers#liebke David liebke ora sta lavorando attivamente su di esso per la prossima versione di clojure –
@Alex che l'abstract è ciò che ha spinto questa domanda :). – Surya
Qualche idea viene data a una strategia di implementazione per fork-join su ClojureCLR o, in generale, per garantire che l'API fork-join sia amichevole con implementazioni alternative? –