2011-06-07 9 views

Respuesta

13

Repa es una biblioteca para la construcción y el recorrido eficiente de matrices, programada en Haskell y ejecutada en el tiempo de ejecución de Haskell. Repa depende del optimizador y subprocesos de GHC para el rendimiento. Puede mezclar el código Haskell arbitrario con Repa (las funciones Repa como map toman las funciones Haskell como parámetros).

Accelerate es un lenguaje incrustado para la programación de GPU. Accelerate se basa en su propio compilador y el paralelismo de la GPU para el rendimiento. Un fragmento de código que utiliza la biblioteca Accelerate no hace cálculos de matriz. Genera un programa Accelerate, que es procesado por el propio compilador de Accelerate para generar el código que realmente procesa los datos de su matriz.

Si desea programar GPU en Haskell, Accelerate es la opción principal. Si desea que su código se ejecute en las CPU, Repa es el camino a seguir. Accelerate no genera código multinúcleo. Está diseñado de una manera que podría soportar otro objetivo, pero por lo que yo sé, la motivación para respaldar las CPU con Accelerator es baja porque hay más competencia.

Edit: Obsidian y Nikola son alternativas para la programación de GPU. A partir de una breve investigación de la documentación, Obsidian parece tener un alcance más estrecho; puede expresar tuberías en el formulario (f >=> g >=> h). El conjunto de características de Nikola parece estar más cerca de Accelerate. No tengo la experiencia para compararlos realmente.

+0

Para programar GPU, también hay [Obsidiana] (https://github.com/svenssonjoel) y [Nikola] (http://www.eecs.harvard.edu/~mainland/projects/nikola/). Ambos son proyectos experimentales, pero también lo es Accelerate. –

+0

Gracias, eso es útil. –

+2

Heads-up, accelerate ahora admite CPU multi-core: https://github.com/AccelerateHS/accelerate#additional-components – stites