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.

È stato utile?

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

racket ha futures che fanno qualcosa di molto simile a questo, e avrà anche un secondo approccio per il parallelismo nel prossimo futuro (che sarà chiamato" luoghi ").

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top