Pregunta

¿Existe una implementación del esquema R5RS-o-superior que haga la paralelización?Por ejemplo, si digo hacer:

(map (lambda (x) 
        (pure-functional-stuff x))
     '(1 3 5 7 11 13))

¡Se procesará 1, 3, 5 y 7 simultáneamente si la máquina puede hacerlo?Se supone que es una de las grandes ventajas de la programación funcional, pero no puedo encontrar un esquema mantenido y actualizado que lo hace.Estaría bien con uno que no lo paralizaría a menos que afirmara que la función no tiene efectos secundarios.

¿Fue útil?

Solución

Soy un desarrollador de Schemik y creo que es el esquema que está buscando.El proyecto todavía está desarrollado y mantenido.A principios de este año, lanzé una versión que mejora la compatibilidad con R5RS.Desafortunadamente, Schemik es un proyecto de investigación centrado en el proceso de evaluación de la expresión, por lo que su biblioteca estándar sigue siendo relativamente pequeña.¿Hay alguna funcionalidad en particular que se pierde en Schemik?

Otros consejos

racket tiene futuros que hacen algo muy similar a esto, y también tendrá un segundo enfoque para el paralelismo en un futuro cercano (que se llamarán lugares")).

Resulta que realmente no desea que el compilador intente paralelizarlo todo porque luego terminas perdiendo el tiempo de coordinación de esfuerzos incluso cuando se hace algo simple,

(map add1 '(1 2 3))

Eso sería más rápido hacer solo en un hilo.Sin embargo, muchos idiomas funcionales en estos días le facilitan la facilidad de que esto sea paralelo cuando "ADD1" es en realidad "Cálculo realmente largo".Cada idioma tiene su propio enfoque, pero recomendaría aprovechar los múltiples núcleos en la raqueta con futuros.

Mientras que el compilador decide las cosas automáticamente para usted es agradable, no es una mala compensación cambiar un "mapa" a un "PMAP" donde cree que podría ayudar en lugar de tratar con desaceleraciones en otros lugares porque el compilador era demasiado ambicioso.

algo tan básico como

(define (pmap f xs)
  (map touch (map (λ(x) (future (λ() (f x)))) xs)))

Puede llevarte muy lejos cuando se usa con juiciosidad, pero debe experimentar con las que fracasan sus datos para alimentar a los hilos paralelos.

Acabo de encontrar Schemik

http://schemik.sourceforge.net/

que parece mantenerse a al menos 2009, aunque no sé si es R5RS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top