He estado jugando con Repa y Accelerate, ambos son interesantes, pero no puedo calcular cuándo usaría uno y el otro. ¿Están creciendo juntos, rivales o simplemente por diferentes problemas?Do Accelerate y Repa tienen diferentes casos de uso?
Respuesta
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.
- 1. Casos de uso para los diferentes haml helpers de Padrino
- 2. do fread y fwrite tienen una falla? cómo manejar esto?
- 3. Casos de uso de PipedInputStream y PipedOutputStream
- 4. casos de uso DropBoxManager?
- 5. "SELECT DISTINCT" ignora casos diferentes
- 6. Diagramas de casos de uso
- 7. Casos de uso para NoSQL
- 8. Casos de uso para JCA
- 9. Casos de uso para IdentityHashMap
- 10. Iconos de ActionBar que tienen tamaños diferentes
- 11. Casos de uso para transiciones CSS y animaciones CSS
- 12. Paralelo mapM en matrices Repa
- 13. Google Maps y aplicaciones con mapview tienen diferentes posiciones actuales
- 14. ¿Los diferentes simuladores de 68k tienen diferentes tareas de TRAP?
- 15. C# Comparando cadenas con casos diferentes
- 16. jUnita la misma excepción en casos diferentes
- 17. Casos de uso para flujos en Scala
- 18. ¿Cuáles son los diferentes casos de uso de joblib versus pickle?
- 19. Casos de uso común de erlang
- 20. Historias de usuarios vs casos de uso
- 21. Buenos casos de uso de comentarios
- 22. Casos de uso para utilidades concurrentes Java
- 23. Casos de uso para Clojure en proyectos
- 24. Los casos de uso para @WebInitParam
- 25. ¿Qué casos de uso para OWL?
- 26. Casos de uso para implementar anotaciones
- 27. clase Rubí tipos de casos y declaraciones
- 28. Repa --- ¿Cómo hacer una instancia de lectura?
- 29. iPhone FFT con Accelerate framework vDSP
- 30. Uso de dónde especificar diferentes genéricos
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. –
Gracias, eso es útil. –
Heads-up, accelerate ahora admite CPU multi-core: https://github.com/AccelerateHS/accelerate#additional-components – stites