haskell repa

haskell - ¿Accelerate y Repa tienen diferentes casos de uso?



(1)

He estado jugando con Repa y Accelerate; ambos son interesantes, pero no puedo trabajar cuando uso uno y cuando el otro. ¿Están creciendo juntos, rivales, o simplemente por problemas diferentes?


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

Accelerate es un lenguaje incorporado para la programación de GPU. Accelerate se basa en su propio compilador y paralelismo de GPU para el rendimiento. Un fragmento de código que utiliza la biblioteca Accelerate en realidad no realiza el cálculo de matriz. Genera un programa Accelerate, que es procesado por el propio compilador de Accelerate para generar el código que 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 manera que podría admitir otro objetivo, pero, por lo que puedo decir, la motivación para apoyar 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 limitado; puede expresar tuberías en la forma (f >=> g >=> h) . El conjunto de características de Nikola parece estar más cerca de Accelerate. No tengo la experiencia para compararlos realmente.