C'è un'implementazione del regime che paralleli?
Domanda
Esiste un'implementazione di schemi R5RS o superiore che fa la parallelizzazione?Ad esempio, se dico da fare:
(map (lambda (x)
(pure-functional-stuff x))
'(1 3 5 7 11 13))
.
Procederà 1, 3, 5 e 7 simultaneamente se la macchina può farlo?Dovrebbe essere uno dei grandi vantaggi della programmazione funzionale, ma non riesco a trovare uno schema mantenuto e aggiornato che lo fa.Andrei bene con uno che non lo avrebbe parallelizzato a meno che non avrei affermato che la funzione non ha effetti collaterali.
Soluzione
Sono uno sviluppatore di schemik e penso che sia lo schema che stai cercando.Il progetto è ancora sviluppato e mantenuto.All'inizio di quest'anno, ho rilasciato una versione che migliora la compatibilità con R5RS.Sfortunatamente, Schemik è un progetto di ricerca focalizzato sul processo di valutazione dell'espressione, quindi, la sua libreria standard è ancora relativamente piccola.C'è qualche funzionalità particolare che ti manca in Schemik?
Altri suggerimenti
Si scopre che non vuoi veramente il compilatore di provare a parallelizzare tutto perché finisci per perdere tempo a coordinare gli sforzi anche quando fai qualcosa di semplice come,
(map add1 '(1 2 3))
.
Sarebbe più veloce solo da fare su un filo.Tuttavia, molte lingue funzionali in questi giorni ti rendono facile rendere questo parallelo quando "Add1" è in realtà "davvero-calcolo".Ogni lingua ha il proprio approccio, ma consiglierei di sfruttare più core in racket utilizzando i futures.
Mentre il compilatore che decide automaticamente le cose per te è bello, non è un cattivo compromesso cambiare una "mappa" a un "Pmap" dove pensi che potrebbe aiutare piuttosto che affrontare i rallentamenti in altri luoghi perché il compilatore era troppo ambizioso.
Qualcosa come base come
(define (pmap f xs)
(map touch (map (λ(x) (future (λ() (f x)))) xs)))
.
Può farti diventare abbastanza lontano quando usato giudiziosamente, ma dovresti sperimentare con chunking i tuoi dati per nutrire i fili paralleli.
Ho appena trovato schemik
http://schemik.sourceforge.net/
che sembra essere mantenuto almeno il 2009, anche se non so se è r5rs.